在之前的文章中介紹了:
GitLab CI持續整合 - GitLab Runner 安裝與註冊
配置好環境下一步可以正式開始使用GitLab CI進行專案整合,這裡以Java專案為例,使用Gradle做為專案自動構建工具,使用Gradle工具做程式碼質量檢查,詳情參見使用Gradle做Java程式碼質量檢查。
.gitlab-ci.yml
Gitlab CI使用YAML檔案(.gitlab-ci.yml)來管理專案配置。該檔案存放於專案倉庫的根目錄,它定義該專案如何構建。
YAML是一個可讀性高,用來表達資料序列的格式。YAML參考了其他多種語言,包括:C語言、Python、Perl,並從XML,電子郵件的資料格式中獲得靈感。 YAML是"YAML Ain't a Markup Language"(YAML不是一種標記語言)的遞迴縮寫。在開發的這種語言時,YAML的意思其實是:"Yet Another Markup Language"(仍是一種標記語言),但為了強調這種語言以資料作為中心,而不是以標記語言為重點,而用反向縮略語重新命名。 --- 維基百科
.gitlab-ci.yml檔案定義了一系列帶有約束說明的任務,這些任務都是以任務名開始要包含script
部分,一個.gitlab-ci.yml的例子:
stages:
- unit-test
UnitTest:
stage: unit-test
tags:
- spring-sample
script:
- gradle test
- gradle jacocoTestReport
- gradle sonarqube
when: always
複製程式碼
下面詳細解釋下指令碼中欄位的含義
構建指令碼解析
stages
定義可以被呼叫的階段,預設定義為build,test和deploy,執行順序:
- 相同stage的job可以平行執行。
- 下一個stage的job會在前一個stage的job成功後開發執行
這裡定義了一個stage:unit-test
。
下面的UnitTest
是定義的一個任務,這個任務在stage為unit-test
時執行。
tags
表示他需要執行的gitlab-runner,這裡在一個tag為spring-sample的tag中執行。
script
代表需要執行的指令碼,該例子中執行的指令碼包括三步:
- 執行gradle測試
- 進行單元測試覆蓋情況檢查
- 執行sonarqube進行程式碼質量檢查
when
定義何時執行任務,可以是on_success,on_failure,always(每次程式碼更新都觸發)或者manual(手動觸發)。
另外,比較常用的欄位還有:
before_script
用來定義所有job之前執行的命令,包括部署任務等,可以是一個陣列或者是多行字串
after_script
用來定義所有job之後執行的命令。它必須是一個陣列或者多行字串
例如:
job:
before_script:
- execute this instead of global before script
script:
- my command
after_script:
- execute this after my script
複製程式碼
cache
用來指定需要快取的檔案或目錄,例如:
job1:
script: test
cache:
paths:
- binaries/
- .config
複製程式碼
更多欄位可以參考官方文件。
執行GitLab CI
配置完成之後,當把程式碼push到版本庫中時就可以在CI/CD中看到相關的jobs:
進入詳情可以看到詳細的專案構建資訊,可以根據產生的日誌跟蹤錯誤原因,這裡出錯的原因是在gitlab-ruuner中沒有安裝gradle的環境,安裝完gradle環境之後構建任務執行通過。Ubuntu 安裝 Java JDK & Gradle
引用
YAML: zh.wikipedia.org/wiki/YAML GitLab CI/CD Pipeline Configuration Reference :docs.gitlab.com/ee/ci/yaml/ 通過 .gitlab-ci.yml配置任務:github.com/Fennay/gitl…