IBM Cloud Docs
使用 Tekton Pipelines

使用 Tekton Pipelines

Tekton Pipelines 是一個開放原始碼專案,您可以使用它在 Kubernetes 叢集內設定和執行持續整合與 Continuous Delivery 管道。 Tekton 管線在 yaml 檔案中進行定義,這些檔案通常儲存在 Git 儲存庫中。

混合 Tekton 管道
混合 Tekton 管道圖

Tekton 提供一套 自訂資源擴充套件至 Kubernetes,用來定義管道。 這些延伸中包括下列 Tekton 管線基本資源:

Tekton 管道資源
資源 說明
Task 定義一組建置步驟,例如編譯程式碼、執行測試,以及建置並部署映像檔。
TaskRun 實例化作業,以使用特定的輸入、輸出及執行參數來執行。 您可以自行啟動作業或作為管線的一部分來啟動作業。
Pipeline 定義用於組合管線的作業集。
PipelineRun 實例化管線,以使用特定的輸入、輸出及執行參數來執行。

當您使用 Tekton Pipelines 時,可以利用下列特性:

  • 雲端原生:Tekton Pipelines 在 Kubernetes 上執行、使用 Kubernetes 叢集作為第一級的類型,並使用容器作為其構成要素。
  • 已取消連結:可以使用一個管線部署到任何 Kubernetes 叢集。 您可以隔離執行組成管線的作業。 還可以在管線執行之間切換資源(如 Git 儲存庫)。
  • 類型化:可以切換特定資源類型(例如,映像檔)的實作。

Tekton Pipelines 專案是測試版。 針對每個新版本的 Tekton,都必須更新管線。 有關 Tekton 最新版本的詳細資訊,請參閱 https://github.com/tektoncd/pipeline/releases.

IBM Cloud® Continuous Delivery 提供兩種類型的 Delivery Pipeline,您可以用來建置、測試和部署應用程式。

  • 標準:標準 Delivery Pipeline 以圖形方式建立,其狀態會內嵌到管線圖中。 這些管線可以在雲端中的共用工作者節點上執行,也可以在您自己 Kubernetes 叢集上執行的專用工作者節點上執行。
  • Tekton:Tekton Delivery Pipeline 在 yaml 檔案中進行建立,這些檔案會將管線定義為一組 Kubernetes 資源。 您可以編輯這些 yaml 檔案來變更管道的行為。 Tekton 管道可以運行在您自己集群上的私有工作者上。 它們也可以在公用雲端上 IBM管理的工作者節點上執行。 Tekton 整合提供了一個儀表板,您可以使用它來檢視 Tekton 管道執行的狀態,並觸發新的執行。 它也提供機制來指定管線觸發程式、管線定義、管線執行所在的工作者,以及管線內容。

這兩種類型的管線可藉由分別在個別的容器中執行且使用您選擇的映像檔,使工作或步驟相互隔離。 Classic 和 Tekton 管道都存在於 工具鏈中,並依賴該工具鏈增加更多工具整合,這些工具整合用於建立、測試和部署流程。

2020 年 11 月 20 日,Dockerhub 引進匿名映像檔取回的速率限制。 此變更可能會影響正在執行參照 Dockerhub 管理的映像檔之作業的使用者。 建議您使用替代註冊表,例如IBM Cloud Container Registry。

必要條件

新增並執行 Tekton 管線之前,請確保下列資源已就位:

  • 包含下列工具整合的 工具鏈:

    • 包含 Tekton 管線程式碼的儲存庫工具整合(例如,GitHub 工具整合),包括 Tekton yaml 檔案。 在 GitHub上尋找範例管線及作業定義。 有關 Tekton 管道入門的詳細資訊,請參閱 Tekton 管道
    • 選用。 如果您不是使用預設共用「管線工作者」,則可以使用參照 Kubernetes 叢集的 Delivery Pipeline「專用工作者」工具整合。 如需專用工作者節點的相關資訊,請參閱安裝 Delivery Pipeline 專用工作者節點
  • 已本端安裝 IBM Cloud CLI

  • 本端安裝 kubectl

  • Kubernetes 叢集 ( 1.22 版或更高版本),例如 IBM Cloud® Kubernetes Service 叢集

工具鏈與 Delivery Pipeline Private Worker 工具整合必須位於相同的地區。

使用主控台為 Tekton 建立 Delivery Pipeline

配置 Delivery Pipeline 工具整合時,可以選取要建立的管線類型。

  1. 如果您沒有工具鏈,請選取範本以 建立工具鏈。 視您使用的範本而定,可能會有不同的欄位。 請檢閱預設欄位值,並在必要時變更那些設定。

  2. 如果您有一個工具鏈並且要向其中添加此工具集成,請從IBM Cloud控制台單擊菜單圖標漢堡包圖標>平台自動化>工具鏈。 在 工具鏈頁面上,按一下工具鏈以開啟其概述頁面。 或者,在應用程式之「概觀」頁面的「持續交付」卡片上,按一下檢視工具鏈。 然後,按一下概觀

  3. 將 Delivery Pipeline 整合新增至工具鏈:

    a. 按一下新增工具

    b. 在「工具整合」區段中,按一下 Delivery Pipeline

  4. 指定新管線的名稱。

  5. 選取 Tekton 以建立 Tekton Delivery Pipeline。 您可以在定義的 Kubernetes 叢集上檢視 Tekton 管道執行的輸出,並支援設定管道定義 repos、管道觸發器、管道執行位置和簡單的秘密。

  6. 如果您計劃使用管線來部署使用者介面,請選取在「檢視應用程式」功能表中顯示應用程式勾選框。 管線所建立的所有應用程式都會顯示在工具鏈之「概觀」頁面的檢視應用程式清單中。

  7. 按一下建立整合,以將 Delivery Pipeline 新增至您的工具鏈。

