簡介
背景
目前市面上常用的自動化部署的工具比較常見的是Jenkins,但是使用過程中,總會遇到各種奇奇怪怪的錯誤,很難定位問題所在;今天我要介紹的gitlab中的CI/CD功能,個人覺得部署起來更加簡單,有效,易排查,可視化界面也更加整潔~
.gitlab-ci.yml
在前面文章中我們知道了整個Gitlab的CI/CD流程,那我們就在這裏介紹以下在流程中,起到工作式指令的配置文件.gitlab-ci.yml文件;
其核心作用是:將它放置於項目倉庫的根目錄,則倉庫提交合並後,則會根據該配置文件進行一系列工作。
案例
該配置文件爲yaml文件,所以一定要注意空格層級。
# 定義 stages
stages:
- package #打包
- build #構建docker鏡像
- run #運行docker
variables:
TAG: microservice #鏡像名稱
# job
# 打包
package:
stage: package
script:
- mvn clean package -Dmaven.test.skip=true
- cp ./target/*.jar /home/gitlab-runner/docker_project/microservice.jar
only:
- master
# 構建鏡像
docker-build:
stage: build
script:
- cd /home/gitlab-runner/docker_project
- docker build -t $TAG .
when: manual #手動
only:
- master
docker-build-log:
stage: build
script:
- echo "test"
when: manual #手動
only:
- master
# 運行容器
decker-run:
stage: run
script:
- docker rm -f $TAG || true
- docker run -d --name $TAG -p 1883:8080 $TAG
when: manual #手動
only:
- master
相關配置參數介紹
其實配置文件中看似配置了很多參數,但其實核心就只有兩個概念: stage 和 job;
stage
表示執行步驟;它和核心體現就是當代碼提交後,需要執行多少步驟,如上例所示:
# 定義 stages
stages:
- package #打包
- build #構建docker鏡像
- run #運行docker
當我的Java代碼提交後,將分爲三步執行:
- package首先拉取代碼打包成jar文件;
- 構建docker鏡像
- 運行docker鏡像
job
job表示每一步執行步驟的工作內容;
package: // 1
stage: package // 2
script: // 3
- mvn clean package -Dmaven.test.skip=true
- cp ./target/*.jar /home/gitlab-runner/docker_project/microservice.jar
only: // 4
- master
根據上例所示:
-
表示這個job的名稱
-
表示該job屬於哪一個stage;一個stage可以有多個job,例子中,我的構建步驟build中,是有兩個job,分別是docker-build 和docker-build-log。而它在gitlab中的呈現方式如下圖:
-
表示該job所執行的命令,可執行所在服務器中的Runner具備權限的所有命令腳本;也可以在服務器中寫好shell腳本,在這執行shell腳本也是可行的。
-
表示該job只會在master分支提交合並後纔會出現在CI/CD的流水線中;這樣可區分,每個分支對應的環境不同,執行的Runner不同,則執行的命令/腳本也不同。
gitlab-ci.yml參數列表
值 1 | 是否必須 | 描述 |
---|---|---|
script | 必須 | 定義由Runner執行的shell腳本或命令 |
extends | 非必須 | 定義此作業將繼承的配置條目 |
image | 非必須 | 需要使用的docker鏡像,請查閱該文檔 |
services | 非必須 | 定義所需的docker服務,請查閱該文檔 |
stage | 非必須 | 定義一個工作場景階段,默認是test |
type | 非必須 | stage的別名,不贊成使用 |
variables | 非必須 | 在job級別上定義的變量 |
only | 非必須 | 定義job所引用的git分支 |
except | 非必須 | 定義job所不適用的git分支 |
tags | 非必須 | 定義job所適用的runner,tags爲runner標籤 |
allow_failure | 非必須 | 允許任務失敗,但是如果失敗,將不會改變提交狀態 |
when | 非必須 | 定義了job什麼時候執行,可以是on_success、on_failure、always和manual |
dependencies | 非必須 | 定義了該job依賴哪一個job,如果設置該項,可以通過artifacts設置 |
artifacts | 非必須 | 工件,在依賴項之間傳遞的東西,類似cache,但原理與cache不同 |
cache | 非必須 | 定義需要被緩存的文件、文件夾列表 |
before_script | 非必須 | 覆蓋在作業之前執行的腳本或命令 |
after_script | 非必須 | 覆蓋在作業之後執行的腳本或命令 |
environment | 非必須 | 定義讓job完成部署的環境名稱 |
coverage | 非必須 | 定義job設置代碼覆蓋率 |
retry | 非必須 | 定義job失敗後的自動重試次數 |
其他相關文章
-
Gitlab的CI/CD學習(二) —— .gitlab-ci.yml文件