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包

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GitLab-RunnerGitLab提供的一个开源工具,可以用于在GitLab上运行CI/CD任务。通过GitLab-Runner,可以方便地实现自动化的构建、测试、集成和部署等任务。 下面是一些使用GitLab-Runner打造锋利的CI/CD的方法: 1. GitLab-Runner安装配置:首先需要安装GitLab-Runner,并将其配置GitLab服务器上。可以通过Docker容器、二进制包或源码编译的方式安装GitLab-Runner,然后在GitLab服务器上注册Runner,并设置Runner的执行环境和权限等参数。 2. 编写CI/CD脚本:在GitLab上创建项目,并在项目中编写CI/CD脚本,定义任务的执行流程和步骤。可以使用GitLab提供的CI/CD工具和插件,也可以使用第三方工具和脚本库。 3. 构建、测试和集成:通过GitLab-Runner执行CI/CD任务,自动化构建、测试和集成代码,并生成测试报告和代码覆盖率报告等文档。可以使用各种编程语言和框架,如Java、Python、Ruby、Node.js等。 4. 部署和发布:通过GitLab-Runner将代码部署到目标服务器上,并执行自动化发布流程。可以使用容器化技术、配置管理工具、自动部署工具等实现高效、可靠的部署和发布。 5. 监控和反馈:通过GitLab的监控和反馈机制,及时发现和解决CI/CD任务中的问题和错误,并持续优化任务的执行效率和稳定性。可以使用各种监控工具和日志分析工具,如Prometheus、Grafana、ELK等。 总之,使用GitLab-Runner打造锋利的CI/CD,可以提高开发和运维的效率和质量,降低项目的风险和成本,实现持续交付和快速迭代的目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值