一、簡介
1、GitLab-CI
GitLab-CI就是一套配合GitLab使用的持續集成系統(當然,還有其它的持續集成系統,同樣可以配合GitLab使用,比如Jenkins)。而且GitLab8.0以后的版本是默認集成了GitLab-CI並且默認啟用的。
2、GitLab-Runner
GitLab-Runner是配合GitLab-CI進行使用的。一般地,GitLab里面的每一個工程都會定義一個屬於這個工程的軟件集成腳本,用來自動化地完成一些軟件集成工作。當這個工程的倉庫代碼發生變動時,比如有人push了代碼,GitLab就會將這個變動通知GitLab-CI。這時GitLab-CI會找出與這個工程相關聯的Runner,並通知這些Runner把代碼更新到本地並執行預定義好的執行腳本。
所以,GitLab-Runner就是一個用來執行軟件集成腳本的東西。你可以想象一下:Runner就像一個個的工人,而GitLab-CI就是這些工人的一個管理中心,所有工人都要在GitLab-CI里面登記注冊,並且表明自己是為哪個工程服務的。當相應的工程發生變化時,GitLab-CI就會通知相應的工人執行軟件集成腳本
二、安裝gitlab-runner
1、安裝鏡像
docker pull gitlab/gitlab-runner:v13.12.0
2、新建目錄
mkdir -p /home/apps/gitlab-runner/config
3、創建並啟動
docker run -d --name gitlab-runner \
-v /home/apps/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
--net=host \
--restart always \
--privileged=true \
gitlab/gitlab-runner:v13.12.0
三、注冊gitlab-runner
1、查看地址和token
-
進入某一個項目
-
設置->CI/CD->Runner->Specific runners
2、注冊runner
# 進入容器
docker exec -it gitlab-runner /bin/bash
# 注冊runner
gitlab-runner register
# gitlab地址
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.3.11/
# token
Enter the registration token:
XXXXX-XXXXX-XXXXX
# 輸入runner描述
Enter a description for the runner:
my-runner
# gitlab-runner標簽名稱tag
Enter tags for the runner (comma-separated):
build,deploy
# 選擇執行gitlab-runner的執行程序。因為我要用docker實現自動部署,所以輸入docker
Enter an executor: custom, docker-ssh, parallels, kubernetes, docker, shell, ssh, virtualbox, docker+machine, docker-ssh+machine:
docker
# 如果選擇docker作為執行程序,那要定義一個默認鏡像的名稱
Enter the default Docker image (for example, ruby:2.6):
alpine:latest
3、查看runner
四、流水線測試
1、在maven項目下新建gitlab-ci.yml文件
stages:
- build
- deploy
build:
stage: build
tags:
- build
only:
- master
script:
- echo "mvn clean "
- echo "mvn install"
deploy:
stage: deploy
tags:
- deploy
only:
- master
script:
- echo "hello deploy"
2、commit提交后,就會有流水線
五、gitlab-ci.yml使用
1、什么是gitlab-ci.yml文件
- 將.gitlab-ci.yml文件添加到存儲庫的根目錄,並將GitLab項目配置為使用Runner,則每次提交或推送都會觸發CI 管道
2、參數說明
關鍵字 | 描述 |
---|---|
stages | 定義流水線所有的階段,如果未定義stages,則默認有build、test、deploy三個階段 |
stage | 定義一個作業階段(默認值:)test |
script | 必須參數,由runner執行的shell腳本 |
image | 使用Docker image鏡像 |
services | 使用Docker services鏡像 |
before_script | 執行作業之前執行的一段shell腳本 |
after_script | 執行完作業執行一段的shell腳本 |
only | 限制作業在什么時候創建 |
except | 限制作業在什么時候不創建 |
tags | 作用使用的Runner運行器的標簽列表 |
allow_failure | 允許作業失敗,失敗的作業不影響提交的狀態 |
when | 什么時候運行作業 |
environment | 作用部署的環境名稱 |
cache | 指定需要在job之間緩存的文件或目錄 |
artifacts | 歸檔文件列表,指定成功后應附加到job的文件和目錄的列表 |
dependencies | 當前作業依賴的其他作業,你可以使用依賴作業的歸檔文件 |
coverage | 作業的代碼覆蓋率 |
retry | 作業失敗時,可以自動執行多少次 |
parallel | 指定並行運行的作業實例 |
trigger | 定義下游流水線的觸發器 |
include | 作業加載其他YAML文件 |
extends | 控制實體從哪里繼承 |
pages | 上傳GitLab Pages的結果 |
retry | 作業失敗時,可以自動執行多少次 |
variables | 定義環境變量 |
六、gitlab-runner常用命令
1、啟動命令
gitlab-runner --debug <command> #調試模式排查錯誤特別有用。
gitlab-runner <command> --help #獲取幫助信息
gitlab-runner run #普通用戶模式 配置文件位置 ~/.gitlab-runner/config.toml
sudo gitlab-runner run # 超級用戶模式 配置文件位置/etc/gitlab-runner/config.toml
2、注冊命令
gitlab-runner register #注冊
gitlab-runner list #列出所有運行程序
gitlab-runner verify #檢查注冊的runner是否可以連接。 --delete 刪除
gitlab-runner verify --delete #刪除
gitlab-runner unregister #取消已注冊的runner
#使用令牌注銷
gitlab-runner unregister --url http://gitlab.example.com/ --token t0k3n
#使用名稱注銷(同名刪除第一個)
gitlab-runner unregister --name test-runner
#注銷所有
gitlab-runner unregister --all-runners
3、服務管理
gitlab-runner uninstall #停止運行並從服務中卸載GitLab Runner
gitlab-runner start #啟動GitLab Runner服務
gitlab-runner stop #停止GitLab Runner服務
gitlab-runner restart #重啟GitLab Runner服務
gitlab-runner status #顯示GitLab Runner服務的狀態。當服務正在運行時,退出代碼為零;而當服務未運行時,退出代碼為非零