docker安装GitLab-runner
- docker安装GitLab-runner
- 拉取镜像
- 创建挂载目录
- 启动容器
- 注册gitlab-runner
- 修改Runner配置文件
- 创建SpringBoot项目测试CICD
- 安装错误
- ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory builds=0
- Using locally found image version due to "if-not-present" pull policy
- Could not transfer artifact com.jayway.jsonpath:json-path:jar:2.4.0
- ERROR: Runner http://192.168.0.87:8880/j7jVRMZfo5srqW1TWEgL is not healthy and will be disabled!
- "Can't close tar writer: io: read/write on closed pipe
- unable to find valid certification path to requested target
- on project spring-demo: Exception caught: no basic auth credentials
- Error response from daemon: Get http://192.168.0.87:8075/v2/: dial tcp 192.168.0.87:8075: connect: connection refused
docker安装GitLab-runner
机器配置:
Centos7.4 192.168.0.87
Docker-20.10.7 192.168.0.87
gitlab-runner 192.168.0.87
gitlab-ce 192.168.0.87
docker 192.168.0.86
Nexus3私服 192.168.0.86
CI:持续集成,我们通常使用CI来做一些自动化工作,比如程序的打包,单元测试,部署等,这种构建方式避免了打包环境差异引起的错误,提高了工作效率。Gitlab-CI是Gitlab官方提供的持续集成服务,我们可以在仓库的根目录下新建.gitlab-ci.yml文件,自己定义持续集成流程模板,并且在Gitlab中配置runner,在之后的每次提交合并中将会触发构建,并且可以通过Gitlab的hook, 在代码提交的各个环节自动地完成一系列的构建工作,总之对于一些非复杂性的集成需求,都是可以满足的。
gitlab-runner注册参考官网:
https://docs.gitlab.com/runner/install/docker.html
拉取镜像
镜像地址:
https://hub.docker.com/r/gitlab/gitlab-runner/tags?page=1&ordering=last_updated
sudo docker pull gitlab/gitlab-runner:latest
创建挂载目录
rm -rf /home/data/gitlab-runner/
mkdir -p /home/data/gitlab-runner/{config,data,logs}
chmod 777 -R /home/data/gitlab-runner/
启动容器
gitlab-runner注册参考官网:https://docs.gitlab.com/runner/install/docker.html
sudo docker run -dit --name gitlab-runner --restart=always
-v /home/data/gitlab-runner/config:/etc/gitlab-runner
-v /var/run/docker.sock:/var/run/docker.sock
gitlab/gitlab-runner:latest
启动结果:
注册gitlab-runner
Runner注册步骤:
首先,在docker容器里执行注册命令:
docker exec -it gitlab-runner /bin/bash
gitlab-runner register
这里的地址是gitlab配置里的,这里以gitlab中的项目spring-demo为例:
点击该项目进入后,选择设置-》CICD->runner
展开runner后可以看到注册runner的地址,和token,这个就是我们需要用的。
执行注册过程:
详细步骤如下:
[root@localhost gitlab-runner]#
#进入gitlab-runner内部
[root@localhost gitlab-runner]# docker exec -it gitlab-runner /bin/bash
#注册gitlab-runner
root@928f47744364:/# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=23 revision=c1edb478 version=14.0.1
Running in system-mode.
#输入gitlab项目注册地址
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.0.87:8880/
#输入gitlab项目注册token
Enter the registration token:
9g3JBgtr7rUtWoVW_GMD
#输入描述信息,可以随便输入
Enter a description for the runner:
[928f47744364]: my-runner
#输入标签名称,可以随便输入
Enter tags for the runner (comma-separated):
my-tag,another-tag
Registering runner... succeeded runner=9g3JBgtr
#选择执行gitlab-runner的执行程序,因为我用docker实现自动部署,所以输入docker:
Enter an executor: custom, virtualbox, docker-ssh+machine, kubernetes, docker, docker-ssh, parallels, shell, ssh, docker+machine:
docker
#选择docker作为执行程序,需要定义一个默认镜像的名称。这个镜像的名称要在后期的.gitlab-ci.yml(自动化部署配置文件)里用到,根据项目代码语言不同,指定不同的镜像。这里项目是java语言的,就使用官方maven:3-jdk-8镜像
Enter the default Docker image (for example, 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!
root@928f47744364:/#
以上表示spring-demo项目gitlab-runner注册成功,此时到我们项目首页右侧设置—》CI/CD —》Runner就可以看到我们刚注册的my-runner了。如图:
以上是通过手动一步一步设置,这种操作相对比较麻烦一些,下面我们根据参数指定注册过程需要的数据直接配置:
docker run -dit --name gitlab-runner --restart always
-v /home/data/gitlab-runner/config:/etc/gitlab-runner
-v /var/run/docker.sock:/var/run/docker.sock
gitlab/gitlab-runner register
–non-interactive
–url “http://192.168.0.87:8880/”
–registration-token “9g3JBgtr7rUtWoVW_GMD”
–description “my-runner”
–tag-list “another-tag, my-tag”
–executor “docker”
–docker-image maven:3-jdk-8
–run-untagged=“true”
–locked=“false”
–access-level=“not_protected”
修改Runner配置文件
修改runner配置文件,因为docker image每次构建都是在独立的container里, maven的 .m2文件并不会被多次构建公用,这里我们可以通过修改gitlab-runner的配置,将maven .m2目录加到volumes中,并增加镜像拉取规则(默认是从远程拉取镜像,这里修改为优先获取本地镜像,不存在时才去远程拉取镜像)。
vim /home/data/gitlab-runner/config/config.toml ,找到volumes配置,修改为如下,分别是挂载了宿主机的docker和配置Maven的缓存,提高效率。
[root@localhost config]#
[root@localhost config]# vim /home/data/gitlab-runner/config/config.toml
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "my-runner"
url = "http://192.168.0.87:8880/"
token = "j7jVRMZfo5srqW1TWEgL"
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
#挂载宿主机的docker和配置Maven的缓存,提高效率
volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock","/home/.m2/:/.m2/"]
tls_verify = false
image = "maven:3-jdk-8"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
shm_size = 0
创建SpringBoot项目测试CICD
以下介绍springboot项目,通过定义dockerfile,gitlab-ci.yml相关打包流程,进行自动打包部署,所有访问以http访问,如果是正式环境,需要以https进行访问配置(htps暂不处理)。
项目结构
配置docker
由于nexus3私服安装在86机器上,gitlab安装在87机器上,所以在gitlab上提交项目时,上传镜像,运行项目操作会使用到nexus3私服,所以这里需要在87服务器上配置通过docker访问86服务器nexus3服务地址,gitlab和docker安装和配置这里不在说明,参考以上gitlab安装。配置内容如下:
vim /etc/docker/daemon.json
{
"insecure-registries":[
"192.168.0.86:8076",
"192.168.0.86:8075"
]
}
{
"registry-mirrors": [
"https://47.119.120.197:8075",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://hub.docker.com",
"https://hub.daocloud.io"
]
}
配置完成后重启docker服务
systemctl daemon-reload
systemctl restart docker
重启完成后可以通过docker登录测试访问nexus服务是否正常:
docker login -u admin -p admin123 http://192.168.0.86:8075
注意:这里需要在86机器上开放docker访问端口2375,否则,在其他机器无法访问86私服。Docker/nexus安装参考上一文章内容。
注册runner
注册runner,主要在gilab-ci.yml定义执行流程使用,以下定义了build、package、deploy三种方式:
docker run -it --rm -v /home/data/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
--non-interactive \
--url "http://192.168.0.87:8880/" \
--registration-token "sNPXWNcFsqBrLXEVFNxi" \
--description "package-runner" \
--tag-list "mvn-package" \
--executor "docker" \
--docker-privileged \
--docker-image docker:latest \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected";
docker run -it --rm -v /home/data/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
--non-interactive \
--url "http://192.168.0.87:8880/" \
--registration-token "sNPXWNcFsqBrLXEVFNxi" \
--description "build-runner" \
--tag-list "build" \
--executor "docker" \
--docker-privileged \
--docker-image docker:latest \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected";
docker run -it --rm -v /home/data/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
--non-interactive \
--url "http://192.168.0.87:8880/" \
--registration-token "sNPXWNcFsqBrLXEVFNxi" \
--description "deploy-runner" \
--tag-list "deploy" \
--executor "docker" \
--docker-privileged \
--docker-image docker:latest \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected";
修改config.toml挂载目录
修改/home/data/gitlab-runner/config/config.toml配置文件maven缓存文件目录,将宿主机目录改在到容器中,即修改volumes内容为:
volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock","/home/.m2/