GitLab 运行GitLab-Runner CI/CD发布

2023-05-16

本文主要演示使用A发布项目到 B上,和注册GitLab Runner,添加docker类型的Executor来执行构建,并以此为基础完成一个go源码示例项目从编译代码构建、docker镜像打包到应用部署的CI/CD过程。

A:192.168.10.12 gitlabrunner
B:192.168.10.19 端口2375 需要发布的目标
Gitlab ip:192.168.10.9

一、在192.168.10.12上使用docker安装gitlab-runner

[root@adscom gitlab]# mkdir -p /config  #创建配置目录
[root@adscom data]# docker pull gitlab/gitlab-runner:v14.6.1 #拉取gitlab-runner镜像
[root@adscom ~]# docker run -d --name my-runner -v /config/:/etc/gitlab-runner gitlab/gitlab-runner:v14.6.1   #启动容器
[root@adscom ~]# docker exec -it my-runner bash  #进入容器

二、登录GitLab注册信息

1 获取注册token信息

在这里插入图片描述
2 在192.168.10.12上进行非交互式注册gitlab-runner
需要进入到gitlab-runner容器中

bash-5.0# gitlab-runner register \
     --non-interactive \
     --executor "docker" \
     --docker-image golang:1.17.6-alpine3.15 \
     --url "http://192.168.10.9/" \
     --registration-token "mNaxzsqyxpwQQCxJkSTa" \
     --description "docker-my111" \
     --tag-list "testrunner1" \
     --run-untagged="true" \
     --locked="false" \
     --access-level="not_protected"

可在GitLab上看到注册成功的GitLab Runner,如下图所示。

在这里插入图片描述
三、缓存配置
GitLab Runner对缓存方案的支持有限,所以
可以通过修改config.toml,需要使用挂载Volume的方式做缓存。

root@ubuntu:/config# pwd
/config
vim config.toml 

Docker in Docker
Docker技术目前在DevOps中被广泛使用,我们需要将测试或者构建的代码和自动化脚本打包成Docker镜像,然后部署在各运行环境中。而在CI/CD中,我们常用一些CI/CD服务器,比如Jenkins和GoCD来构建与部署我们的应用,从而实现CI/CD的自动化。现在一些CI/CD服务器也被Docker化运行在真实的物理机上。于是我们需要在CI/CD服务器的Docker container里面来构建(build)与运行(run)我们的Docker镜像,这就涉及到"Docker run Docker"的问题。
一个很自然的想法是,我们是不是需要在CI/CD服务器镜像中安装一个Docker Daemon和Docker命令呢?但是Docker里面跑Docker总感觉有些蹩脚,额外安装与运行Docker无疑增加了CI/CD服务器镜像的大小,同时还增加Docker的深度。
实际上,我们并不需要在CI/CD服务器上安装Docker。通过如下的命令在CI/CD服务器上运行我们的镜像:

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

也可以在注册时加入(官方的方法):

gitlab-runner register \
     --non-interactive \
     --executor "docker" \
     --docker-image golang:1.17.6-alpine3.15 \
     --url "http://192.168.10.9/" \
     --registration-token "mNaxzsqyxpwQQCxJkSTa" \
     --description "test-sock" \
     --tag-list "test-sock" \
     --run-untagged="true" \
     --locked="false" \
     --access-level="not_protected" \
  --docker-volumes /var/run/docker.sock:/var/run/docker.sock

在这里插入图片描述

四、设置全局变量

  1. 在GitLab的顶部导航栏中,选择Menu > Admin。
  2. 在Admin页签下,选择settings。
  3. 在左侧导航栏中,CI / CD。
  4. 单击Variables右侧的Expand。添加GitLab Runner可用的环境变量。本示例中,添加以下五个变量

在这里插入图片描述

DOCKER_NAMES=abc13877****** >>镜像仓库登录用户名
DOCKER_PWSS:********* >>镜像登录密码
ALIYUN:registry.cn-shenzhen.aliyuncs.com >>镜像仓库登录地址
IMAGE: registry.cn-shenzhen.aliyuncs.com/xiaoshimei/xiaoshimei-tset >>镜像地址
IP_NAME :-H tcp://192.168.10.19:2375 >>10.19 的ip地址

五、编写.gitlab-ci.yml

cache:
  paths:
    - app
