简单总结部署gitlab docker 的流程(针对ubuntu 16.04)
一 准备
1. 安装 docker
2. 安装gitlab-ce
docker run -d --privileged -p 443:443 -p 80:80 --name gitlab --restart always -v /root/gitlab/config:/etc/gitlab -v /root/gitlab/logs:/var/log/gitlab -v /root/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest
挂载目录可以修改
3 安装gitlab-runner
docker run -d --name gitlab-runner --add-host gitlab.test.com:192.168.1.129 --restart always -v /root/gitlab/runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
等下register时候需要填写ce的url,需要域名解析,可以使用
1) --add-host reg.gc.com:192.168.1.129 (域名:ip格式,这里我使用了主机Ip,因为我测试机器只部署了这个程序,你可以改用容器ip)
2) --link gitlab:gitlab.test.com
3) 使用自定义network
二 环境
1. vi /root/gitlab/config/gitlab.rb
修改 external_url 成 "http://gitlab.test.com"
2. docker exec -it $(docker ps |grep runner| awk '{print $1}') /bin/bash
gitlab-runner register --locked=false --docker-extra-hosts=gitlab.test.com:192.168.1.129
如果是add-host方式的话,需要添加 --docker-extra-hosts=gitlab.test.com:192.168.1.129,否则不需要
1)出现Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
输出gitlab的url,域名写你关联的(如gitlab.test.com)
2)出现 Please enter the gitlab-ci token for this runner
去gitlab 页面查看runner的token
3)出现Please enter the gitlab-ci description for this runner
runner 的名字
4)出现Please enter the gitlab-ci tags for this runner (comma separated):
输入 runner过滤用的tag,.gitlab-ci.yml用这个来选择runner
5)出现 Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
这里我选择了docker
6) 出现Please enter the Docker image (eg. ruby:2.1):
选择你需要的镜像(如golang:latest)
三 简单测试
访问http://localhost:80,修改root的账号密码后,创建一个project,比如叫test
git clone 下来
添加一个叫test.go
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
添加一个叫.gitlab-ci.yml
before_script:
- export GO_PROJECT_NAMESPACE="$GOPATH/src/gitexample.com/$CI_PROJECT_NAMESPACE"
- echo $GO_PROJECT_NAMESPACE
- mkdir -p $GO_PROJECT_NAMESPACE
- ln -sf $(pwd) $GO_PROJECT_NAMESPACE
- export GO_PROJECT_PATH="$GO_PROJECT_NAMESPACE/$CI_PROJECT_NAME"
- echo $GO_PROJECT_PATH
- cd $GO_PROJECT_PATH
stages:
- build
build:
stage: build
tags:
- runnertest
script:
- go build
上面的runnertest就是之前填入的runner tag
git add test.go .gitlab-ci.yml
git commit -m 'test'
git push
后就可以看到job 在running,进去可以看到详细的执行日志,
四 总结
1 遇到问题
1) ce和runner以及runner 启动的容器的互联问题
解决办法如上
2) gitlab-runner register后runner状态locked
--locked=false
3) 触发pipeline 后,状态stuck ,提示找不到runner
需要在yml里面的每一个stage指定对应的runner的tag,否则stage会使pipeline stuck
2 对于docker pull很慢,可以搭建个镜像仓库,比如harbor或者官方的registry