iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0

GitLab CI/CD YAML 在 13.x 版本的年代,如果要與團隊或甚至是 Open Source 讓社群都可以一起共享整個流水線的規劃,大概只能透過 include 的方法來達成。但對於使用端來說,很容易因為 YAML 提供者的版本變更,造成使用端發生問題,因此可以流水線有版本規劃的概念CI/CD components概念就此成形。

CI/CD Components 從 GitLab 16 開始實驗性質的開放,到 GitLab 17.0 版本後,列為正式版本,開發者可以透過 CI/CD Component 建立可以與社群共享的 CI/CD Catalog,並且在 Catalog 裡對於 Component 也提供版本發布的機制,對於使用者而言,只要在引用的時候,限定好要使用的版本範圍,基本就可以不太需要擔心大版本變更的問題。

談論 CI/CD Components 系列不容易在一篇的篇幅裡頭完成,因此,接下來這幾天將會談論關於 CI/CD Components 相關的議題。首先談談 inputs,在過去,使用讓使用者以 include 的方法重複使用開發者提供的 CI/CD YAML 的時候,使用者需要透過手冊詳閱使用的流水線相關的參數及接受的規格,如果,讓使用者在引用之後,馬上就可以透過 YAML 上的「定義、規範」就可以知道是否正確引用,似乎會方便一些。因此 GitLab 17.0 開始正式地提供了 CI/CD inputs 的功能。

inputs 如何使用

首先,以 GitLab 官方手冊 (CI/CD input examples) 中的第一個範例為基底做些微的調整。假設,目前系統提供一個很厲害的原始碼格式檢核工具「Super Linter」,它可以為多種原始碼做檢核,其使用的語法第一個參數是要監控的格式參數名稱為「linter」,第二個參數是需要做 linter 的路徑,參數名稱為「target-path」,假如要針對 data/yaml 這個路徑做 yaml 格式的檢查,我們可能會如執行指令:

./lint yaml --path=data/yaml

現在要把這樣的工具要以 inputs 包裝成一個可以反覆被使用,可以如下包裝。

1. 定義可重複使用的 linter 元件,建立my-super-linter.yml 檔案,內容如下(Source Code):

spec:
  inputs:
    linter:
    target-path:
---
"run-$[[ inputs.linter ]]-lint":
  script: 
    - echo "lint $[[ inputs.linter ]] --path=$[[ inputs.target-path ]]"

2. 在 CI/CD YAML .gitlab-ci.yml中使用它,內容如下:

default:
  image: ubuntu:24.04

include:
  - local: my-super-linter.yml
    inputs:
      linter: docs
      target-path: "doc/"
  - local: my-super-linter.yml
    inputs:
      linter: yaml
      target-path: "data/yaml/"

3. 查看範例的執行結果:

Pipeline 執行結果顯示兩個 Job

在 GitLab 的 Pipeline 中建立了兩個 Job,分別為:run-docs-lintrun-yaml-lint
run-yaml-lint 為例,其執行的主要內容如下:

$ echo "lint yaml --path=data/yaml/"
lint yaml --path=data/yaml/

4. 範例說明:

在範例 my-super-linter.yml 檔案中,先定義了 inputs 需要有 lintertarget-path 兩個參數,並且在 --- 底下,定義了使用這些參數的 Job,可以發現,在 GitLab Components 下,連 Job 的名稱都可以使用 inputs 定義的參數作為命名。
.gitlab-ci.yml 檔案中,透過 include 的方式引入這個 component,並且宣告 lintertarget-path 這兩個參數確切要使用的數值。
這邊可以透過 GitLab 的 Pipeline editor 來檢驗 inputs 提供的驗證檢核功能,如下,我在 linter 這個參數刻意輸入錯的參數名稱,在 GitLab CI/CD 做語法檢核時,馬上會顯示以下檢核失敗:

當引入 Components 未依據 inputs 定義參數,檢核時會產生錯誤訊息

錯誤訊息如下:

This GitLab CI configuration is invalid: `my-super-linter.yml`: unknown input arguments: linterx, `linter` input: required value has not been provided.

輸入的未知的參數 linterxinputs 定義需要的參數 linter 為提供數值。

總結

GitLab Components 有很多執得深入討論的細節,但它有別於以往習慣的 .gitlab-ci.yml 的編輯習慣,因此今天先以初探的形式,淺嚐一下,接下來會帶入關於 inputs 更多細節的說明。我是墨嗓(陳佑竹),期待這次的內容能帶給你實用的啟發與幫助。

參考範例

參考連結


上一篇
Day03 - Pipeline 的變數宣告 Variables
下一篇
Day05 - 深入 CI/CD Components 的 inputs
系列文
GitLab CI 2025:深入玩轉流水線與實戰紀錄11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言