stages:
  - package
  - docker_build
  - deploy
package build_job1:
  stage: package
  tags:
    - testrunner1
  script:
    - export GO111MODULE=on
    - export GOPROXY=https://goproxy.cn
    - go get -d -v github.com/gin-gonic/gin
    - go get -d -v github.com/shirou/gopsutil/host
    - go mod init app
    - go mod tidy
    - go build .
    - ls -lh
  only:
    - main
  
docker_build_job2:
  image: docker:stable
  stage: docker_build
  tags:
    - testrunner1
  script:
    - docker build -t $IMAGE:$CI_COMMIT_SHORT_SHA .
    - docker login --username=$DOCKER_NAME1 --password=$DOCKER_PWSS $ALIYUN
    - docker push $IMAGE:$CI_COMMIT_SHORT_SHA
    #- #docker rmi $ALIYUN:$CI_COMMIT_SHORT_SHA
deploy_job3:
  image: docker:stable
  stage: deploy
  tags:
    - testrunner1
  script:
    - docker $IP_NAME pull $IMAGE:$CI_COMMIT_SHORT_SHA
    - docker $IP_NAME rm -f abc
    - docker  $IP_NAME run -d --name abc  -p8080:80  $IMAGE:$CI_COMMIT_SHORT_SHA
    - docker  $IP_NAME ps | grep abc
  only:
    - main
  environment:
    name: dev
    url: http://192.168.10.19:8080/sys  >> 构建成功后可在浏览器输入http://192.168.10.19:8080/sys做测试

.gitlab-ci.yml定义了一个Pipeline, 分三个阶段步骤执行:

cache:              #缓存 
  paths:
    - app
stages:
  - package           #源码打包阶段
  - docker_build      #镜像构建和打包推送阶段
  - deploy            #应用部署阶段

go源码打包阶段:

package build_job1:     #job名称
  stage: package        #源码打包
  tags:                 #Gitlab Runner的tag
    - testrunner1
  script:
    - export GO111MODULE=on
    - export GOPROXY=https://goproxy.cn
    - go get -d -v github.com/gin-gonic/gin
    - go get -d -v github.com/shirou/gopsutil/host
    - go mod init app
    - go mod tidy
    - go build .
    - ls -lh
  only:  #只在这个分支执行
    - main

镜像构建和打包推送阶段:

docker_build_job2:      #job名称
  image: docker:stable  #本阶段构建使用的构建镜像
stages:
  stage: docker_build   #关联的阶段名称
  tags:                 #Gitlab Runner的tag
    - testrunner1
  script:
    - docker build -t $IMAGE:$CI_COMMIT_SHORT_SHA .
    - docker login --username=$DOCKER_NAME1 --password=$DOCKER_PWSS $ALIYUN   #变量提前在gitlab中添加
    - docker push $IMAGE:$CI_COMMIT_SHORT_SHA
    #- #docker rmi $ALIYUN:$CI_COMMIT_SHORT_SHA

应用部署阶段:

deploy_job3:   #job名称
  image: docker:stable  # 本阶段构建使用的构建镜像
  stage: deploy         # 关联的阶段名称
  tags:                 #Gitlab Runner的tag
    - testrunner1
  script:
    - docker $IP_NAME pull $IMAGE:$CI_COMMIT_SHORT_SHA
    - docker $IP_NAME rm -f abc
    - docker  $IP_NAME run -d --name abc  -p8080:80  $IMAGE:$CI_COMMIT_SHORT_SHA
    - docker  $IP_NAME ps | grep abc
  only:
    - main
  environment:
    name: dev
    url: http://192.168.10.19:8080/sys  >> 构建成功后可在浏览器输入http://192.168.10.19:8080/sys做测试

执行之前需要保证对方防火墙开启并开放了端口

 root@ubuntu:/config# curl 192.168.10.19:2375  >> 检测远程端口是否开放
{"message":"page not found"}

3 编写Dockerfile

FROM alpine:latest

WORKDIR /data
ADD app .
CMD ./app

4 执行Pipeline
提交.gitlab-ci.yml文件后,Project gitlab-java-demo会自动检测到这个文件并执行Pipeline, 如下图所示。

在这里插入图片描述
5 测试验证

在这里插入图片描述

六、Gitlab设置通知企业微信机器人

