2021-01-13 gitlab-runner 配置以及迁移

docker中gitlab-runner 配置以及迁移

上一篇:docker中部署gitlab

1.docker中配置gitlab-runner

1.1 dockerhub中拉最新的镜像docker pull gitlab/gitlab-runner
1.2 开启容器

执行命令:docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
参数解释:

  • -d :后台执行。
  • --name gisla-runner:容器名字为gitlab-runner
  • --restart always:总是重启容器
  • -v:第一个是docker容器配置,挂载位置:宿主机位置:容器位置,第二个是让容器能够访问宿主机的docker情况
  • 最后是镜像名
1.3配置gitlab-runner

查看gitlab的项目->settings->CI/CD->Runners如下图所示:
2021-01-13 gitlab-runner 配置以及迁移_第1张图片

执行命令注册runner:gitlab-runner regitster,会出现如下设置:

root@1a37f8f872ac:/# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=223 revision=943fc252 version=13.7.0
Running in system-mode.                            
                                                   
Enter the GitLab instance URL (for example, https://gitlab.com/):
***#输入上图第一个红色框的内容
Enter the registration token:
***#输入上图第二个红色框的内容
Enter a description for the runner:
[1a37f8f872ac]: test for docker runner # 添加的对于这个runner的描述,可以随意写
Enter tags for the runner (comma-separated):
doc-builder#这个是tags,与.gitlab-ci.yml的中设置相关,自己设置,但是需要在后面的tags中设置相同,后面会提到。
Registering runner... succeeded                     runner=XNyhPXYC
Enter an executor: docker-ssh, shell, virtualbox, kubernetes, docker, parallels, ssh, docker+machine, docker-ssh+machine, custom:
docker#使用什么方式执行,可选项在提示中,这里选的是docker
Enter the default Docker image (for example, ruby:2.6):
docker:latest#上一个选项是docker时候会提示使用的镜像名
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

参数说明:

  • Enter the GitLab instance URL (for example, https://gitlab.com/):设置为项目->settings->CI/CD->Runners中的2.Specify the following URL during the Runner setup:具体内容,即上图中的第一个红框。
  • Enter the registration token:设置为项目->settings->CI/CD->Runners中的3.Use the following registration token during setup:具体内容,即上图中的第二个红框。
  • [1a37f8f872ac]: test for docker runner:设置随意,是对这个注册的runner的说明。
  • Enter tags for the runner (comma-separated):设置为doc-builder,这个可以自己设置,但是注意需要和与.gitlab-ci.yml的中设置tags一致,否则在CI时候会一直:在这里插入图片描述
  • Enter an executor: docker-ssh, shell, virtualbox, kubernetes, docker, parallels, ssh, docker+machine, docker-ssh+machine, custom::使用什么方式进行执行runner,我只跑通了docker方式。
  • Enter the default Docker image (for example, ruby:2.6):设置为docker:latest,一个docker镜像,作为后面runner debug deploy项目环境。

到此,完成了gitlab-runner的注册。项目->settings->CI/CD->Runners会显示:
2021-01-13 gitlab-runner 配置以及迁移_第2张图片表示,runner已经与gitlab相连接。点击图中的锁头图标后面的设置在这里插入图片描述按钮
勾选下图红框选项(为了测试所有commit都能CI测试):
2021-01-13 gitlab-runner 配置以及迁移_第3张图片在项目的根目录中添加.gitlab-ci.yml文件内容为:

  - build
  - test
  - deploy

job_build:
  stage: build
  script:
    - echo "I am in build"
  only:
    - master
  tags:
    - doc-builder  

job_test:
  stage: test
  script:
    - echo "I am in test"
  tags:
    - doc-builder

job_deploy:
  stage: deploy
  script:
    - echo "I am in deploy"
  tags:
    - doc-builder

注意,tags与之前设置的一致问题。然后,add , commit , push到远程。
接下来在CI/CD->Jobs中看到部署测试成功情况:2021-01-13 gitlab-runner 配置以及迁移_第4张图片如果此时没有对项目进行构建,而是显示:2021-01-13 gitlab-runner 配置以及迁移_第5张图片

则先检查tags是否一致,若一直,2个选择1.需要重新按照步骤再注册一个新的gitlab-runner register,注意tags需要更换名称,并且停掉当前项目->settings->CI/CD->Runners点击按钮Pause;2.简单的测试gitlab-runner项目的话,删除当前的Runner,项目->settings->CI/CD->Runners点击按钮Remove Runner,然后在gitlab-runner容器中执行gitlab-runner verify --delete,按照上面步骤重新注册一次。到此根据网上的流程跑通。

2.启用gitlab-runner中dicker镜像用自己配置的dockerhub。

2.1需要将之前一个gitlab-runner换一台机器,但是之前没用docker。
2.2按照上面部署,出现问题Could not resolve host: 'http gitlab-ci runner

这是docker容器内不能访问外部端口,再gitlab-runner容器/etc/gitlab-runner/config.toml文件末尾(其实是[runners.docker]下面)添加一个选项network_mode = "host",将gitlab-runner的端口与宿主机设置一致,等同于注册时直接添加此选项,其他方法没有尝试成功。然后继续执行重启gitlab-runner restart。再次取查看gitlab中项目构建情况。

2.3出现问题bad substitution,这个是docker环境问题。

这个问题卡了很长时间,报错的脚本位置是一行注释的内容。原因是容器中后启动docker不适合项目的环境需求,需要修改docker镜像,也就是说需要自己配置一个用于build,depoly项目的镜像,保存到dockerhub(自己设置的本地daockerhub)。出现这个问题后考虑过gitlab-runner镜像中直接用shell执行,在gitlab-runner容器中直接配置环境,但是换为shell后会有2.2中的错误,而且目前还没有解决,不知道原因,所以还是用docker。开启新docker容器,配置环境并保存为镜像自行百度。然后,如果将docker镜像推到远程dockerhub,按照之前的方式,修改一下gitlab-runner register时候的到docker即可。

2.4采用局域网内的docker镜像作为gitlab-runner环境镜像
2.4.1 直接按照2.3方式执行,会报错http: server gave HTTP response to HTTPS client,此时需要创建或修改宿主机器 /etc/docker/daemon.json,添加{ "insecure-registries":["myregistry.example.com:5000"] },注意如果之前文件中有数据,则是将添加,"insecure-registries":["myregistry.example.com:5000"] ,然后,重启dockersudo service docker restart,其中myregistry.example.com为dockerhub内网地址。
2.4.2 报错如下:
ERROR: Preparation failed: Error response from daemon: Get http://***/v2/: 
dial tcp: lookup dockerhub.bmi on ****: read udp ****: read: connection refused
 (docker.go:143:0s)

修改宿主机DNS,修改文件/etc/resolvconf/resolv.conf.d/base,添加nameserver *.*.*.*,其中*.*.*.*为具体的DNS设置。然后宿主机执行命令:

  • sudo /etc/init.d/resolvconf restart

3.当前存在问题

3.1gitlab-runner 采用shell后报错Could not resolve host: 'http gitlab-ci runner,而采用dcoker就没问题,估计还是端口映射问题,shell方式没有设置network_mode = "host"的位置。其他的解决方案没有通过,入/etc/hosts映射方式,也不行。

参考:

  • Private registry push fail: server gave HTTP response to HTTPS client #1874
  • This job is stuck, because you don‘t have any active runners that can run this job.
  • GitLab CI/CD 配置

你可能感兴趣的:(docker,git)