Tekton パイプラインの操作
Tekton Pipelinesは、 Kubernetes クラスタ内で継続的インテグレーションと Continuous Delivery パイプラインを構成し、実行するために使用できるオープンソースプロジェクトです。 Tekton パイプラインは、yaml ファイルで定義されます。このファイルは一般には Git リポジトリーに保管されます。
Tektonは、パイプラインを定義するために、 Kubernetes に一連の カスタムリソース拡張機能を提供しています。 これらの拡張には、以下の基本的な Tekton パイプラインのリソースが含まれています。
リソース | 説明 |
---|---|
Task |
コードのコンパイル、テストの実行、イメージのビルドとデプロイなどの一連のビルド・ステップを定義します。 |
TaskRun |
特定の入力、出力、および実行パラメーターを使用して実行する Task をインスタンス化します。 タスクは、単独で開始することも、パイプラインの一部として開始することもできます。 |
Pipeline |
パイプラインを構成する一連のタスクを定義します。 |
PipelineRun |
特定の入力、出力、および実行パラメーターを使用して実行する Pipeline をインスタンス化します。 |
Tekton パイプラインを使用する場合は、以下の機能を利用できます。
- クラウド・ネイティブ: Tekton パイプラインは Kubernetes 上で実行され、Kubernetes クラスターを最初のクラス・タイプとして使用し、コンテナーをビルディング・ブロックとして使用します。
- 分離: 1 つのパイプラインを使用して、任意の Kubernetes クラスターにデプロイできます。 1 つのパイプラインを構成している各タスクを分離して実行できます。 また、パイプラインの実行ごとにリソース (Git リポジトリーなど) を切り替えることができます。
- タイプ付き: 特定のタイプのリソース (イメージなど) 用に実装を切り替えることができます。
Tekton パイプライン・プロジェクトはベータ版リリースです。 Tekton のバージョンが新しくなるたびにパイプラインを更新する必要があります。 Tektonの最新バージョンについては、以下を参照。 https://github.com/tektoncd/pipeline/releases.
IBM Cloud® Continuous Delivery には、アプリケーションのビルド、テスト、およびデプロイに使用できる 2 つのタイプのデリバリー・パイプラインが用意されています。
- Classic: Classic デリバリー・パイプラインは、パイプライン・ダイアグラムに状況を埋め込まれた形でグラフィカルに作成されます。 このタイプのパイプラインは、クラウド内の共有ワーカーでも、独自の Kubernetes クラスターで稼働するプライベート・ワーカーでも実行できます。
- Tekton: Tekton デリバリー・パイプラインは、パイプラインを Kubernetes リソースのセットとして定義する yaml ファイル内に作成されます。 これらのyamlファイルを編集して、パイプラインの動作を変更することができる。 Tekton パイプラインは、お客様独自のクラスターで稼働するプライベート・ワーカーで実行できます。 また、パブリッククラウドの IBM 管理ワーカーでも実行できます。 Tekton統合は、Tektonパイプラインの実行状況を表示し、新しい実行をトリガーするために使用できるダッシュボードを提供します。 また、パイプライン・トリガー、パイプライン定義、パイプラインが実行されるワーカー、およびパイプライン・プロパティーを指定するためのメカニズムも提供します。
どちらのタイプのパイプラインでも、ジョブまたはステップを、別々のコンテナーで実行し、選択したイメージを使用することで個々に分離することができます。 ClassicパイプラインとTektonパイプラインは、どちらも ツールチェーンの中に存在し、ビルド、テスト、デプロイプロセスで使用されるツール統合を追加するために、そのツールチェーンに依存している。
2020 年 11 月 20 日に、Dockerhub は匿名イメージ・プルに速度制限を導入しました。 この変更は、Dockerhub をホストとするイメージを参照するタスクを実行するユーザーに影響する可能性があります。 IBM Cloud Container Registry などの代替レジストリーを使用することが推奨されています。
前提条件
Tekton パイプラインを追加して実行する前に、以下のリソースを用意してください。
-
以下のツール統合が含まれているツールチェーン。
- Tekton yaml ファイルなどの Tekton パイプライン・コードを含むリポジトリー・ツール統合 (GitHub ツール統合など)。 パイプラインとタスク定義のサンプルは GitHub. Tektonパイプラインの使用方法については、 Tektonパイプラインを参照してください。
- オプション。 デフォルトの共有パイプライン・ワーカーを使用していない場合、Kubernetes クラスターを参照する Delivery Pipeline プライベート・ワーカーのツール統合を使用できます。 プライベート・ワーカーについて詳しくは、Delivery Pipeline プライベート・ワーカーのインストールを参照してください。
-
ローカルにインストールされた IBM Cloud CLI。
-
kubectl がローカルにインストールされている。
-
Kubernetes クラスター (バージョン 1.22 以上)。例えば、 IBM Cloud® Kubernetes Service クラスターなど。
ツールチェーンと Delivery Pipeline プライベート・ワーカーのツール統合は同じリージョンになければなりません。
コンソールを使用した Tekton 用の Delivery Pipeline の作成
Delivery Pipeline ツール統合を構成するときに、作成するパイプラインのタイプを選択できます。
-
ツールチェーンを持っていない場合は、テンプレートを選択して ツールチェーンを作成する。 使用するテンプレートに応じて、使用できるフィールドは異なります。 デフォルトのフィールド値を確認し、必要に応じてそれらの設定を変更します。
-
ツールチェーンがあり、そこにこのツール統合を追加する場合、 IBM Cloud コンソールから、 メニューアイコンの
> Platform Automation > Toolchains をクリックします。 ツールチェイン・ページで、ツールチェインをクリックしてその概要ページを開く。 あるいは、アプリの「概要」ページの「継続的デリバリー」カードで、**「ツールチェーンの表示」をクリックします。 次に、「概要」**をクリックします。
-
デリバリー・パイプライン統合をツールチェーンに追加します。
a. **「ツールの追加」**をクリックします。
b. 「ツール統合」セクションで**「Delivery Pipeline」**をクリックします。
-
新しいパイプラインの名前を指定します。
-
**「Tekton」**を選択して Tekton Delivery Pipeline を作成します。 パイプライン定義レポ、パイプライントリガー、パイプラインが実行される場所、簡単な秘密の設定をサポートし、定義された Kubernetes クラスタ上で実行されたTektonパイプラインの出力を表示することができます。
-
パイプラインを使用してユーザー・インターフェースをデプロイするよう計画している場合は、**「アプリケーションの表示メニューでアプリケーションを表示する (Show apps in the View app menu)」チェック・ボックスを選択します。 パイプラインが作成するすべてのアプリケーションが、ツールチェーンの「概要」ページの「アプリケーションの表示 (View App)」**リストに表示されます。
-
**「統合の作成」**をクリックして、Delivery Pipeline をツールチェーンに追加します。
コンソールを使用した Tekton 用の Delivery Pipeline の構成
-
ツールチェーンの概要ページで、 デリバリーパイプラインカード上の Delivery Pipeline をクリックして、Tekton Delivery Pipeline Overviewページを開きます。
-
「設定」 をクリックします。 **「定義」**セクションで、以下のタスクを実行します。
a. Tekton パイプライン定義および関連する成果物が含まれている Git リポジトリーおよび URL を指定します。 リポジトリーが使用できない場合は、ツールチェーンの「概要」ページに戻り、リポジトリーを追加します。
b. 使用する Git リポジトリー内のブランチを選択するか、タグを入力します。
c. Git リポジトリー内のパイプライン定義のパスを指定します。 同じリポジトリー内にある特定の定義を参照できます。 ツールチェーンと統合されている場合は、複数の定義リポジトリーを追加することもできます。
d. 変更内容を保存します。
パイプライン定義は自動的に更新されます。
計算されたパイプライン定義のサイズ制限は 1 MB です。 パイプラインを保存または実行するときにエラーが発生した場合は、パイプライン定義のサイズを小さくするか、複数のパイプラインに分割する必要があります。
-
**「ワーカー (Worker)」**セクションで、Tekton パイプラインを実行するために使用する IBM 管理の共有ワーカーまたはプライベート・ワーカーを選択します。 プライベート・ワーカーについて詳しくは、Delivery Pipeline プライベート・ワーカーの操作を参照してください。
プライベート・ワーカーは、Tekton パイプラインと同じツールチェーンに定義されていなければなりません。
-
「環境プロパティー」 セクションで、「追加」 をクリックし、独自の環境プロパティーを定義するプロパティー・タイプを選択します。 例えば、
API_KEY
プロパティーを定義して、パイプライン内のすべてのスクリプトで IBM Cloud リソースにアクセスするときに使用する API キーを渡すことができます。 以下のタイプのプロパティーを追加できます。- 列挙 (Enumeration): ユーザー定義のオプションのリストから選択できる値を持つプロパティー・キー。
- セキュア値 (Secure value): AES-128 暗号化で保護された単一行の値を持つプロパティー・キー。 この値は、アスタリスク文字を使用して表示されます。 あるいは、鍵アイコンをクリックして、ボールト統合 (IBM Key Protectなど) からシークレットを選択することもできます (そのようなツールがツールチェーンで使用可能な場合)。
- テキスト値 (Text value): 単一行または複数行のテキスト値を持つプロパティー・キー。 以前は、複数行の値は別のテキスト域 (Text area) プロパティー・タイプでサポートされていました。
- ツール統合 (Tool integration): 実行時にツールチェーンのツール統合から解決される値を持つプロパティー・キー。 デフォルトでは、値はツール統合の JSON ストリング表現です。 オブジェクトの特定のフィールドまたはサブセットは、オプションの JSON フィルターに値を指定して取得できます。 例えば、GitHub 統合が選択されていて、JSON フィルター
parameters.repo_url
が指定されている場合、値は、PipelineRun
リソースの実行時にツール統合で構成される Git リポジトリーの URL を表します。
Tekton パイプラインのリソースの中で、これらのプロパティーにアクセスすることができます。 これらのプロパティーの詳細については、Tekton の環境とリソースを参照してください。
プロパティーをロックして、オーバーライドされないようにすることができます。 ロックされたプロパティーを実行時にオーバーライドしようとすると、実行要求が拒否されます。 ロックされたプロパティーは、デフォルトでは実行サイド・パネルに表示されませんが、「すべてのプロパティーを表示」オプションを有効にすることで読み取り専用で表示できます。
-
保存 をクリックします。
-
パイプラインの概要]ページで、[ 追加] をクリックしてトリガーを作成し、追加するトリガーのタ イプを選択し、トリガーをイベントリスナーに関連付けます。 使用可能なイベント・リスナーのリストには、パイプライン・コード・リポジトリーで定義されているリスナーが含まれています。
トリガーは Tektonのトリガー定義に基づいている。 Git repo トリガーは、受信したイベントペイロードから情報を抽出し、 リソースを作成するために、マッピングされたイベントリスナーを使用します。 Kubernetes これらのリソースは、Tekton
PipelineRun
リソースに適用されます。トリガーされたパイプライン実行は、
Limit concurrent runs
オプションを使用して実行をシリアライズするようにトリガーを構成しない限り、並行して実行されます。 このオプションを有効にすると、このトリガーによって開始できる同時実行の数を制限できます。 例えば、最大限度が 1 に設定されている場合、このトリガーに対して一度に 1 つのパイプラインのみが実行され、その他のパイプラインはキューに入れられて待機状態になります。 後続のリクエストが自動的にキャンセルされるまで、最大20回( IBM Managed Workersを使用している場合は5回)の実行が待機状態でキューに入れられる。 デフォルトでは、IBMManaged Workers を使用する場合、すべての Timed トリガーは同時実行が 1 回に制限されます手動トリガーは、**「実行」**パイプライン・ボタンをクリックしてトリガーを選択した場合に実行されます。
Git リポジトリー・トリガーは、指定した Git リポジトリーおよびブランチで、指定した Git イベント・タイプが発生した場合に実行されます。
Tekton パイプライン・リソースから Git トリガーに送達された Web フック・ペイロードにアクセスできます。 正確なフィールドはリポジトリーによって異なりますが、Web フック・ペイロードの一般的な構文は
$(event.payloadFieldName)
です。 Web フックを作成する前に、対応する Git 統合に対する Git 管理アクセスを許可する必要があります。 Git 管理アクセスを許可するには、再度 Git 統合を構成して保存します。時限トリガーは CRON 値で定義されたスケジュールされた時間に実行されます。 時間指定トリガーの CRON式は、 UNIXのcrontab構文に基づいており、5つの時間フィールドと日付フィールドのシーケンスである:
minute
hour
,day of the month
,month
, andday of the week
。 これらのフィールドは、X X X X X
の形式でスペースで区切られます。 時限トリガーの最大頻度は、5 分に 1 回です。 以下の例は、さまざまな時間指定の頻度を使用する文字列を示しています。*/5 * * * *
- 5 分毎にトリガーを実行します。0 * * * *
- 毎時 0 分にトリガーを実行します。0 9 * 1 MON-FRI
- 1 月の毎週月曜から金曜まで午前 9:00 にトリガーを実行します。0 * * NOV,DEC 1
- 11 月と 12 月の月曜に毎時トリガーを実行します。
汎用 Web フック・トリガーは、シークレットの設定で構成された POST 要求が汎用 Web フック URL に送信されると実行されます。 汎用 Web フック・トリガーは、POST 要求に対して固有の Web フック URL を提供します。
PipelineRun UI は、イベント・ペイロード・セクションの汎用 Web フック・ペイロード値を非表示にしないため、ペイロードには機密データを含めないでください。 代わりに、パスワードまたは API キー・シークレットなどのトリガー・プロパティーを使用して、汎用 Web フックに必要なデータを保護してください。
次のいずれかのメソッドを使用して、Git、Slack Outgoing Web フック、Artifactory Web フックなどと連携する、汎用 Web フック・トリガーを保護できます。
- 保存されたトークンと POST 要求内で渡されるトークンを比較する、トークンの突き合わせ。 サポートされるトークン・ソースには、ヘッダー、クエリー、またはペイロードが含まれます。 トークンの突き合わせは、GitLab Web フックおよび Slack Outgoing Web フックで使用されます。
- HMAC 16 進数ダイジェストを保存されたトークンと一緒に使用して、ダイジェストされたペイロードから生成されたハッシュと署名とを比較する、ペイロード・ダイジェストの突き合わせ。 サポートされる署名ソースには、ヘッダー、クエリー、またはペイロードが含まれることがあります。 ユーザーはダイジェスト・アルゴリズムを指定する必要があります。 ペイロード・ダイジェストの突き合わせは、GitHub Web フックで使用されます。
- Tekton タスク検証では、ユーザーがその Tekton タスク内の Web フック要求を検証する必要があります。
汎用 Web フック・トリガーを GitHub Web フックで使用するには、以下の値を指定します。
- 保護:
Payload Digest Matches
- 署名ソース:
Header
- ヘッダー・キー名:
X-Hub-Signature
- ダイジェスト・アルゴリズム:
sha1
。
汎用 Web フック・トリガーを GitLab Web フックで使用するには、以下の値を指定します。
- 保護:
Token Matches
- トークン・ソース:
Header
- ヘッダー・キー名:
X-Gitlab-Token
汎用 Web フック・トリガーを Slack Outgoing Web フックで使用するには、以下の値を指定します。
- 保護:
Token Matches
- トークン・ソース:
Payload
- JSON プロパティー名 / フォーム・キー:
token
次の例は、
Token Matches
ルールで保護されている汎用 Web フックで curl コマンドを使用する方法を示しています。な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 リクエストのボディにプロパティを渡すことができます。 これにより、ウェブフックによってトリガーされる PipelineRun に対してプロパティをオーバーライドしたり、 PipelineRun で使用されるパイプライン/トリガーのプロパティを補足する追加のプロパティを渡したりすることができます。
パスワードやAPIキーの秘密など、機密データをペイロードプロパティに渡す必要がある場合、UIにプレーンテキストで表示されないように、そのようなプロパティにはプロパティタイプ
SECURE
を使用する必要があります。さらに、トリガーされた PipelineRun、ブラウザで PipelineRun の詳細を見るときにUIに表示される を説明するオプションの説明をリクエストボディに渡すことができる。
次の例は、text プロパティ、secure プロパティ、および description を渡しながら、一般的な 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"} ] }'
Tekton パイプライン用の Delivery Pipeline トリガーの設定
Git リポジトリ内のさまざまなイベントに基づいて、Tekton パイプラインのトリガーを設定できます。 以下のオプションを使用して、Gitトリガーをフィルタリングします:
- ブランチ:指定したイベントが発生すると、選択したレポの特定のブランチのパイプラインをトリガーします。
- パターン:指定したイベントが発生したときに、選択したレポのタグとブランチ名のグロブマッチに基づいてパイプラインをトリガーします。
- CELフィルター:イベントが指定された CEL (Common Expression Language) フィルタに一致すると、パイプラインをトリガーします。
commit push
、'pull request opened
、'updated
、'closed
などのイベントを指定するには、**ブランチ・オプションとパターン・**オプションを使用する。 また、'プルリクエストのドラフトイベントを含めるオプションを切り替えることで、プルリクエストのイベントを指定し、ドラフトプルリクエストのパイプライントリガーを許可またはスキップすることができます。
同様に、フォークしたリポジトリからのプルリクエストに対してパイプライントリガーを許可するかどうかを、フォークからのプルリクエストイベントを含めるトグルを使って指定できます。 さらに、Label filters オプションを選択すると、フィルターテーブルのユーザー定義基準に従って、プルリクエストラベルに基づくフィルタリングを有効にすることができます。
CELフィルターオプションは、イベントペイロードの他のフィールドとのマッチングのような、より高度なユースケースをサポートする。 このオプションは、プッシュイベント、すべてのプルリクエストイベント、課題イベント、課題コメントイベント、リリースイベントをサポートします。 このオプションは、Webhook ペイロードに基づくイベントフィルタリングを提供するために、Generic Webhook トリガーのオプション機能としても利用可能です。
CELの概要
CELは、簡潔で読みやすい方法で条件を評価し、検証を実行するために設計された、強力で柔軟な式言語である。 CELは、イベントのフィルタリングなど、複雑な条件ロジックを必要とするユースケースに最適です。
Tektonパイプラインでは、CELオプションが導入され、より強力で柔軟なイベントフィルタリングが可能になりました。 ウェブフックのペイロードは、ユーザーによって提供された CEL 式に対して評価されます。 CEL式が true
と評価されると、パイプラインの実行がトリガーされます。
CELでは以下の機能がサポートされている:
- 算術演算子 (
+
,-
,*
,/
,%
) - 比較演算子 (
=
,!=
,<
,>
,<=
,>=
) - 論理演算子 (
&&
,||
) - 文字列演算子 (
contains
,matches
,startsWith
,endsWith
) - コレクション演算子 (
in
,!in
) - 変数(変数名で直接参照する)
- リテラル (文字列、数値、ブーリアン、NULLなどのリテラルをサポート)
CELには、ベースとなるCEL言語により多くの機能を提供するために、以下の拡張機能が含まれている:
Sets extension
は、高度なセット操作をサポートし、イベントフィルタリングにおいてより柔軟性を提供します。 この拡張機能の詳細については、セットを参照してください。matchesGlob
は、既存のパターンフィールドを新しいCELフィルターオプションに変換する際の互換性を提供します。 より高度な正規表現マッチングには、ネイティブのCELmatches
演算子を使うことをお勧めします。
CELの詳細については、CELドキュメントを参照してください。
CELへの変換
既存のイベント・フィルタリングの選択項目をCEL式に変換するには、以下の手順を実行します:
-
変換したいGitトリガーを編集する。
-
Trigger on セクションで、CELフィルターオプションを選択します。
フィルターオプション 以下の要素は、等価なCEL表現に自動的に変換される:
- ブランチまたはパターン
commit push
、pull request opened
、updated
、closed
などのイベント- プルリクエストのドラフトイベントを含める
- フォークからのプルリクエストイベントを含める
- ラベル・フィルター
フィルター換装 生成されたCEL式はテキストエリアのフィールドに書き込まれ、必要に応じて編集できる。
Generic Webhook トリガーには変換用のフィルターが存在しないため、CEL フィルターへの変換は Git トリガーのみに適用されます。
CEL オプションを選択した状態でトリガーを保存すると、それまで選択されていたイベントを CEL 式に置き換えます。 CELフィルター・オプションを保存した後に、ブランチまたはパターン・オプションに切り替えると、以前のイベント選択は保存されません。 CELオプションからBranchまたはPatternオプションへの変換はサポートされていない。
CELの表現例
次の例は、サポートされているGitタイプに共通するCEL表現です:GitHub
、GitLab
、BitBucket
です。 これらの例をコピーして、あなたの要件に合うように変更することができます。
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')
指定されたラベルでissueが作成された際に実行されます:
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')
指定されたラベルでissueが作成された際に実行されます:
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')
指定されたラベルでissueが作成された際に実行されます:
header['x-event-key'] == 'issue:created' &&
body.issue.kind == 'bug'
フィルター
フィルターにより、ユーザーは特定の条件に基づいてプルリクエストを絞り込むことができます。 フィルターフィールドは現在、プルリクエストにラベルを指定することをサポートしており、それによってラベルの有無に基づいてパイプラインの実行を制御します。 しかし、ラベルが追加または削除されたときにパイプラインを起動するのではなく、パイプラインの実行を許可する前にPRのラベルを検証する。
実行方法:
- PRイベントが発生すると(新しいコミットが追加されるなど)、パイプラインはPRのラベルをチェックする。
- PRがラベルの条件を満たしている場合(例えば、「承認済み」ラベルを持つ場合)、パイプラインは実行される。
- PRがラベル条件を満たさない場合、パイプラインは実行されない。
構成の例
以下のスクリーンショットは、トリガーが "approved "と "reviewed "のラベルに設定されている例です。
- PRパイプラインは、両方のラベルが存在する場合にのみトリガーされる。
- どちらかのラベルがない場合、パイプラインは実行されない。

