Docker搭建 Gitlab CI Runner
文章目录
- Docker搭建 Gitlab CI Runner
- 拉取 gitlab-runner 镜像
- 启动 gitlab-runner容器
- 注册runner
- 定义项目构建流程
- 获取日志
- 停止并删除现有容器
- 参考
Docker搭建 Gitlab CI Runner
docker中搭建Gitlab 的可以去看我的上一篇博文:Docker搭建GitLab
Docker搭建 Gitlab CI Runner我们可以参考官网去安装:https://docs.gitlab.com/runner/ 或者 https://docs.gitlab.com/runner/install/docker.html
拉取 gitlab-runner 镜像
docker pull gitlab/gitlab-runner:latest
[root@cc ~]# docker pull gitlab/gitlab-runner:latest
latest: Pulling from gitlab/gitlab-runner
5b7339215d1d: Already exists
14ca88e9f672: Already exists
a31c3b1caad4: Already exists
b054a26005b7: Already exists
3e632a4a443a: Pull complete
ba2134333bd9: Pull complete
62c364b5775c: Pull complete
0385484b9232: Pull complete
ea081b4b6dad: Pull complete
Digest: sha256:a2e3fd77ea1fad193871eafa151604fc24f3c20bef5c8bd93aa1488d1d1a293c
Status: Downloaded newer image for gitlab/gitlab-runner:latest
docker.io/gitlab/gitlab-runner:latest
启动 gitlab-runner容器
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest
注册runner
首先我们创建一个新的项目
我们找到项目中的setting->CI/CD,然后找到Runners
这里面的信息我们一会注册runner的时候需要用到。
好,我们在命令行中执行如下命令:
docker exec -it gitlab-runner gitlab-ci-multi-runner register
然后就可以把上面的信息填入下来。
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.174.129:10080/
Please enter the gitlab-ci token for this runner:
bsbaVaeqk3NbJ8W25qnx
Please enter the gitlab-ci description for this runner:
[cb7d680e0af0]: gitlab ci runner test demo
Please enter the gitlab-ci tags for this runner (comma separated):
demo
ERROR: Registering runner... failed runner=bsbaVaeq status=couldn't execute POST against http://192.168.174.129:10080/api/v4/runners: Post http://192.168.174.129:10080/api/v4/runners: dial tcp 192.168.174.129:10080: getsockopt: no route to host
结果在注册的时候出现了错误,大概意思就是docker里面访问不到这个URL,我们可以试试直接在宿主机上访问URL,看看有什么结果
[root@cc ~]# curl -i http://192.168.174.129:10080/ci/api/v1/runners/register.json
HTTP/1.1 401 Unauthorized
Server: nginx
Date: Sun, 11 Aug 2019 08:12:57 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 61
Connection: keep-alive
Cache-Control: no-cache
X-Request-Id: Scv8MK19Wr6
X-Runtime: 0.071551
{ "error":"You need to sign in or sign up before continuing."}
然后我们进入docker里面试试访问这个URL有啥结果。貌似是不能访问的。
[root@cc ~]# docker exec -it gitlab-runner /bin/bash
root@cb7d680e0af0:/# curl -i http://192.168.174.129:10080/ci/api/v1/runners/register.json
curl: (7) Failed to connect to 192.168.174.129 port 10080: No route to host
我发现使用systemctl restart docker
重启docker后也是无法访问,最后的解决方法就是关闭防火墙
systemctl stop firewalld
我也是通过查阅资料才解决的,你们可以参考:https://www.jianshu.com/p/96aebba5d3cc
然后就可以发现在docker机器里面可以访问了。
[root@cc ~]# docker exec -it gitlab-runner /bin/bash
root@cb7d680e0af0:/# curl -i 192.168.174.129:10080/ci/api/v1/runners/register.json
HTTP/1.1 401 Unauthorized
Server: nginx
Date: Sun, 11 Aug 2019 08:45:27 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 61
Connection: keep-alive
Cache-Control: no-cache
X-Request-Id: XaJHE9gZvF9
X-Runtime: 0.008333
{ "error":"You need to sign in or sign up before continuing."}root@cb7d680e0af0:/#
然后我们可以重新reset一下token,重新注册。
[root@cc ~]# docker exec -it gitlab-runner gitlab-ci-multi-runner register
Runtime platform arch=amd64 os=linux pid=66 revision=de7731dd version=12.1.0
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.174.129:10080/
Please enter the gitlab-ci token for this runner:
nUdxufLPz8iCEzAeBt7U
Please enter the gitlab-ci description for this runner:
[cb7d680e0af0]: gitlab runner demo
Please enter the gitlab-ci tags for this runner (comma separated):
demo
Registering runner... succeeded runner=nUdxufLP
Please enter the executor: custom, shell, kubernetes, docker, docker-ssh, parallels, ssh, virtualbox, docker+machine, docker-ssh+machine:
docker
Please enter the default Docker image (e.g. ruby:2.6):
maven:3-jdk-8
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
【说明】
1、gitlab ci的地址以及token,从你要配置该runner到哪个项目,就去gitlab下该项目setting->CI/CD—>Runners下可以找到。
2、gitlab-ci tags这个很重要,在项目构建流程yaml文件里面指定tag,就是匹配使用哪个tag的runner,这里我定义了hwy,回头再配置文件里面就指定这个tag。
3、executor:执行者可以有很多种,这里我们使用docker,方便构建执行。
4、Docker image:构建Docker image时填写的image名称,根据项目代码语言不同,指定不同的镜像。我这里项目是java语言的,所以我使用官方maven:3-jdk-8镜像。
然后我们就注册完毕了。
过一会 runners 页面就会出现:
定义项目构建流程
可以参考:https://blog.csdn.net/aixiaoyang168/article/details/72168834
我这里写了一个demo的.gitlab-ci.yml文件
stages:
- build
- test
- deploy
job_build:
stage: build
script:
- mvn clean install
only:
- master
tags:
- demo
job_test:
stage: test
script:
- mvn test
tags:
- demo
job_deploy:
stage: deploy
script:
- echo "deploy over..."
tags:
- demo
说明:这个yml文件就是有3个job组成,依次为build、test、deploy。在执行这个CI流程时候,会分解成3个job依次执行。这里tags: demo就是指定使用哪个runner来执行这个job,我们也可以执行其他已注册可用的runner。更多关于gitlab的CI流程大家可以自行学习。
然后我们把代码和配置提交上去之后就会发现开始跑CI runner了。
但是最后发现在第一个job的时候就执行失败了。
fatal: unable to access 'http://gitlab-ci-token:[MASKED]@localhost:10080/root/gitlab_runner_demo.git/': Failed to connect to localhost port 10080: Connection refused
我们可以参考:
https://gitlab.com/gitlab-org/gitlab-runner/issues/1036
还有 https://blog.gezhiqiang.com/2017/03/01/gitlab-ce-install/
还有 https://github.com/ayufan/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md
看到网上说了很多的解决方法:
进入runner的docker 容器中,然后修改配置/etc/gitlab-runner/config.toml
,然后设置external_url。
external_url是很重要的一环。GitLab的资源如图片、git仓库地址都是基于这个url。这个值默认是基于hostname的。需要把external_url设置为一个可访问的主机域名或ip地址。 可以根据自己情况修改external_url。可以直接设置成ip。
注意:external_url 必须带如http:// 的协议头。
好像设置extra_hosts 也是可以的。
看到还有说设置clone_url的。
最终我尝试的解决方法是:
进入docker runner的容器
docker exec -it gitlab-runner /bin/bash
vim /etc/gitlab-runner/config.toml
加入配置
extra_hosts = ["localhost:192.168.174.129"]
然后重启一下docker。
systemctl restart docker
然后重新retry run一下我们的pipline job,最后经过一番折腾终于出结果了,折腾了我好几次。。。其实我看到网上有些人建议是不要把gitlab还有gitlab runner都装在一台机器上。
获取日志
docker logs gitlab-runner
停止并删除现有容器
docker stop gitlab-runner && docker rm gitlab-runner
参考
https://blog.csdn.net/aixiaoyang168/article/details/72168834
https://www.jianshu.com/p/4c82918b079b
https://lutaonan.com/blog/gitlab-ci-runner/
我的demo项目可以到我的gitee中下载:https://gitee.com/cckevincyh/gitlab-runner-demo
还没有评论,来说两句吧...