docker安装GitLab-runner

docker安装GitLab-runner

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
docker安装GitLab-runner
sudo docker pull gitlab/gitlab-runner:latest
docker安装GitLab-runner

创建挂载目录

rm -rf /home/data/gitlab-runner/
mkdir -p /home/data/gitlab-runner/{config,data,logs}
chmod 777 -R /home/data/gitlab-runner/
docker安装GitLab-runner

启动容器

gitlab-runner注册参考官网:https://docs.gitlab.com/runner/install/docker.html
docker安装GitLab-runner
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
启动结果:
docker安装GitLab-runner

注册gitlab-runner

Runner注册步骤:
docker安装GitLab-runner
首先,在docker容器里执行注册命令:
docker exec -it gitlab-runner /bin/bash
gitlab-runner register
docker安装GitLab-runner
这里的地址是gitlab配置里的,这里以gitlab中的项目spring-demo为例:
docker安装GitLab-runner
点击该项目进入后,选择设置-》CICD->runner
docker安装GitLab-runner
展开runner后可以看到注册runner的地址,和token,这个就是我们需要用的。
docker安装GitLab-runner
执行注册过程:
docker安装GitLab-runner

详细步骤如下:

[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安装GitLab-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”
docker安装GitLab-runner

修改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

docker安装GitLab-runner

创建SpringBoot项目测试CICD

以下介绍springboot项目,通过定义dockerfile,gitlab-ci.yml相关打包流程,进行自动打包部署,所有访问以http访问,如果是正式环境,需要以https进行访问配置(htps暂不处理)。

项目结构

docker安装GitLab-runner

配置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
docker安装GitLab-runner
注意:这里需要在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";

docker安装GitLab-runner

修改config.toml挂载目录

修改/home/data/gitlab-runner/config/config.toml配置文件maven缓存文件目录,将宿主机目录改在到容器中,即修改volumes内容为:
volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock","/home/.m2/

上一篇:基于windows配置gitlab-runner


下一篇:聊聊 QLExpress 源码 (一)