在上一篇中談到關於 GitLab 的 CI/CD Components 及一些 inputs
的初步體驗,在今天的內容,我們會談到更多關於使用 inputs
的細節。
首先,在初探 inputs
之後,可能會對於 inputs
跟 variables
有什麼樣的差異有所疑問?在 GitLab 手冊中有提到關於 inputs
及 variables
的比較,這邊基於原始文字作部分調整,並以表格呈現。
Inputs | CI/CD Variables | |
---|---|---|
Purpose 目的 | 為讓 CI/CD 可客製化重複使用而生。在 CI 配置(Template、Component 或 .gitlab-ci.yml )中定義可在觸發 pipeline 時賦值的參數。 |
使用在環境變數,在 job 執行期間或 pipeline 過程中用來傳遞資料給不同 job 或 Script 中使用。 |
Modification 什麼時候賦值、及修改數值 | 在 pipeline 初始化階段傳入,一旦賦值後在整個 pipeline 執行期間固定不變。 | 可以在 pipeline 執行過程中被動態產生/修改,例如透過 dotenv artifacts、條件 rules,或在 job script 中修改。 |
Scope 作用範圍 | 僅在定義它的那個配置檔案中有效(無論是 .gitlab-ci.yml 或被 include 的檔案)。可以透過 include:inputs 或 trigger:inputs 遞到其他檔案或子 pipeline pipeline。 |
可以在多種層級上定義:全域 (整個 project)、job 層級、以及在專案設定或群組中透過 UI 定義。 |
Validation 驗證 | 提供較強的內建驗證機制:型別 (type)、正則 (regex)、預定義選項列表 (options)、description 等。 pipeline 建立時就會進行這些檢查。 | 驗證比較簡單,多是 key-value 配對;可以透過 UI 為專案變數設定保護 / 隱藏 / 遮蔽等,但變數在執行時動態性強,較少在 pipeline manifest 階段做嚴格型別/options 檢查。 |
從表格中可以看到,inputs
就是為了讓 CI/CD 可以重複使用而生,讓開發者可以透過 inputs
把 CI/CD 的「輸入規格」定義好,避免使用者因為不熟悉規格而誤用。而 variables
還是有存在的意義,方便在工作間傳遞或變更,只是對於設計給使用者輸入參數的 Pipeline 而言,會更建議改用 inputs
。
inputs
呢?這邊以 Day04的例子調整,改為直接在 Pipeline 中宣告,首先,在 .gitlab-ci.yml
的「header」區域做宣告,GitLab CI/CD 中的 header 區段是從 GitLab 15.11 版開始支援的,主要就是為了定義好 Pipeline 的「規格」,因此 inputs
前面需要有一個 spce
,header 的區段與其他內容,則以 ---
作為區隔。整個範例修改後如下:
spec:
inputs:
linter:
default: "yaml"
target-path:
default: './'
---
default:
image: ubuntu:24.04
"run-$[[ inputs.linter ]]-lint":
script:
- echo "lint $[[ inputs.linter ]] --path=$[[ inputs.target-path ]]"
在 ---
區段之後,使用的方法就跟以往寫 GitLab CI/CD 的方法一樣。引用 inputs
的方法也跟 Day04 中提到的方法一致。唯一不一樣的地方在於,在 inputs
裡定義的參數,都增加了 default
的宣告,這是必要,因為 Pipeline 可以透過各種方式觸發,如果沒有設置預設值,會造成底下使用 inputs
無法決定參數而無法執行,因此 GitLab 官方定義,在 Pipeline 中直接使用 inputs
就必須 定義預設值 default
。
inputs
定義的輸入參數的 Pipeline,當需要手動觸發時:從圖上可以看到,因為使用 inputs
定義了兩個參數linter 及 target-path,所以在畫面中 inputs
的區域,顯示了這兩個參數,並且後方對應顯示了這兩個參數應輸入的參數型別,以畫面上兩個參數來說,預設為 STRING。這邊也把預設值直接帶入。
另外如果想沿用預設值,不額外輸入,則可以選擇右上角的下拉選單,把不想額外設定的參數移除。
畫面上也有一個「Preview inputs」 的按鈕,點入後,會呈現目前輸入的數值,與預設值的差異。
inputs
的細部規格spec:inputs
中,如果inputs
沒有設定預設值,則使用這個 component 的使用者,就一定要為這個參數設置對應的數值或預設值。如在 .gitlab-ci.yml
中直接定義 inputs
就必須要設置 default
。inputs
與 variables
除了 default
參數,外,還有其它相同的參數,如:description
及 options
。使用方法跟注意事項也是一樣的。inputs
支援的型別,可以使用參數 type
來定義,目前支援 array、boolean、number 及預設的 string,四種型別。inputs
:spec:
inputs:
version:
regex: ^v\d\.\d+(\.\d+)?$
default: v1.0
---
default:
image: ubuntu:24.04
default-job:
script:
- echo "Your version is $[[ inputs.version ]]"
在今天的內容中,更深入了解 GitLab CI/CD 中 inputs
的應用,並與傳統的 variables 進行比較。透過 inputs
,開發者可以在 Pipeline 中定義更明確的輸入規格,並提供型別、選項及驗證機制,避免使用者因不熟悉設定而輸入錯誤。相較於 variables,inputs 更適合設計給使用者操作的 Pipeline,因為其值在初始化時即固定,並具備更完善的驗證能力。
不過目前 GitLab CI/CD 為 inputs
提供的驗證方法不止有 regex
,還可以透過 function 來進行檢驗,這部分將在明天的內容中呈現。我是墨嗓(陳佑竹),期待這次的內容能帶給你實用的啟發與幫助。