上一篇:docker中部署gitlab
docker pull gitlab/gitlab-runner
执行命令: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情况查看gitlab的项目->settings->CI/CD->Runners
如下图所示:
执行命令注册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
会显示:
表示,runner已经与gitlab相连接。点击图中的锁头图标后面的设置按钮
勾选下图红框选项(为了测试所有commit都能CI测试):
在项目的根目录中添加.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
中看到部署测试成功情况:如果此时没有对项目进行构建,而是显示:
则先检查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
,按照上面步骤重新注册一次。到此根据网上的流程跑通。
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中项目构建情况。
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即可。
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内网地址。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
Could not resolve host: 'http gitlab-ci runner
,而采用dcoker就没问题,估计还是端口映射问题,shell方式没有设置network_mode = "host"
的位置。其他的解决方案没有通过,入/etc/hosts
映射方式,也不行。