昨天 .gitlab-ci.yml
應該各位都有成功跑起來了, GitLab 都可以看到成功完成了,因此這篇要講一些 .gitlab-ci.yml
進階的技巧,讓你可以更加細緻的調整 CI/CD 的流程,使用起來更加的順手。
首先就讓我們複習一下基本的東西。
stages:
- "build"
- "test"
- "deploy"
首先還是第一部分 stages
,這部分沒什麼好講的,就還是定義基本的 Pipeline 各個階段的名稱及順序。
build_job:
stage: build
script:
- echo Build OK
test_job:
stage: test
script:
- echo Test OK
deploy_job:
stage: deploy
script:
- echo Deploy OK
dependencies:
- "test_job"
only:
- master
然後就是重點的第二部分,第二部分的大致上皆為同樣的結構,最外層的 Job 名稱, Job 內部再定義這個 Job 是運行在上方 Pipeline 的哪個階段 stage
;接著定義這個 Job 主要運行的指令 script
,並且可以以條列的方式執行多行指令。第二部分基本上就是這樣。
接著就要禁入今天的正題了, .gitlab-ci.yml
的一些進階的用法。
第一個是還蠻常用的 image
,我通常放在最上方,主要是定義接下來 CI/CD 的整個流程主要的執行環境;有看過前 10 篇的應該對這個名稱都不陌生,因為 GitLab 就是用 Docker 幫你開好環境的(如果你有注意的話,在前幾天註冊 Runner 時就曾經飛過一個關鍵字叫 Docker )。
因此如果我們需要某些比較特殊的環境,我們可以自己打包出 Image 並在這邊使用。
舉例來說,現在有個 Flask 專案(歡迎各位參考我去年的鐵人賽文章偷葉配一下),我們可以將上方的 YAML 檔改成這樣。
image: python:latest
stages:
- "build"
- "test"
- "deploy"
build_job:
stage: build
script:
- echo Build OK
test_job:
stage: test
script:
- echo Test OK
deploy_job:
stage: deploy
script:
- echo Deploy OK
dependencies:
- "test_job"
only:
- master
接著是雖然 Python 用不太到,但其他語言可能會用到的 artifacts
,位置在 Job 中(跟 stage 及 script 同一階層),單看這個詞似乎不太能理解它是幹嘛的對吧,簡單說就是如果需要編譯的語言經過了編譯之後,編譯出來的東西需要找個地方暫存時, GitLab 所提供的一小塊空間放置編譯完檔案的地方,這邊因為我主要是使用 Python ,基本上不會使用,因此不演示給各位看了(話說我有點想學 Golang ,明年也許可以學完後再補上這部分)。
最後一個是 rules
,這個就比較特殊了,就是定義這個 Job 在符合怎麼樣的條件時才會執行,大概樣子就如下方所示(雖然好像跟 only 重複了,不過看得懂就好)。
image: python:latest
stages:
- "build"
- "test"
- "deploy"
build_job:
stage: build
script:
- echo Build OK
test_job:
stage: test
script:
- echo Test OK
deploy_job:
stage: deploy
script:
- echo Deploy OK
dependencies:
- "test_job"
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
only:
- master
那麼就先到這邊,這三個進階的功能我覺得是比較重要的,因此特別提出來說明一下。
大家掰~掰~