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包

### 使用 Docker 部署 GitLab Runner 的指南 为了使用 Docker 容器化技术来部署 GitLab Runner,可以遵循一系列特定的操作流程。这不仅简化了环境设置过程,还提高了不同开发阶段的一致性和可移植性。 #### 准备工作 确保本地机器上已经安装配置Docker 环境。如果尚未完成此操作,则需先访问官方文档获取详细的安装指导[^2]。 #### 下载 GitLab Runner 镜像 通过执行如下命令下载最新的 GitLab Runner Docker 镜像: ```bash docker pull gitlab/gitlab-runner:latest ``` #### 创建专用网络 (推荐) 为提高容器间通信的安全性和效率,建议创建一个新的自定义桥接网络用于 GitLab 和其关联服务之间的交互: ```bash docker network create gitlab-network ``` #### 启动 GitLab Runner 容器实例 启动 GitLab Runner 实例时指定必要的参数以实现最佳性能和功能支持。下面是一个典型的 `docker run` 命令示例,其中包含了注册 token (`REGISTRATION_TOKEN`) 及其他重要选项: ```bash docker run -d --name gitlab-runner \ --network gitlab-network \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest ``` 这里 `-v` 参数用来挂载主机上的路径至容器内部;特别是 `/var/run/docker.sock` 文件映射允许 GitLab Runner 访问宿主机的 Docker Daemon 进而构建项目镜像。 #### 注册 GitLab RunnerCI/CD 流水线 一旦容器成功运行起来之后,就需要将其注册到目标 GitLab 实例中去参与持续集成管道的工作。可以通过向上述创建好的容器发送 HTTP 请求或者直接进入容器内部执行注册脚本来达成目的。具体做法取决于所使用的 GitLab 版本和个人偏好。 对于基于 Web UI 方式的注册方法,请参照官方手册中的说明进行操作[^3]。 #### 自动配置 Maven 私服连接 当涉及到 Java 或者 Kotlin 类型的应用程序时,在 `.gitlab-ci.yml` 中添加适当的前置指令能够帮助自动复制预设好的 `settings.xml` 至默认位置从而顺利完成依赖解析任务。 ```yaml before_script: - mkdir -p ~/.m2 - cp .mvn/conf/settings.xml ~/.m2/ ``` 以上步骤展示了如何利用 Docker 技术快速搭建起一个可用的 GitLab Runner 并使其参与到自动化测试与发布过程中来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值