GitLab CI持續整合 - .gitlab-ci.yml

姜家志發表於2019-03-18

在之前的文章中介紹了:

GitLab CI持續整合 - GitLab Runner 安裝與註冊

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,執行順序:

  1. 相同stage的job可以平行執行。
  2. 下一個stage的job會在前一個stage的job成功後開發執行

這裡定義了一個stage:unit-test。 下面的UnitTest是定義的一個任務,這個任務在stage為unit-test時執行。 tags表示他需要執行的gitlab-runner,這裡在一個tag為spring-sample的tag中執行。 script代表需要執行的指令碼,該例子中執行的指令碼包括三步:

  1. 執行gradle測試
  2. 進行單元測試覆蓋情況檢查
  3. 執行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:

gitlb-ci 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…

相關文章