当前位置: 代码迷 >> 综合 >> Docker安装gitlab-runner 实现自动 CI/CD (持续集成/持续部署) 配置
  详细解决方案

Docker安装gitlab-runner 实现自动 CI/CD (持续集成/持续部署) 配置

热度:104   发布时间:2023-10-10 05:34:32.0

话不多说,直接开撸

gitlab-runner 安装

如果没有安装docker的,先安装docker,yum安装docker如下(自定义安装 docker-ce 可参考我的另一篇博客 Centos 7 安装 docker & docker-compose)

yum -y install docker

拉取 gitlab-runner 镜像

docker pull gitlab/gitlab-runner

如果拉去镜像报错 Error response from daemon
配置阿里云镜像加速器
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://l3go4y6y.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

启动 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

gitlab-runner register 注册

方式一

在docker容器里执行 gitlab-runner register 注册命令:

docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register

然后根据提示输入:
1、gitlab地址(如下图)
2、token(如下图)
3、描述
4、gitlab-ci tags (即gitlab-ci文件的stage的tag)
5、选择执行gitlab-runner的执行程序,如果选docker,则继续下一步
6、如果选择docker作为执行程序,那要定义一个默认镜像的名称:alpine:laster
(注册完成)

Docker安装gitlab-runner 实现自动 CI/CD (持续集成/持续部署) 配置

如果注册失败,docker logs 报错如下
ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory builds=0
解决办法:
进入容器内部

docker exec -it 容器id /bin/bash 

新建 config.toml 文件

touch /etc/gitlab-runner/config.toml

退出容器重新注册即可。

方式二

注册脚本,替换对应的参数的值,比如url和token等

docker run -it --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \--non-interactive \--executor "docker" \--docker-privileged \--docker-image docker:latest \--url "https://gitlab.com/" \--registration-token "2xAmgi-WmzWh9evSHgrx" \--description "package-runner" \--tag-list "mvn-package" \--run-untagged="true" \--locked="false" \--access-level="not_protected";docker run -it --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \--non-interactive \--executor "docker" \--docker-privileged \--docker-image docker:latest \--url "https://gitlab.com/" \--registration-token "2xAmgi-WmzWh9evSHgrx" \--description "build-runner" \--tag-list "build" \--run-untagged="true" \--locked="false" \--access-level="not_protected";docker run -it --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \--non-interactive \--executor "docker" \--docker-privileged \--docker-image docker:latest \--url "https://gitlab.com/" \--registration-token "2xAmgi-WmzWh9evSHgrx" \--description "deploy-runner" \--tag-list "deploy" \--run-untagged="true" \--locked="false" \--access-level="not_protected";

修改Runner配置文件

vim /srv/gitlab-runner/config/config.toml

找到volumes配置,修改为如下,分别是挂载了宿主机的docker和配置Maven的缓存,提高效率

volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock","/data/.m2/:/.m2/"]

在volumes配置下方增加一行配置,防止Runner重复拉取镜像

pull_policy = "if-not-present"

重启Runner

创建SpringBoot项目测试CICD

在项目根目录创建个Dockerfile

FROM openjdk:8-jdk
COPY target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]

项目根目录创建.gitlab-ci.yml文件

# 因为我们Runner执行器设置为docker, 所以这里需要指定docker的版本
image: docker:stablevariables:MAVEN_OPTS: "-Dmaven.repo.local=/.m2"stages:- package- build- deploy# 打包
package:stage: package# 打包用到了maven, 所有需要拉取maven镜像, 这是我自己构建的阿里云maven私服的maven镜像image: registry.cn-hangzhou.aliyuncs.com/sanchar/maven:1.0tags:- mvn-packagescript:- echo "=============== mvn package ==============="- mvn $MAVEN_OPTS clean package -Dmaven.test.skip=true# 只作用在master分支only:- master# 这里可以将maven 打包好的文件传递给下一个 stage ,然后下一步的docker 就可以根据 这个 jar 包 和Dockerfile 构建镜像artifacts:# 指定下过期时间和路径expire_in: 1 dayspaths:- target/*.jarbuild:stage: buildscript:- echo "=============== docker build image ==============="- docker build -t registry.cn-hangzhou.aliyuncs.com/sanchar/springboot-ci-cd-demo:1.0 .- docker login --username 阿里云镜像仓库用户名 --password 阿里云镜像仓库密码 registry.cn-hangzhou.aliyuncs.com- docker push registry.cn-hangzhou.aliyuncs.com/sanchar/springboot-ci-cd-demo:1.0only:- mastertags:- builddeploy:stage: deployscript:- echo "=============== deploy ==============="- docker run -d --name my-test -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/sanchar/springboot-ci-cd-demo:1.0only:- mastertags:- deploy

提交到仓库的master分支后,会自动执行CICD,第一次会比较慢,因为要拉取一些镜像和下载目前本地库没有的jar包

  相关解决方案