Docker搭建 Gitlab CI Runner

迈不过友情╰ 2021-10-18 11:28 601阅读 0赞

文章目录

  • 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 镜像

  1. docker pull gitlab/gitlab-runner:latest
  2. [root@cc ~]# docker pull gitlab/gitlab-runner:latest
  3. latest: Pulling from gitlab/gitlab-runner
  4. 5b7339215d1d: Already exists
  5. 14ca88e9f672: Already exists
  6. a31c3b1caad4: Already exists
  7. b054a26005b7: Already exists
  8. 3e632a4a443a: Pull complete
  9. ba2134333bd9: Pull complete
  10. 62c364b5775c: Pull complete
  11. 0385484b9232: Pull complete
  12. ea081b4b6dad: Pull complete
  13. Digest: sha256:a2e3fd77ea1fad193871eafa151604fc24f3c20bef5c8bd93aa1488d1d1a293c
  14. Status: Downloaded newer image for gitlab/gitlab-runner:latest
  15. docker.io/gitlab/gitlab-runner:latest

启动 gitlab-runner容器

  1. docker run -d --name gitlab-runner --restart always \
  2. -v /var/run/docker.sock:/var/run/docker.sock \
  3. -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  4. gitlab/gitlab-runner:latest

注册runner

首先我们创建一个新的项目

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们找到项目中的setting->CI/CD,然后找到Runners

这里面的信息我们一会注册runner的时候需要用到。

在这里插入图片描述

好,我们在命令行中执行如下命令:

  1. docker exec -it gitlab-runner gitlab-ci-multi-runner register

然后就可以把上面的信息填入下来。

  1. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
  2. http://192.168.174.129:10080/
  3. Please enter the gitlab-ci token for this runner:
  4. bsbaVaeqk3NbJ8W25qnx
  5. Please enter the gitlab-ci description for this runner:
  6. [cb7d680e0af0]: gitlab ci runner test demo
  7. Please enter the gitlab-ci tags for this runner (comma separated):
  8. demo
  9. 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,看看有什么结果

  1. [root@cc ~]# curl -i http://192.168.174.129:10080/ci/api/v1/runners/register.json
  2. HTTP/1.1 401 Unauthorized
  3. Server: nginx
  4. Date: Sun, 11 Aug 2019 08:12:57 GMT
  5. Content-Type: application/json; charset=utf-8
  6. Content-Length: 61
  7. Connection: keep-alive
  8. Cache-Control: no-cache
  9. X-Request-Id: Scv8MK19Wr6
  10. X-Runtime: 0.071551
  11. { "error":"You need to sign in or sign up before continuing."}

然后我们进入docker里面试试访问这个URL有啥结果。貌似是不能访问的。

  1. [root@cc ~]# docker exec -it gitlab-runner /bin/bash
  2. root@cb7d680e0af0:/# curl -i http://192.168.174.129:10080/ci/api/v1/runners/register.json
  3. curl: (7) Failed to connect to 192.168.174.129 port 10080: No route to host

我发现使用systemctl restart docker重启docker后也是无法访问,最后的解决方法就是关闭防火墙

  1. systemctl stop firewalld

我也是通过查阅资料才解决的,你们可以参考:https://www.jianshu.com/p/96aebba5d3cc

然后就可以发现在docker机器里面可以访问了。

  1. [root@cc ~]# docker exec -it gitlab-runner /bin/bash
  2. root@cb7d680e0af0:/# curl -i 192.168.174.129:10080/ci/api/v1/runners/register.json
  3. HTTP/1.1 401 Unauthorized
  4. Server: nginx
  5. Date: Sun, 11 Aug 2019 08:45:27 GMT
  6. Content-Type: application/json; charset=utf-8
  7. Content-Length: 61
  8. Connection: keep-alive
  9. Cache-Control: no-cache
  10. X-Request-Id: XaJHE9gZvF9
  11. X-Runtime: 0.008333
  12. { "error":"You need to sign in or sign up before continuing."}root@cb7d680e0af0:/#

然后我们可以重新reset一下token,重新注册。

在这里插入图片描述

  1. [root@cc ~]# docker exec -it gitlab-runner gitlab-ci-multi-runner register
  2. Runtime platform arch=amd64 os=linux pid=66 revision=de7731dd version=12.1.0
  3. Running in system-mode.
  4. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
  5. http://192.168.174.129:10080/
  6. Please enter the gitlab-ci token for this runner:
  7. nUdxufLPz8iCEzAeBt7U
  8. Please enter the gitlab-ci description for this runner:
  9. [cb7d680e0af0]: gitlab runner demo
  10. Please enter the gitlab-ci tags for this runner (comma separated):
  11. demo
  12. Registering runner... succeeded runner=nUdxufLP
  13. Please enter the executor: custom, shell, kubernetes, docker, docker-ssh, parallels, ssh, virtualbox, docker+machine, docker-ssh+machine:
  14. docker
  15. Please enter the default Docker image (e.g. ruby:2.6):
  16. maven:3-jdk-8
  17. 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文件

  1. stages:
  2. - build
  3. - test
  4. - deploy
  5. job_build:
  6. stage: build
  7. script:
  8. - mvn clean install
  9. only:
  10. - master
  11. tags:
  12. - demo
  13. job_test:
  14. stage: test
  15. script:
  16. - mvn test
  17. tags:
  18. - demo
  19. job_deploy:
  20. stage: deploy
  21. script:
  22. - echo "deploy over..."
  23. tags:
  24. - demo

说明:这个yml文件就是有3个job组成,依次为build、test、deploy。在执行这个CI流程时候,会分解成3个job依次执行。这里tags: demo就是指定使用哪个runner来执行这个job,我们也可以执行其他已注册可用的runner。更多关于gitlab的CI流程大家可以自行学习。

然后我们把代码和配置提交上去之后就会发现开始跑CI runner了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

但是最后发现在第一个job的时候就执行失败了。

  1. 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的容器

  1. docker exec -it gitlab-runner /bin/bash
  2. vim /etc/gitlab-runner/config.toml

加入配置

  1. extra_hosts = ["localhost:192.168.174.129"]

在这里插入图片描述

然后重启一下docker。

  1. systemctl restart docker

然后重新retry run一下我们的pipline job,最后经过一番折腾终于出结果了,折腾了我好几次。。。其实我看到网上有些人建议是不要把gitlab还有gitlab runner都装在一台机器上。
在这里插入图片描述

获取日志

  1. docker logs gitlab-runner

停止并删除现有容器

  1. 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

发表评论

表情:
评论列表 (有 0 条评论,601人围观)

还没有评论,来说两句吧...

相关阅读