使用主控台為 Tekton 配置 Delivery Pipeline

  1. 從工具鏈的「概觀」頁面中,在 Delivery Pipelines 卡上,按一下 Delivery Pipeline,以開啟 Tekton Delivery Pipeline「概觀」頁面。

  2. 按一下設定。 在 Definitions(定義 )部分,完成下列任務:

    a. 指定包含 Tekton 管線定義和相關構件的 Git 儲存庫和 URL。 如果您的儲存庫無法使用,請回到工具鏈「概觀」頁面並新增儲存庫。

    b. 在 Git 套件中選擇您要使用的分支,或輸入標記。

    c. 指定 Git 儲存庫中管線定義的路徑。 可以參照相同儲存庫中的特定定義。 您也可以新增多個定義儲存庫 (如果它們已與工具鏈整合)。

    d. 儲存變更。

    管線定義會自動更新。

    計算的管線定義大小限制是 1 MB。 如果您在儲存或執行管線時發生錯誤,則可能需要減少管線定義的大小,或將它分割成多個管線。

  3. 工作者節點 區段中,選取 IBM 受管理共用工作者節點或您要用來執行 Tekton 管線的專用工作者節點。 如需專用工作者節點的相關資訊,請參閱使用 Delivery Pipeline 專用工作者節點

    專用工作者節點必須在 Tekton 管線所在的工具鏈中進行定義。

  4. 在「環境內容」區段中,按一下 新增,然後選取內容類型來定義您自己的環境內容。 例如,可以定義 API_KEY 內容,該內容傳遞管線中所有 Script 用於存取 IBM Cloud 資源的 API 金鑰。 您可以新增下列類型的內容:

    • 列舉: 具有可從使用者定義的選項清單中選取的值的內容索引鍵。
    • 安全值:具有單行值的屬性密碼鑰匙,以 AES-128 加密保護。 此值使用星號字元顯示。 或者,您可以按一下金鑰圖示,以從儲存庫整合 (例如 IBM Key Protect) 中選取密鑰 (如果工具鏈中有這類工具可用)。
    • 文字值: 具有文字值的內容索引鍵,可以是單行或多行。 先前,個別 文字區 內容類型支援多行值。
    • 工具整合: 具有在執行時期從工具鏈工具整合解析的值的內容索引鍵。 依預設,此值是工具整合的 JSON 字串表示法。 透過提供選用 JSON 過濾器的值,可以擷取物件的特定欄位或子集。 例如,如果選擇 GitHub 整合,並指定 JSON 過濾器 parameters.repo_url,則 PipelineRun 資源執行時,該值會反映在工具整合中設定的 Git repo 的 URL。

    可以在 Tekton 管線資源中存取這些內容。 如需這些內容的相關資訊,請參閱 Tekton Pipelines 環境和資源

    可以鎖定內容以防止它們被置換。 嘗試在執行時期置換已鎖定的內容會導致拒絕執行要求。 依預設,已鎖定的內容不會顯示在執行側邊畫面中,但可以透過啟用「顯示所有內容」選項來唯讀顯示。

  5. 按一下儲存

  6. 在「管線概觀」頁面上,按一下 新增 以建立觸發程式,選取要新增的觸發程式類型,並將觸發程式與事件接聽器相關聯。 可用事件監聽器清單包含在管道程式碼 repo 中定義的監聽器。

    觸發器以 Tekton 觸發器定義為基礎。 Git repo 觸發器使用其對應的事件監聽器,從傳入的事件有效負載中擷取資訊,並建立 資源。Kubernetes 這些資源將套用於 Tekton PipelineRun 資源。

    除非您使用 Limit concurrent runs 選項配置觸發程式來序列化執行,否則會同時執行觸發管線執行。 啟用此選項時,您可以限制此觸發程式可以啟動的同時執行數。 例如,如果上限設為 1,則一次只會針對此觸發程式執行一個管線執行,且任何其他項目都會排入等待狀態。 在自動取消後續請求之前,最多有 20 個運行(如果您使用IBM Managed Workers,則為 5 個)處於等待狀態。 預設情況下,使用IBM Managed Workers 時,所有定時觸發器僅限於一次並發運行

    當您按一下執行管道按鈕並選擇觸發器時,手動觸發器就會執行。

    Git repository 觸發器會在指定的 repo 和分支發生指定的 事件類型時執行。Git Git

    您可以從 Tekton 管線資源存取遞送至 Git 觸發程式的 Webhook 有效負載。 雖然確切欄位是專用的,但 Webhook 有效負載的一般語法是 $(event.payloadFieldName)。 您必須先針對對應的 Git 整合授權 Git Admin 存取權,才能建立 Web 連結鉤。 若要授權 Git 管理存取權,請再次 配置並儲存 Git 整合

    計時觸發程式 會在 CRON 值所定義的排程時間執行。 定時觸發程式 的 CRON 表示式以 UNIX crontab 語法 為基礎,是五個時間和日期欄位的序列: minutehourday of the monthmonthday of the week。 這些欄位以空格區隔,格式為 X X X X X。 定時觸發程式的頻率上限為每 5 分鐘一次。 下列範例顯示使用各種計時頻率的字串。

    • */5 * * * *-觸發程式每 5 分鐘執行一次。
    • 0 * * * *- 觸發器在每小時開始時執行。
    • 0 9 * 1 MON-FRI-觸發程式在一月的每個平日上午 9:00 執行。
    • 0 * * NOV,DEC 1-在 11 月和 12 月期間,觸發程式每小時執行一次。

    通用 webhook 觸發器會在設定了秘密設定的 POST 請求傳送到通用 webhook URL 時執行。 通用 webhook 觸發器為 POST 請求提供唯一的 webhook URL。

    因為 PipelineRun 使用者介面不會在事件有效負載區段中隱藏一般 Webhook 有效負載值,所以請不要在有效負載中包含機密資料。 而是使用觸發程式內容 (例如密碼或 API 金鑰密碼) 來保護一般 Webhook 所需的任何資料。

    您可以使用下列任何方法來保護一般 Webhook 觸發程式的安全,以使用 Git、Slack 送出 Webhook、Artifactory Webhook 等等:

    • 記號相符,以比較已儲存的記號與 POST 要求內所傳遞的記號。 支援的記號來源包括標頭、查詢或有效負載。 記號相符項由 GitLab Webhook 和 Slack 送出 Webhook 使用。
    • 有效負載摘要相符,可透過使用 HMAC 十六進位摘要與儲存的記號,來比較簽章與從已摘要的有效負載產生的雜湊。 支援的簽章來源可能包括標頭、查詢或有效負載。 使用者必須指定摘要演算法。 GitHub Webhook 會使用有效負載摘要相符項。
    • Tekton 作業驗證需要使用者在其 Tekton 作業內驗證 Webhook 要求。

    指定下列值,以搭配使用一般 Webhook 觸發程式與 GitHub Webhook:

    • 安全保護: Payload Digest Matches
    • 簽章來源: Header
    • 標頭金鑰名稱: X-Hub-Signature
    • 摘要演算法: sha1

    指定下列值,以搭配使用一般 Webhook 觸發程式與 GitLab Webhook:

    • 安全保護: Token Matches
    • 記號來源: Header
    • 標頭金鑰名稱: X-Gitlab-Token

    指定下列值,以搭配使用一般 Webhook 觸發程式與 Slack 送出 Webhook:

    • 安全保護: Token Matches
    • 記號來源: Payload
    • JSON 內容名稱/表單索引鍵: token

    下列範例顯示如何搭配使用 curl 指令與受 Token Matches 規則保護的一般 Webhook:

    通用 webhook 範例
    通用 webhook 範例

    curl -X POST \
    https://devops-api.us-south.devops.cloud.ibm.com/v1/tekton-webhook/588236be-749b-4c67-ae57-a561abbbc9a8/run/7e82880e-4223-4c98-8ca9-ef6df36bb6dc \
    -H 'Content-Type: application/json' \
    -H 'token: 48a0f92c0932890048596906a22ae189c48c5619fbcf9600' \
    -d '{
    "somekey": "somevalue"
    }'
    

    若要取得管線定義中的有效負載值,請使用衍生自事件的值來指定 Triggerbinding 參數:

    apiVersion: tekton.dev/v1beta1
    kind: TriggerBinding
    metadata:
    name: binding
    spec:
    params:
    - name: somekey
    value: $(event.somekey)
    

    儲存變更。

    此外,通用 webhook 觸發器支援在 webhook 請求的正文中傳遞屬性。 這可讓由 webhook 觸發的 PipelineRun 的屬性被覆寫,或傳入額外的屬性,以補充用於 PipelineRun 的管道/觸發器屬性。

    如果您需要在 payload 屬性中傳入敏感資料,如密碼或 API 金鑰秘密,則應為此類屬性使用屬性類型 SECURE,使其不會在 UI 中以純文字顯示。

    此外,可以在請求體中傳入可選的描述,描述所觸發的 PipelineRun,在瀏覽器中檢視 PipelineRun 詳細資訊時,該描述會顯示在使用者介面中。

    以下範例顯示如何在傳入文字屬性、安全屬性和說明的同時,使用一般 webhook 的 curl 指令:

    curl -X POST \
    https://devops-api.us-south.devops.cloud.ibm.com/v1/tekton-webhook/588236be-749b-4c67-ae57-a561abbbc9a8/run/7e82880e-4223-4c98-8ca9-ef6df36bb6dc \
    -H 'Content-Type: application/json' \
    -H 'token: 48a0f92c0932890048596906a22ae189c48c5619fbcf9600' \
    -d '{
      "description":"This text can be used to describe the PipelineRun that will be triggered by this request.",
      "properties":[
        {"name":"mytextprop","type":"TEXT","value":"my text value"},
        {"name":"mysecureprop","type":"SECURE","value":"mysecret"}
      ]
    }'
    

