在之前的幾天,談了怎麼設計 GitLab 的 Pipeline 流程,也談了如何建立各個工作的預設參數,那可以讓某些參數可以透過外部傳入到 Pipeline 裡頭,讓各個工作們使用嗎?
在一般在 Script 的操作過程中,可能會有一些字串的組裝,會希望重複的部分變成一個變數供 Script 的過程中都可以使用,例如底下的範例,希望 Hello 後直接接各種字串,如果要把 Hello 改成 Hi 也只需要改動 PREFIX_VAR
這個變數的內容即可。
job_name:
script:
- PREFIX_VAR='Hello'
- echo "${PREFIX_VAR} GitLab-CI"
- echo "${PREFIX_VAR} GitLab-Runner"
但,如果在 after_script
段落的內容也要使用同一個變數,就會發現這個在 script
段落定義的變數,無法使用,如底下的 .gitlab-ci.yml
的執行結果:
stages:
- Verify
- Package
- Release
default:
image: centos:7
Verify:CodeQuality:
stage: Verify
script:
- PREFIX_VAR='Hello'
- echo "${PREFIX_VAR} GitLab-CI"
- echo "${PREFIX_VAR} GitLab-Runner"
after_script:
- echo "${PREFIX_VAR} After_Script"
可以看到如下圖的結果,原訂希望輸出 Hello After_Script
的地方,只輸出了 After_Script
,這時候該怎麼解決呢?
在 GitLab CI 的過程中,可以透過 variables:
這個區段來定義一個工作中 before_script
、script
及after_script
三個區段都可以使用的變數,如上面這個例子,僅需要把宣告 PREFIX_VAR
的地方改到 variables
的區段即可,如下。
stages:
- Verify
- Package
- Release
default:
image: centos:7
Verify:CodeQuality:
stage: Verify
variables:
PREFIX_VAR: 'Hello'
script:
- echo "${PREFIX_VAR} GitLab-CI"
- echo "${PREFIX_VAR} GitLab-Runner"
after_script:
- echo "${PREFIX_VAR} After_Script"
可以看到執行結果,如下圖:
透過上面的方法,在 GitLab CI 的工作中,就可以透過 variables 區段來宣告及定義了,那如果變數需要從外界傳入呢?
在 GitLab CI 的環境中,對於已經建立 .gitlab-ci.yml
的 Repo,可以透過 GitLab 提供的三種方法直接執行當下 Git Repo 已經定義好的 .gitlab-ci.yml
的工作並且「設定」變數:
在介面中,可以看到設定變數,在這邊 GIT Repo 中已經存在的 .gitlib-ci.yml
內容同上,我們可以設定變數 PREFIX_VAR
,將之改為 Hi
,而後點選 「Run Pipeline」。
接著可以看到最終的執行結果原本 Hello
的部分已經改為 Hi
。
GitLab 裡頭除了自己定義變數外,有沒有什麼系統預設提供的變數可以使用呢?答案是有的,而且還蠻多的,GitLab 目前提供的預設環境變數可以參考這邊。這邊舉幾個我個人比較常使用的變數:
CI_COMMIT_REF_NAME
:工作目前取得的 Git Repo 所在的 Tag 或 Branch 名稱CI_COMMIT_REF_SLUG
:如上,但透過方法將名稱精簡至最長63個字元並調整為小寫等,使可用在 URL 使用或主機名稱使用CI_COMMIT_SHA
:Git Repo 目前所在的 Commit Hash CodeCI_COMMIT_SHORT_SHA
:Git Repo 目前所在的 Commit Hash Code 的前 8 字元在使用系統預設變數或自行設定的變數時,可能因為變數在系統運作的過程,或操作的過程有部分修改而導致變數內容不如預期,GitLab 在這部分提供了 CI_DEBUG_TRACE
變數供除錯使用,其可以如下,在 .gitlab-ci.yml
如下設定,或直接在 trigger及手動執行等過程中設定。
job_name:
variables:
CI_DEBUG_TRACE: "true"
如下圖,在手動執行 Pipeline 的過程設定了 CI_DEBUG_TRACE
為 true
,並且設定了 PREFIX_VAR
為 Hi
,那執行的過程中,就可以看到變數 PREFIX_VAR
從原本的 Hello
改變為 Hi
。
執行結果如下,細節如連結:
今天的文章提到了:
variables
區段來設定共用的變數。.gitlab-ci.yml
設定外,還可以從外部傳入。CI_DEBUG_TRACE
來進行除錯。接下來,將繼續談變數,要談關於變數的優先權以及更多層級的變數關係。我是墨嗓(陳佑竹),期待這系列的文章能夠讓人有些幫助。