イベントペイロードのチェック
イベント・フィルタリングのために CEL 式を書くとき、式が評価されるウェブフック・ペイロードの構造と内容を理解する必要があります。 パイプラインランの詳細ページから、既存のランのペイロードを検査することができます。
イベントペイロードを表示するには、パイプライン実行の詳細ページでコンテキストを表示をクリックします。 パイプラインの実行をトリガーした生のウェブフック・ペイロードを表示し、CEL式の関連フィールドが希望する条件に一致することを確認できます。
API を使用した Tekton 用の Delivery Pipeline の作成
-
IAM ベアラー・トークンを取得します。 あるいは、SDK を使用している場合は、 IAM API キーを取得 し、環境変数を使用してクライアント・オプションを設定します。
export CD_TEKTON_PIPELINE_APIKEY={api_key}
-
Delivery Pipeline ツール統合の追加先となる ツールチェーンのリージョンと ID を決定します。
-
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();
以下の表に、前のステップで使用された各変数をリストして説明します。
APIとのDelivery Pipelineツール統合を追加するための変数 変数 説明 {region}
ツールチェーンが存在するリージョン (例: us-south
)。{tool_integration_name}
ツール統合の名前。例えば、 ci-pipeline
など。{toolchain_id}
ツール統合の追加先となるツールチェーンの ID。 {iam_token}
有効な IAM ベアラ・トークン。 -
指定された地域内のパブリック管理対象ワーカーを使用するように 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();
以下の表に、前のステップで使用された各変数をリストして説明します。
APIDelivery Pipelineで 変数 説明 {region}
ツールチェーンが存在するリージョン (例: us-south
)。{pipeline_id}
パイプライン・ツール統合が作成された、前のステップから返されたパイプラインの ID。 {iam_token}
有効な IAM ベアラ・トークン。
Delivery Pipeline APIについての詳細は、 API Docsを参照のこと。
Terraform を使用した Tekton 用の Delivery Pipeline の作成
-
Terraform CLI をインストールし、Terraform 用の IBM Cloud Provider プラグインを構成するために、Terraform on IBM Cloud® 入門のチュートリアルに従ってください。
-
main.tf
という名前の Terraform 構成ファイルを作成します。 このファイルに、 HashiCorp Configuration Languageを使用してパイプラインを作成するための設定を追加します。 この構成言語の使用について詳しくは、 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_pipeline
およびibm_cd_tekton_pipeline
リソースについて詳しくは、Terraform レジストリー資料で引数参照の詳細を参照してください。 -
必要な場合は、Terraform CLI を初期化します。
terraform init
-
Terraform 実行プランを作成します。 このプランは、ツールチェーンを作成するために実行する必要があるすべてのアクションを要約します。
terraform plan
-
Terraformの実行計画を適用する。 Terraform は、ツールチェーンを作成するために必要なすべてのアクションを実行します。
terraform apply
Tekton の Delivery Pipeline の表示
パイプラインを表示するには、コンソール UI、API、または Terraform を使用します。
コンソールを使用した Delivery Pipeline の表示
少なくとも 1 つのトリガーが追加されるまで、Tekton Delivery Pipeline の「概要」ページに空のテーブルが表示されます。 Tekton パイプラインが (手動で、または外部イベントの結果として) 実行されると、パイプライン内の各トリガーに関連付けられている最近の実行に関するデータが表に表示されます。 各行には、単一のトリガーに関する情報が表示され、そのトリガーに関連付けられた最近の実行のグラフが表示されます。 これらの実行の成功または失敗、および最新の実行が行われた時刻などの情報も表示されます。
トリガーごとにアクションを実行することもできます。トリガーを手動で実行するか、お気に入りとしてマーク付けするか、トリガーを編集するか、トリガーを有効または無効にするか、またはトリガーを削除します。 グラフ内の項目の 1 つをクリックして、その個々の PipelineRun
の詳細を検査することもできます。 または、トリガー名をクリックして、そのトリガーに関連付けられているすべての PipelineRun
に対して PipelineRuns
ページを開くことができます。 各 PipelineRun
の状況、トリガー、期間などの関連情報も使用できます。
パイプライン実行は、以下のいずれかの状態になります。
- 保留中:
PipelineRun
が要求されています。 - 実行中:
PipelineRun
がクラスターで実行されています。 - 成功: クラスターで
PipelineRun
が正常に完了しました。 - 失敗:
PipelineRun
が失敗しました。 ログ・ファイルで実行について調べて、原因を特定してください。 - キュー状態:
PipelineRun
の処理が許可されました。ワーカーのキャパシティーが利用可能になったときに実行されます。 - 待機中:
PipelineRun
はキューに入れられるのを待っています。 - キャンセル済み: システムまたはユーザーによって
PipelineRun
がキャンセルされました。 待機ランの数が許容限度を超えると、システムはPipelineRun
をキャンセルする。 - エラー:
PipelineRun
にエラーが含まれているため、それをクラスターに適用できませんでした。 エラーの原因について、詳しくは実行詳細情報を参照してください。
選択した実行について詳しくは、表内の任意の行をクリックして、 Task
定義および各 PipelineRun
定義のステップを表示します。 また、各Task
定義およびステップの状況、ログ、詳細、および PipelineRun
定義の全体的な状況を表示することもできます。
PipelineRuns とそのログの保存期間は、 Continuous Delivery サービス・インスタンスに対して選択されたプランによって異なります。 プロフェッショナル・プランでは、Tekton パイプラインは 1 年間保持されます。 ライト・プランでは、Tekton パイプラインは 30 日間保持されます。 保存期間を過ぎても PipelineRuns
を保持するには、 PipelineRuns セクションで **「アクション」>
「ダウンロード」 を選択して .zip ファイルをダウンロードします。
API を使用した Delivery Pipeline の表示
-
IAM ベアラー・トークンを取得します。 あるいは、SDK を使用している場合は、 IAM API キーを取得 し、環境変数を使用してクライアント・オプションを設定します。
export CD_TEKTON_PIPELINE_APIKEY={api_key}
-
パイプライン・データを取得します。
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();
以下の表に、前のステップで使用された各変数をリストして説明します。
変数 | 説明 |
---|---|
{region} |
パイプラインが存在する領域 (例: us-south )。 |
{pipeline_id} |
表示したいパイプラインのID。 |
{iam_token} |
有効な IAM ベアラ・トークン。 |
Terraform を使用した Delivery Pipeline の表示
-
既存のパイプラインの
resource
ブロックを含む Terraform ファイル (例えば、main.tf
) を見つけます。 -
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_pipeline
およびibm_cd_tekton_pipeline
リソースについて詳しくは、Terraform レジストリー資料で引数参照の詳細を参照してください。 -
必要な場合は、Terraform CLI を初期化します。
terraform init
-
refresh-only
オプションを指定して Terraform 実行プランを適用します。 Terraform はその状態をリフレッシュし、パイプライン・リソースの属性を表示します。terraform apply -refresh-only -auto-approve
APIによる Delivery Pipeline の削除
-
IAM ベアラー・トークンを取得します。 あるいは、SDK を使用している場合は、 IAM API キーを取得 し、環境変数を使用してクライアント・オプションを設定します。
export CD_TEKTON_PIPELINE_APIKEY={api_key}
-
DevOps Insights ツール統合の追加先となる ツールチェーンの地域と ID を決定します。
-
パイプラインを削除します。
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();
以下の表に、前のステップで使用された各変数をリストして説明します。
変数 | 説明 |
---|---|
{region} |
ツールチェーンが存在するリージョン (例: us-south )。 |
{toolchain_id} |
削除するパイプラインが含まれているツールチェーンの ID。 |
{pipeline_id} |
削除するパイプラインのID。 |
{iam_token} |
有効な IAM ベアラ・トークン。 |
Terraform を使用した Delivery Pipeline の削除
-
既存のパイプラインの
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 }
-
Terraform ファイルから
ibm_cd_toolchain_tool_pipeline
ブロックとibm_cd_tekton_pipeline
resource
ブロックを削除します。 -
必要な場合は、Terraform CLI を初期化します。
terraform init
-
Terraform 実行プランを作成します。 この計画は、パイプラインを削除するために実行する必要があるすべてのアクションを要約します。
terraform plan
-
Terraformの実行計画を適用する。 Terraform は、パイプラインを削除するために必要なすべてのアクションを実行します。
terraform apply
TaskRun ポッドの詳細の表示
特定の TaskRun
の基礎となる Kubernetes ポッドに関する情報を表示するには、 Task
名をクリックし、[ ポッド]をクリックします。
ポッドの詳細と、ワーカーによって報告された関連イベントを表示できます。 この情報は、特定の障害をデバッグしたり、実行中にどこで時間がかかったかを判別したりするのに役立ちます。
Tekton パイプラインおよびリソースに関する詳細
Tektonパイプラインの詳細については、 Tekton:A Modern Approach to Continuous Delivery および IBM Cloud Continuous Delivery Tekton Pipelines Tools and Resources の記事をご覧ください。
パイプライン内で参照できるTektonタスクの詳細については、 Open Toolchain Tekton Catalogを参照してください。 この GitHub リポジトリーには Tekton パイプラインで再利用できるタスクが含まれています。