配置Delivery Pipeline Tekton 管道的觸發器

您可以根據您的環境中的各種事件為 Tekton 管道配置觸發器Git回購。 篩選Git透過使用以下選項觸發:

  • Branch:當指定事件發生時,觸發所選儲存庫的特定分支的管道。
  • 模式:當指定事件發生時,根據與所選儲存庫中的標籤和分支名稱的全域相符來觸發管道。
  • CEL 過濾器:當事件與提供的通用表達式語言 (CEL) 過濾器相符時觸發管道。

使用 「分支」「模式」 選項來指定事件,例如 commit pushpull request openedupdatedclosed。 此外,您還可以透過切換 「包含草稿拉取請求事件」 選項來指定拉取請求事件,以允許或跳過草稿拉取請求的管道觸發器。 同樣,您可以使用包含來自分叉的拉取請求事件切換來指定是否允許管道觸發來自分叉儲存庫的拉取請求。 此外,您可以選擇 「標籤過濾器」 選項,以根據篩選器表中使用者定義的條件啟用基於拉取要求標籤的篩選。

CEL 過濾器選項支援更進階的用例,例如與事件負載中的其他欄位進行比對。 此選項支援推播事件、所有拉取請求事件、問題事件、問題評論事件和發布事件。 此選項也可作為通用 Webhook 觸發器上的選用功能使用,以提供基於 Webhook 負載的事件過濾。

CEL 概述

CEL 是一種強大且靈活的表達式語言,旨在以簡潔易讀的方式評估條件並執行驗證。 CEL 非常適合需要複雜條件邏輯的用例,例如過濾事件。

在 Tekton 管道中,引入了 CEL 選項以提供更強大、更靈活的事件過濾。 Webhook 負載根據使用者提供的 CEL 表達式進行評估。 如果 CEL 表達式的計算結果為 true,管道運行被觸發。