将Gitlab的push、tag push、merge request和pipeline等等推送到企业微信的机器人。

应用部署运行

应用通过环境变量添加机器人webhook地址,WEBHOOK_URL_作为前缀,后面可接不同的推送组。

如环境变量WEBHOOK_URL_PROJ,PROJ则为推送组。推送组用于与Gitlab的集成时使用。
例如:

  • 机器人的webhook地址为:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c7483288-ddd5-4afa-88d5-88398be0f511
  • 推送组为PROJ。
    则环境变量设为:
    WEBHOOK_URL_QYWX=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c7483288-ddd5-4afa-88d5-88398be0f511

一个应用可以添加多个推送组。

使用Docker部署:

修改docker-compose.yml文件中的WEBHOOK_URL环境变量,添加企业微信机器人的webhook地址。

通过:7001端口访问服务。

实行过程:

  1. 把Gitlab中项目里的文件下到桌面上

在这里插入图片描述
2. 使用rz 命令把文件传进服务器中

dfc@BBC-xxc Downloads % pwd
/Users/dfc/Downloads
dfc@BBC-xxc Downloads % scp gitlab-bot-master.zip root@192.168.10.12://mnt/jiqiren

3.进入192.168.10.12这台机下的/mnt/jiqiren目录解压文件,并修改docker-compose.yml

root@ubuntu:/mnt/jiqiren# cd gitlab-bot-master/
root@ubuntu:/mnt/jiqiren/gitlab-bot-master# ll
total 84
drwxr-xr-x 6 root root  4096 Mar 11 22:19 ./
drwxr-xr-x 3 root root  4096 Mar 11 22:17 ../
drwxr-xr-x 4 root root  4096 Feb 22  2020 app/
-rw-r--r-- 1 root root   242 Feb 22  2020 appveyor.yml
-rw-r--r-- 1 root root   365 Feb 22  2020 .autod.conf.js
drwxr-xr-x 2 root root  4096 Feb 22  2020 config/
-rw-r--r-- 1 root root   519 Mar 11 22:19 docker-compose.yml
-rw-r--r-- 1 root root   118 Feb 22  2020 Dockerfile
drwxr-xr-x 2 root root  4096 Feb 22  2020 docs/
-rw-r--r-- 1 root root     9 Feb 22  2020 .eslintignore
-rw-r--r-- 1 root root    37 Feb 22  2020 .eslintrc
-rw-r--r-- 1 root root   167 Feb 22  2020 .gitignore
-rw-r--r-- 1 root root    33 Feb 22  2020 jsconfig.json
-rw-r--r-- 1 root root  1073 Feb 22  2020 package.json
-rw-r--r-- 1 root root  2111 Feb 22  2020 README.md
-rw-r--r-- 1 root root 14313 Feb 22  2020 sample.json
drwxr-xr-x 3 root root  4096 Feb 22  2020 test/
-rw-r--r-- 1 root root   183 Feb 22  2020 .travis.yml
root@ubuntu:/mnt/jiqiren/gitlab-bot-master# vim docker-compose.yml 

把红线处换成自己的企业微信机器人地址
在这里插入图片描述

然后执行:

docker-compose up -d

通过:7001端口访问服务。
与Gitlab集成

进到项目,settings => Webhooks。

URL填写服务的地址和端口号+推送组。

例如,服务器地址为:https://192.168.100.100:7001,推送组为PROJ。

URL填写:https://192.168.100.100:7001/proj

具体设置,参见下图:
在这里插入图片描述
添加成功后可以点击Test,再去看企业微信是否能收到通知。
在这里插入图片描述

Gitlab通知机器人

Gitlab push 代码推送:

新增
在这里插入图片描述
修改
在这里插入图片描述

Gitlab push 新建分支:
在这里插入图片描述

Gitlab push 删除分支:
在这里插入图片描述

与企业微信对接

如何添加群机器人?
在这里插入图片描述

支持telegram消息推送
请添加图片描述
请添加图片描述

官网参考:
https://docs.gitlab.com/runner/install/docker.html
https://docs.gitlab.com/ee/administration/repository_storage_paths.html
https://docs.gitlab.com/runner/executors/docker.html#clearing-docker-cache

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitLab 运行GitLab-Runner CI/CD发布 的相关文章

随机推荐