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

话不多说,直接开撸

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 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:stable

variables:
  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.0
  tags:
    - mvn-package
  script:
    - echo "=============== mvn package  ==============="
    - mvn $MAVEN_OPTS clean package -Dmaven.test.skip=true
  # 只作用在master分支
  only:
    - master
  # 这里可以将maven 打包好的文件传递给下一个 stage ,然后下一步的docker 就可以根据 这个 jar 包 和Dockerfile 构建镜像
  artifacts:
    # 指定下过期时间和路径
    expire_in: 1 days
    paths:
      - target/*.jar

build:
  stage: build
  script:
    - 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.0
  only:
    - master
  tags:
    - build

deploy:
  stage: deploy
  script:
    - echo "=============== deploy  ==============="
    - docker run -d --name my-test -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/sanchar/springboot-ci-cd-demo:1.0
  only:
    - master
  tags:
    - deploy

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


版权声明:本文为qq_34596292原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。