CEL 支援下列功能:

  • 算術運算符 (+, -, *, /, %)
  • 比較運算符號 (=, !=, <, >, <=, >=)
  • 邏輯運算符號 (&&, ||)
  • 字串運算子 (contains,matches,startsWith,endsWith
  • 集合運算子 (in,!in
  • 變數(直接透過名稱引用變數)
  • 文字(支援字串、數字、布林值和 null 等文字)

CEL 包括以下擴展,以為基本 CEL 語言提供更多功能:

  • Sets extension 支援高級集合操作並在事件過濾方面提供更大的靈活性。 有關此擴充功能的更多信息,請參閱
  • matchesGlob 在將現有模式欄位轉換為新的 CEL 過濾器選項時提供相容性。 原生 CEL matches 建議使用運算子進行更進階的正規表示式比對。

有關 CEL 的更多信息,請參閱 CEL 文件

轉換為 CEL

完成以下步驟將現有事件過濾選擇轉換為 CEL 表達式:

  1. 編輯Git您要轉換的觸發器。

  2. 在裡面觸發部分,選擇 CEL過濾器選項。

    CEL 過濾器選項
    CEL 過濾器選項

    以下元素會自動轉換為等效的 CEL 表達式:

    • 分支或模式
    • 事件,例如 commit push,pull request opened,updated,和 closed
    • 包括草稿拉取請求事件
    • 包括來自分叉的拉取請求事件
    • 標籤過濾器

    CEL 濾波器轉換
    CEL 濾波器轉換

    產生的 CEL 表達式將寫入文字區域字段,您可以根據需要對其進行編輯。

    由於用於轉換的通用 Webhook 觸發器上不存在過濾器,因此到 CEL 過濾器的轉換僅適用於Git觸發器。

    如果您在選擇 CEL 選項的情況下儲存觸發器,它將用 CEL 表達式取代先前選擇的事件。 如果您在儲存 CEL 篩選器選項後切換到「分支」或「模式」選項,則不會儲存您先前的事件選擇。 不支援從 CEL 選項到分支或模式選項的轉換。

CEL 表達式範例

以下範例是每個受支援的通用 CEL 表達式Git類型:GitHub,GitLabBitBucket。 您可以複製並修改這些範例以滿足您的要求。

GitHub例子

當針對指定分支開啟或更新拉取請求時執行:

   header['x-github-event'] == 'pull_request' &&
      (body.action == 'opened' || body.action == 'synchronize') &&
      body.pull_request.base.ref == 'main'

當提交被推送到指定分支時運行:

   header['x-github-event'] == 'push' && body.ref == 'refs/heads/main'

當提交被推送到指定分支時運行,但當提交訊息包含特定字串時跳過它:

   header['x-github-event'] == 'push' &&
      body.ref == 'refs/heads/main' &&
      !body.head_commit.message.contains("skip run")

當包含指定字串的註解新增至拉取請求時執行:

   header['x-github-event'] == 'issue_comment' &&
      body.action == 'created' && has(body.issue.pull_request) &&
      body.comment.body.contains('/lgtm')

當使用指定標籤建立問題時運行:

   header['x-github-event'] == 'issues' &&
      body.action == 'opened' &&
      body.issue.labels.exists(label, label.name == 'urgent')

GitLab例子

當針對指定分支開啟或更新合併請求時執行:

   header['x-gitlab-event'] == 'Merge Request Hook' &&
      (body.object_attributes.action == 'open' || body.object_attributes.action == 'update') &&
      body.object_attributes.target_branch == 'main'

當提交被推送到指定分支時運行:

   header['x-gitlab-event'] == 'Push Hook' && body.ref == 'refs/heads/main'

當提交被推送到指定分支時運行,但當提交訊息包含特定字串時跳過它:

   header['x-gitlab-event'] == 'Push Hook' &&
      body.ref == 'refs/heads/main' &&
      !body.object_attributes.last_commit.message("skip run")

當包含指定字串的註解新增至合併請求時執行:

   header['x-gitlab-event'] == 'Note Hook' &&
      body.object_attributes.noteable_type == 'MergeRequest' &&
      body.object_attributes.action == 'create' &&
      body.object_attributes.note.contains('/lgtm')

當使用指定標籤建立問題時運行:

   header['x-gitlab-event'] == 'Issue Hook' &&
      (body.object_attributes.action == 'open') &&
      body.object_attributes.labels.exists(label, label.name == 'urgent')

BitBucket例子

當針對指定分支開啟或更新拉取請求時執行:

   (header['x-event-key'] == 'pullrequest:created' || header['x-event-key'] == 'pullrequest:updated') &&
       body.pullrequest.destination.branch.name == 'main'

當提交被推送到指定分支時運行:

   header['x-event-key'] == 'repo:push' && body.push.changes[0].new.name == 'main'

當提交被推送到指定分支時運行,但當提交訊息包含特定字串時跳過它:

   header['x-event-key'] == 'repo:push' &&
      body.push.changes[0].new.name == 'main' &&
      !body.push.changes[0].commits[0].message("skip run")

當包含指定字串的註解新增至拉取請求時執行:

   header['x-event-key'] == 'pullrequest:comment_created' &&
      body.comment.content.raw.contains('/lgtm')

當使用指定標籤建立問題時運行:

   header['x-event-key'] == 'issue:created' &&
      body.issue.kind == 'bug'

過濾器

篩選器可讓使用者根據特定條件精細拉取請求。 過濾欄位目前支援在拉取請求中指定標籤,從而根據標籤的存在與否控制管道的執行。 但是,它不會在標籤新增或移除時觸發管道;相反地,它會在允許執行管道之前驗證 PR 的標籤。

如何運作:

  • 如果 PR 事件發生 (像是新增了一個提交),管道會檢查 PR 上的標籤。
  • 如果 PR 符合標籤條件 (例如,具有「核准」標籤),則管道會執行。
  • 如果 PR 不符合標籤條件,管道將不會執行。

範例配置

下面的截圖顯示了一個範例,觸發器設定為標籤「已批准」和「已審查」。

  • 只有當兩個標籤都存在時,才會觸發 PR 管道。
  • 如果缺少任一標籤,管道將無法執行。

為 PR 輸送管道執行設定標籤篩選器
為 PR 輸送管道執行設定標籤篩選器

檢查事件負載

當您編寫用於事件過濾的 CEL 表達式時,您必須了解將根據其計算表達式的 Webhook 負載的結構和內容。 您可以從「管道運行詳細資料」頁面檢查現有運行的有效負載。

要查看事件負載,請前往管道運行詳細資訊頁面並點擊顯示上下文。 您可以查看觸發管道運行的原始 Webhook 負載,並確認 CEL 表達式的相關欄位是否符合您所需的條件。

使用 API 為 Tekton 建立 Delivery Pipeline

  1. 取得 IAM 持有人記號。 或者,如果您使用 SDK,請 取得 IAM API 金鑰,並使用環境變數來設定用戶端選項。

    export CD_TEKTON_PIPELINE_APIKEY={api_key}
    
  2. 判定您要新增 Delivery Pipeline 工具整合的工具鏈 的地區及 ID。

  3. 將 Delivery Pipeline 工具整合新增至工具鏈。

    curl -X POST \
      https://api.{region}.devops.cloud.ibm.com/toolchain/v2/toolchains/{toolchain_id}/tools \
      -H 'Authorization: Bearer {iam_token}' \
      -H 'Accept: application/json` \
      -H 'Content-Type: application/json' \
      -d '{
        "tool_type_id": "pipeline",
        "parameters": {
          "name": "{tool_integration_name}",
          "type" : "tekton"
        }
      }'
    
    const CdToolchainV2 = require('@ibm-cloud/continuous-delivery/cd-toolchain/v2');
    ...
    (async () => {
       const toolchainService = CdToolchainV2.newInstance();
       const pipelinePrototypeModel = {
          toolchainId: {toolchain_id},
          toolTypeId: 'pipeline',
          name: {tool_integration_name},
          type: "tekton"
       };
       const pipelineTool = await toolchainService.createTool(pipelinePrototypeModel);
    })();
    
    import (
    	   "github.com/IBM/continuous-delivery-go-sdk/cdtoolchainv2"
    )
    ...
    toolchainClientOptions := &cdtoolchainv2.CdToolchainV2Options{}
    toolchainClient, err := cdtoolchainv2.NewCdToolchainV2UsingExternalConfig(toolchainClientOptions)
    createPipelineToolOptions := toolchainClient.NewCreateToolOptions({toolchain_id}, "pipeline")
    createPipelineToolOptions.SetName({tool_integration_name})
    createPipelineToolOptions.SetType("tekton")
    pipelineTool, response, err := toolchainClient.CreateTool(createPipelineToolOptions)
    
    from ibm_continuous_delivery.cd_toolchain_v2 import CdToolchainV2
    ...
    toolchain_service = CdToolchainV2.new_instance()
    pipeline_tool = toolchain_service.create_tool(
       name = {tool_integration_name},
       toolchain_id = {toolchain_id},
       tool_type_id = "pipeline",
       type = "tekton"
    )
    
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.CdToolchain;
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.model.*;
    ...
    CdToolchain toolchainService = CdToolchain.newInstance();
    CreateToolOptions createPipelineToolOptions = new CreateToolOptions.Builder()
       .name({tool_integration_name})
       .toolchainId({toolchain_id})
       .toolTypeId("pipeline")
       .type("tekton")
       .build();
    Response<ToolchainToolPost> response = toolchainService.createTool(createPipelineToolOptions).execute();
    ToolchainToolPost pipelineTool = response.getResult();
    

    下表列出並說明前一個步驟中使用的每一個變數。

    用於新增Delivery Pipeline工具與 API 整合的變量
    變數 說明
    {region} 工具鏈所在的地區,例如 us-south
    {tool_integration_name} 工具整合的名稱,例如 ci-pipeline
    {toolchain_id} 要新增工具整合的工具鏈 ID。
    {iam_token} 有效的 IAM 承載令牌。
  4. 配置 Delivery Pipeline 以使用指定地區內的公用受管理工作者節點。

    curl -X POST \
       https://api.{region}.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines \
       -H 'Authorization: Bearer {iam_token}' \
       -H 'Accept: application/json` \
       -H 'Content-Type: application/json' \
       -d '{
          "id": "{pipeline_id}",
          "worker": { "id": "public" }
       }'
    
    const CdTektonPipelineV2 = require('@ibm-cloud/continuous-delivery/cd-tekton-pipeline/v2');
    ...
    (async () => {
       const tektonService = CdTektonPipelineV2.newInstance();
       const workerIdentityModel = {
          id: 'public',
       };
       const params = {
          id: {pipeline_id},
          worker: workerIdentityModel,
       };
       const res = await tektonService.createTektonPipeline(params);
    })();
    
    import {
       "github.com/IBM/continuous-delivery-go-sdk/cdtektonpipelinev2"
    }
    ...
    cdTektonPipelineOptions := &cdtektonpipelinev2.CdTektonPipelineV2Options{}
    pipelineSvc, err = cdtektonpipelinev2.NewCdTektonPipelineV2UsingExternalConfig(cdTektonPipelineOptions)
    createTektonPipelineOptions := pipelineSvc.NewCreateTektonPipelineOptions(
       {pipeline_id}
    )
    workerIdentityModel := &cdtektonpipelinev2.WorkerIdentity{
       ID: core.StringPtr("public"),
    }
    createTektonPipelineOptions.SetWorker(workerIdentityModel)
    tektonPipeline, response, err := pipelineSvc.CreateTektonPipeline(createTektonPipelineOptions)
    
    from ibm_continuous_delivery.cd_tekton_pipeline_v2 import CdTektonPipelineV2
    ...
    pipeline_service = CdTektonPipelineV2.new_instance()
    worker_identity_model = {
       'id': 'public',
    }
    response = pipeline_service.create_tekton_pipeline(
       id = {pipeline_id},
       worker = worker_identity_model
    )
    tekton_pipeline = response.get_result()
    
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.CdTektonPipeline;
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.model.*;
    ...
    CdTektonPipeline pipelineSvc = CdTektonPipeline.newInstance();
    WorkerIdentity workerIdentityModel = new WorkerIdentity.Builder()
       .id("public")
       .build();
    CreateTektonPipelineOptions createTektonPipelineOptions = new CreateTektonPipelineOptions.Builder()
       .id({pipeline_id})
       .worker(workerIdentityModel)
       .build();
    Response<TektonPipeline> response = pipelineSvc.createTektonPipeline(createTektonPipelineOptions).execute();
    TektonPipeline tektonPipeline = response.getResult();
    

    下表列出並說明前一個步驟中使用的每一個變數。

    用於使用 API 配置Delivery Pipeline的變數
    變數 說明
    {region} 工具鏈所在的地區,例如 us-south
    {pipeline_id} 從建立管線工具整合的前一個步驟傳回的管線 ID。
    {iam_token} 有效的 IAM 承載令牌。

如需 Delivery Pipeline API 的相關資訊,請參閱 API 文件

使用 Terraform 為 Tekton 建立 Delivery Pipeline

  1. 若要安裝 Terraform CLI 並配置適用於 Terraform 的 IBM Cloud 提供者外掛程式,請遵循 開始使用 Terraform on IBM Cloud® 的指導教學。

  2. 建立名為 main.tf 的 Terraform 配置檔案。 在此檔案中,新增配置以使用 HashiCorp 配置語言來建立管線。 如需使用此配置語言的相關資訊,請參閱 Terraform 文件

    管線必須屬於工具鏈。 您也可以 使用 Terraform 來建立工具鏈。

    下列範例會使用指定的 Terraform 資源來建立工具鏈及管線。

    data "ibm_resource_group" "group" {
      name = "default"
    }
    
    resource "ibm_cd_toolchain" "my_toolchain" {
      name              = "terraform_toolchain"
      resource_group_id = data.ibm_resource_group.group.id
    }
    
    resource "ibm_cd_toolchain_tool_pipeline" "my_pipeline_tool" {
      parameters {
         name = "terraform-pipeline-integration"
      }
      toolchain_id = ibm_cd_toolchain.my_toolchain.id
    }
    
    resource "ibm_cd_tekton_pipeline" "my_tekton_pipeline" {
     worker {
         id = "public"
     }
     pipeline_id = ibm_cd_toolchain_tool_pipeline.my_pipeline_tool.tool_id
    }
    

    如需 ibm_cd_toolchain_tool_pipelineibm_cd_tekton_pipeline 資源的相關資訊,請參閱「Terraform 登錄文件」中的引數參照詳細資料。

  3. 必要的話,起始設定 Terraform CLI。

    terraform init
    
  4. 建立 Terraform 執行計劃。 此計劃彙總必須執行以建立工具鏈的所有動作。

    terraform plan
    
  5. 套用 Terraform 執行計劃。 Terraform 會採取所有必要動作來建立工具鏈。

    terraform apply
    

檢視 Tekton 的 Delivery Pipeline

您可以使用主控台使用者介面、API 或 Terraform 來檢視管線。

使用主控台檢視 Delivery Pipeline

Tekton Delivery Pipeline「概觀」頁面會顯示空表格,直到至少新增一個觸發程式為止。 在 Tekton 管線執行之後 (手動或作為外部事件的結果),表格會顯示與管線中每一個觸發程式相關聯的最近執行的相關資料。 每一列顯示單一觸發程式的相關資訊,並顯示與該觸發程式相關聯的最近執行的圖形。 也會顯示這些執行的成功或失敗,以及最近執行發生的時間等資訊。 您也可以對每一個觸發程式執行動作: 手動執行觸發程式、將它標示為我的最愛、編輯觸發程式、啟用或停用它,或刪除它。 您也可以按一下圖形中的其中一個項目,以檢查該個別 PipelineRun 的詳細資料。 或者,您可以按一下觸發程式名稱,以針對與該觸發程式相關聯的每一個 PipelineRun 開啟「PipelineRuns」頁面。 也可以使用每一個 PipelineRun 的相關資訊,例如狀態、觸發程式及持續時間。

管線執行可以處於下列任一狀態:

  • 擱置: 要求 PipelineRun
  • 執行中: PipelineRun 正在叢集上執行。
  • 成功: PipelineRun 已在叢集上順利完成。
  • 失敗: PipelineRun 失敗。 請檢查執行的日誌檔來確定原因。
  • 已排入佇列: 接受 PipelineRun 進行處理,並在工作者容量可用時執行。
  • 等待中: PipelineRun 正在等待排入佇列。
  • 已取消: PipelineRun 已由系統或使用者取消。 當等待運行的數量超過允許的限制時,系統取消 PipelineRun
  • 錯誤: PipelineRun 包含無法在叢集上套用它的錯誤。 如需錯誤原因的相關資訊,請參閱執行詳細資料。

如需所選取執行的詳細資訊,請按一下表格中的任何列,以檢視 Task 定義及每一個 PipelineRun 定義中的步驟。 還可以檢視每個 Task 定義和步驟的狀態、日誌和詳細資料,以及 PipelineRun 定義的整體狀態。

PipelineRuns 及其日誌的保留期間取決於為 Continuous Delivery 服務實例選取的方案。 「專業方案」下的 Tekton 管線會保留一年。 「精簡」方案下的 Tekton 管線會保留 30 天。 若要在保留期間以外保留任何 PipelineRuns,請在 PipelineRuns 區段中選取 動作> 下載** 以下載 .zip 檔案。

使用 API 檢視 Delivery Pipeline

  1. 取得 IAM 持有人記號。 或者,如果您使用 SDK,請 取得 IAM API 金鑰,並使用環境變數來設定用戶端選項。

    export CD_TEKTON_PIPELINE_APIKEY={api_key}
    
  2. 取得管線資料。

    curl -X GET \
      https://api.{region}.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/{pipeline_id} \
      -H 'Authorization: Bearer {iam_token}' \
      -H 'Accept: application/json`
    
    const CdTektonPipelineV2 = require('@ibm-cloud/continuous-delivery/cd-tekton-pipeline/v2');
    ...
    (async () => {
       const pipelineSvc = CdTektonPipelineV2.newInstance();
       const params = {
          id: {pipeline_id},
       };
       const res = await pipelineSvc.getTektonPipeline(params);
    })();
    
    import {
       "github.com/IBM/continuous-delivery-go-sdk/cdtektonpipelinev2"
    }
    ...
    cdTektonPipelineOptions := &cdtektonpipelinev2.CdTektonPipelineV2Options{}
    pipelineSvc, err = cdtektonpipelinev2.NewCdTektonPipelineV2UsingExternalConfig(cdTektonPipelineOptions)
    getTektonPipelineOptions := pipelineSvc.NewGetTektonPipelineOptions(
       {pipeline_id}
    )
    tektonPipeline, response, err := pipelineSvc.GetTektonPipeline(getTektonPipelineOptions)
    
    from ibm_continuous_delivery.cd_tekton_pipeline_v2 import CdTektonPipelineV2
    ...
    pipeline_service = CdTektonPipelineV2.new_instance()
    response = pipeline_service.get_tekton_pipeline(
       id = {pipeline_id}
    )
    tekton_pipeline = response.get_result()
    
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.CdTektonPipeline;
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.model.*;
    ...
    CdTektonPipeline pipelineSvc = CdTektonPipeline.newInstance();
    GetTektonPipelineOptions getTektonPipelineOptions = new GetTektonPipelineOptions.Builder()
       .id({pipeline_id})
       .build();
    Response<TektonPipeline> response = pipelineSvc.getTektonPipeline(getTektonPipelineOptions).execute();
    TektonPipeline tektonPipeline = response.getResult();
    

下表列出並說明前一個步驟中使用的每一個變數。

用於使用 API 查看Delivery Pipeline的變量
變數 說明
{region} 管線所在的區域,例如 us-south
{pipeline_id} 您要檢視的管道 ID。
{iam_token} 有效的 IAM 承載令牌。

使用 Terraform 檢視 Delivery Pipeline

  1. 找出包含現有管線之 resource 區塊的 Terraform 檔案 (例如,main.tf)。

  2. output 區塊新增至 Terraform 檔案 (如果它尚未包含區塊)。

    下列範例中的 resource 說明現有管線。 output 區塊指示 Terraform 輸出指定資源的屬性。

    data "ibm_resource_group" "group" {
      name = "default"
    }
    
    resource "ibm_cd_toolchain" "my_toolchain" {
      name              = "terraform_toolchain"
    resource_group_id = data.ibm_resource_group.group.id
    }
    
    resource "ibm_cd_toolchain_tool_pipeline" "my_pipeline_tool" {
      parameters {
        name = "terraform-pipeline-integration"
      }
      toolchain_id = ibm_cd_toolchain.my_toolchain.id
    }
    
    resource "ibm_cd_tekton_pipeline" "my_tekton_pipeline" {
      worker {
        id = "public"
      }
      pipeline_id = ibm_cd_toolchain_tool_pipeline.my_pipeline_tool.tool_id
    }
    
    output "my_tekton_pipeline_attributes" {
      value = ibm_cd_tekton_pipeline.my_tekton_pipeline
    }
    

    如需 ibm_cd_toolchain_tool_pipelineibm_cd_tekton_pipeline 資源的相關資訊,請參閱「Terraform 登錄文件」中的引數參照詳細資料。

  3. 必要的話,起始設定 Terraform CLI。

    terraform init
    
  4. 使用 refresh-only 選項套用 Terraform 執行計劃。 Terraform 會重新整理其狀態,並顯示管線資源的屬性。

    terraform apply -refresh-only -auto-approve
    

使用 API 刪除 Delivery Pipeline

  1. 取得 IAM 持有人記號。 或者,如果您使用 SDK,請 取得 IAM API 金鑰,並使用環境變數來設定用戶端選項。

    export CD_TEKTON_PIPELINE_APIKEY={api_key}
    
  2. 判定您要新增 DevOps Insights 工具整合之工具鏈的地區及 ID

  3. 刪除管線。

    curl -X DELETE \
      https://api.{region}.devops.cloud.ibm.com/toolchain/v2/toolchains/{toolchain_id}/tools/{pipeline_id} \
      -H 'Authorization: Bearer {iam_token}'
    
    const CdTektonPipelineV2 = require('@ibm-cloud/continuous-delivery/cd-tekton-pipeline/v2');
    ...
    (async () => {
       const pipelineSvc = CdTektonPipelineV2.newInstance();
       const params = {
          id: {pipeline_id},
       };
       const res = await pipelineSvc.deleteTektonPipeline(params);
    })();
    
    import {
       "github.com/IBM/continuous-delivery-go-sdk/cdtektonpipelinev2"
    }
    ...
    cdTektonPipelineOptions := &cdtektonpipelinev2.CdTektonPipelineV2Options{}
    pipelineSvc, err = cdtektonpipelinev2.NewCdTektonPipelineV2UsingExternalConfig(cdTektonPipelineOptions)
    deleteTektonPipelineOptions := pipelineSvc.NewDeleteTektonPipelineOptions(
       {pipeline_id}
    )
    response, err := pipelineSvc.DeleteTektonPipeline(deleteTektonPipelineOptions)
    
    from ibm_continuous_delivery.cd_tekton_pipeline_v2 import CdTektonPipelineV2
    ...
    pipeline_service = CdTektonPipelineV2.new_instance()
    response = pipeline_service.delete_tekton_pipeline(
       id={pipeline_id}
    )
    
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.CdTektonPipeline;
    import com.ibm.cloud.continuous_delivery.cd_tekton_pipeline.v2.model.*;
    ...
    CdTektonPipeline pipelineSvc = CdTektonPipeline.newInstance();
    DeleteTektonPipelineOptions deleteTektonPipelineOptions = new DeleteTektonPipelineOptions.Builder()
       .id({pipeline_id})
       .build();
    Response<Void> response = pipelineSvc.deleteTektonPipeline(deleteTektonPipelineOptions).execute();
    

下表列出並說明前一個步驟中使用的每一個變數。

用於使用 API 刪除Delivery Pipeline的變數
變數 說明
{region} 工具鏈所在的地區,例如 us-south
{toolchain_id} 包含要刪除之管線的工具鏈 ID。
{pipeline_id} 您要刪除的管道 ID。
{iam_token} 有效的 IAM 承載令牌。

使用觸發器

您可以使用 Web UI 或命令列/API 呼叫觸發管道。 這通常用於 CICDCC 管道等管道。

透過指令行或 API 觸發管道

您可以使用 IBM Cloud CLI 從命令列觸發管道,或使用 curl 直接呼叫 API。

使用 IBM Cloud CLI

您可以使用 IBM Cloud CLI 來觸發管道。 如需 CLI 命令的詳細資訊,請參閱 IBM Cloud CLI docs

  1. 登入 IBM Cloud
    ibmcloud login --sso
    
  2. 手動觸發管道
    ibmcloud dev tekton-trigger run <pipeline_id> --trigger-name "<trigger_name>"
    

取代指令中的 pipeline_idtrigger_name 之後,執行指令以啟動管道。 如果成功,輸出會顯示管道已啟動,並顯示類似以下的詳細資訊:

已順利啟動管線。

  • 運行 ID: ruekhg-eifjkvr-kjf-rkvj
  • 觸發器:CC 手動觸發器
  • 狀態 : 待定

然後,您可以在使用者介面中開啟各自的工具鏈,驗證您的管道是否已被觸發。

使用 curl 透過 API 觸發管道

您可以使用 curl 直接透過 API 觸發管道。 有關如何透過 API 觸發 Tekton 管道的詳細資訊,請參閱 IBM Cloud API Docs/ CD Tekton Pipeline.

驗證程序

  • 如果您還沒有 API 金鑰,請前往 IBM Cloud API 金鑰來 產生一個。

  • 取得 API 金鑰後,請使用下列 curl 指令產生 IAM 令牌:

      curl -X POST 'https://iam.cloud.ibm.com/identity/token' \
        -H 'Content-Type:application/x-www-form-urlencoded' \
        -H 'Accept:application/json' \
        -d 'grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=<API_KEY>'
    
    
  • 將 <API_KEY> 改為您所產生的 API 金鑰。

  • 取得 IAM 令牌後,請使用它驗證以下要求,以存取您的管道:

    curl -L --request GET 'https://api.us-south.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/<PIPELINE_ID>' \
    --header 'Authorization: Bearer <IAM_TOKEN_VALUE>'
    
  • 驗證後,使用下列 curl 指令觸發管道:

    curl -i -X POST \
        -H "Authorization: Bearer <IAM_token>" \
        -H "Accept: application/json" \
        -H "Content-Type: application/json" \
        --data '{
            "trigger": {
                "name": "CC Manual Trigger",
                "properties": {
                    "pipeline-debug": "false"
                }
            }
        }' \
        "https://api.us-south.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/<pipeline_id>/pipeline_runs"
    
  • -i 選項可確保輸出中包含 HTTP 回應標頭,這有助於您在出錯時看到 HTTP 狀態碼。

  • 您可以在 --data payload 中加入管道所需的任何環境屬性,若要進一步瞭解如何加入屬性,請參閱此 IBM Cloud API Docs/ CD Tekton Pipeline.

  • 當觸發管道時,輸出看起來類似下圖:

    • HTTP 回應會顯示 201 Created 狀態,確認管道觸發要求已被接受。

    • location 標頭會指向觸發管道執行的 URL。

    • 您會看見諸如此類的元資料:

      • pipeline_id
      • status (例如 ) "pending"
      • trigger 名稱 (例如:) "Manual CD Trigger"
      • run_id (觸發執行的唯一 ID)
      • 完整的 URL,可在使用者介面中檢視執行。
    • 這證明管道已成功觸發。 現在您可以在 IBM Cloud UI 瀏覽工具鏈的管道部分,以檢視其狀態和記錄。

  • 當指令成功執行時,就會觸發管道。 一旦觸發,回應就會包含管道執行的詳細資訊。

使用 Terraform 刪除 {{site.data.keyword.deliverypipeline}}

  1. 找出包含現有管線之 resource 區塊的 Terraform 檔案 (例如,main.tf)。

    下列範例中的 resource 說明現有管線。

    data "ibm_resource_group" "group" {
      name = "default"
    }
    
    resource "ibm_cd_toolchain" "my_toolchain" {
      name              = "terraform_toolchain"
      resource_group_id = data.ibm_resource_group.group.id
    }
    
    resource "ibm_cd_toolchain_tool_pipeline" "my_pipeline_tool" {
      parameters {
         name = "terraform-pipeline-integration"
      }
      toolchain_id = ibm_cd_toolchain.my_toolchain.id
    }
    
    resource "ibm_cd_tekton_pipeline" "my_tekton_pipeline" {
     worker {
         id = "public"
     }
     pipeline_id = ibm_cd_toolchain_tool_pipeline.my_pipeline_tool.tool_id
    }
    

  2. 從 Terraform 檔案中移除 ibm_cd_toolchain_tool_pipelineibm_cd_tekton_pipeline resource 區塊。

  3. 必要的話,起始設定 Terraform CLI。

    terraform init
    

  4. 建立 Terraform 執行計劃。 此計劃彙總必須執行以刪除管線的所有動作。

    terraform plan
    

  5. 套用 Terraform 執行計劃。 Terraform 會採取所有必要的動作來刪除管線。

    terraform apply
    

檢視 TaskRun Pod 的詳細資料

若要檢視特定 TaskRun 的基礎 Kubernetes Pod 的相關資訊,請按一下 Task 名稱,然後按一下 Pod

您可以檢視 Pod 的詳細資料,以及工作者所報告的任何相關事件。 此資訊可協助您對特定失敗進行除錯,或判定在執行期間花費時間的位置。

進一步瞭解 Tekton 管線和資源

要了解有關 Tekton 管道的更多信息,請參閱 Tekton:現代方法Continuous DeliveryIBM Cloud Continuous DeliveryTekton Pipelines 工具和資源文章。

若要進一步瞭解您可以在管線內參照的 Tekton 作業,請參閱 開放式工具鏈 Tekton 型錄。 此 GitHub 儲存庫包含一組可在 Tekton 管線中重複使用的作業。