GitLab 运行GitLab-Runner CI/CD发布
本文主要演示使用A發(fā)布項(xiàng)目到 B上,和注冊GitLab Runner,添加docker類型的Executor來執(zhí)行構(gòu)建,并以此為基礎(chǔ)完成一個go源碼示例項(xiàng)目從編譯代碼構(gòu)建、docker鏡像打包到應(yīng)用部署的CI/CD過程。
A:192.168.10.12 gitlabrunner
B:192.168.10.19 端口2375 需要發(fā)布的目標(biāo)
Gitlab ip:192.168.10.9
一、在192.168.10.12上使用docker安裝gitlab-runner
[root@adscom gitlab]# mkdir -p /config #創(chuàng)建配置目錄 [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 #進(jìn)入容器二、登錄GitLab注冊信息
1 獲取注冊token信息
2 在192.168.10.12上進(jìn)行非交互式注冊gitlab-runner
需要進(jìn)入到gitlab-runner容器中
可在GitLab上看到注冊成功的GitLab Runner,如下圖所示。
三、緩存配置
GitLab Runner對緩存方案的支持有限,所以
可以通過修改config.toml,需要使用掛載Volume的方式做緩存。
Docker in Docker
Docker技術(shù)目前在DevOps中被廣泛使用,我們需要將測試或者構(gòu)建的代碼和自動化腳本打包成Docker鏡像,然后部署在各運(yùn)行環(huán)境中。而在CI/CD中,我們常用一些CI/CD服務(wù)器,比如Jenkins和GoCD來構(gòu)建與部署我們的應(yīng)用,從而實(shí)現(xiàn)CI/CD的自動化。現(xiàn)在一些CI/CD服務(wù)器也被Docker化運(yùn)行在真實(shí)的物理機(jī)上。于是我們需要在CI/CD服務(wù)器的Docker container里面來構(gòu)建(build)與運(yùn)行(run)我們的Docker鏡像,這就涉及到"Docker run Docker"的問題。
一個很自然的想法是,我們是不是需要在CI/CD服務(wù)器鏡像中安裝一個Docker Daemon和Docker命令呢?但是Docker里面跑Docker總感覺有些蹩腳,額外安裝與運(yùn)行Docker無疑增加了CI/CD服務(wù)器鏡像的大小,同時還增加Docker的深度。
實(shí)際上,我們并不需要在CI/CD服務(wù)器上安裝Docker。通過如下的命令在CI/CD服務(wù)器上運(yùn)行我們的鏡像:
也可以在注冊時加入(官方的方法):
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四、設(shè)置全局變量
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: packagetags:- testrunner1script:- 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 -lhonly:- maindocker_build_job2:image: docker:stablestage: docker_buildtags:- testrunner1script:- 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:stablestage: deploytags:- testrunner1script:- 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 abconly:- mainenvironment:name: devurl: http://192.168.10.19:8080/sys >> 構(gòu)建成功后可在瀏覽器輸入http://192.168.10.19:8080/sys做測試.gitlab-ci.yml定義了一個Pipeline, 分三個階段步驟執(zhí)行:
cache: #緩存 paths:- app stages:- package #源碼打包階段- docker_build #鏡像構(gòu)建和打包推送階段- deploy #應(yīng)用部署階段go源碼打包階段:
package build_job1: #job名稱stage: package #源碼打包tags: #Gitlab Runner的tag- testrunner1script:- 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 -lhonly: #只在這個分支執(zhí)行- main鏡像構(gòu)建和打包推送階段:
docker_build_job2: #job名稱image: docker:stable #本階段構(gòu)建使用的構(gòu)建鏡像 stages:stage: docker_build #關(guān)聯(lián)的階段名稱tags: #Gitlab Runner的tag- testrunner1script:- 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應(yīng)用部署階段:
deploy_job3: #job名稱image: docker:stable # 本階段構(gòu)建使用的構(gòu)建鏡像stage: deploy # 關(guān)聯(lián)的階段名稱tags: #Gitlab Runner的tag- testrunner1script:- 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 abconly:- mainenvironment:name: devurl: http://192.168.10.19:8080/sys >> 構(gòu)建成功后可在瀏覽器輸入http://192.168.10.19:8080/sys做測試執(zhí)行之前需要保證對方防火墻開啟并開放了端口
root@ubuntu:/config# curl 192.168.10.19:2375 >> 檢測遠(yuǎn)程端口是否開放 {"message":"page not found"}3 編寫Dockerfile
FROM alpine:latestWORKDIR /data ADD app . CMD ./app4 執(zhí)行Pipeline
提交.gitlab-ci.yml文件后,Project gitlab-java-demo會自動檢測到這個文件并執(zhí)行Pipeline, 如下圖所示。
5 測試驗(yàn)證
六、Gitlab設(shè)置通知企業(yè)微信機(jī)器人
將Gitlab的push、tag push、merge request和pipeline等等推送到企業(yè)微信的機(jī)器人。
應(yīng)用部署運(yùn)行
應(yīng)用通過環(huán)境變量添加機(jī)器人webhook地址,WEBHOOK_URL_作為前綴,后面可接不同的推送組。
如環(huán)境變量WEBHOOK_URL_PROJ,PROJ則為推送組。推送組用于與Gitlab的集成時使用。
例如:
- 機(jī)器人的webhook地址為:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c7483288-ddd5-4afa-88d5-88398be0f511
- 推送組為PROJ。
則環(huán)境變量設(shè)為:
WEBHOOK_URL_QYWX=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c7483288-ddd5-4afa-88d5-88398be0f511
一個應(yīng)用可以添加多個推送組。
使用Docker部署:
修改docker-compose.yml文件中的WEBHOOK_URL環(huán)境變量,添加企業(yè)微信機(jī)器人的webhook地址。
通過:7001端口訪問服務(wù)。
實(shí)行過程:
2. 使用rz 命令把文件傳進(jìn)服務(wù)器中
3.進(jìn)入192.168.10.12這臺機(jī)下的/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把紅線處換成自己的企業(yè)微信機(jī)器人地址
然后執(zhí)行:
docker-compose up -d通過:7001端口訪問服務(wù)。
與Gitlab集成
進(jìn)到項(xiàng)目,settings => Webhooks。
URL填寫服務(wù)的地址和端口號+推送組。
例如,服務(wù)器地址為:https://192.168.100.100:7001,推送組為PROJ。
URL填寫:https://192.168.100.100:7001/proj
具體設(shè)置,參見下圖:
添加成功后可以點(diǎn)擊Test,再去看企業(yè)微信是否能收到通知。
Gitlab通知機(jī)器人
Gitlab push 代碼推送:
新增
修改
Gitlab push 新建分支:
Gitlab push 刪除分支:
與企業(yè)微信對接
如何添加群機(jī)器人?
支持telegram消息推送
官網(wǎng)參考:
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
總結(jié)
以上是生活随笔為你收集整理的GitLab 运行GitLab-Runner CI/CD发布的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【压箱底】一种基于物联网的公共自行车租赁
- 下一篇: 单片机毕设 stm32智能扫地机器人设计