Docker搭建 Gitlab CI 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

发布了647 篇原创文章 · 获赞 816 · 访问量 98万+

猜你喜欢

转载自blog.csdn.net/cckevincyh/article/details/99220625