第6章 パイプライン実行の管理
Pipelines as Code を使用すると、コードリポジトリーにパイプラインを作成し、これらのパイプラインを実行できます。
6.1. Pipelines as Code を使用したパイプライン実行の作成 リンクのコピーリンクがクリップボードにコピーされました!
Pipelines as Code を使用してパイプラインを実行するには、リポジトリーの .tekton/ ディレクトリーにパイプライン定義またはテンプレートを YAML ファイルとして作成します。リモート URL を使用して他のリポジトリー内の YAML ファイルを参照できますが、パイプラインの実行は、.tekton/ ディレクトリーを含むリポジトリー内のイベントによってのみトリガーされます。
Pipelines as Code リゾルバーは、パイプラインの実行をすべてのタスクと共に、外部依存関係のない単一のパイプラインの実行としてバンドルします。
-
Pipeline の場合、spec または分離された
Pipelineオブジェクトと共に少なくとも 1 つのパイプライン実行を使用します。 - タスクの場合、パイプライン内にタスク仕様を埋め込むか、Task オブジェクトとして個別に定義します。
コミットと URL のパラメーター化
{{<var>}} 形式の動的でデプロイメント可能な変数を使用して、コミットと URL のパラメーターを指定できます。現在、以下の変数を使用できます。
-
{{repo_owner}}: リポジトリーの所有者。 -
{{repo_name}}: リポジトリー名。 -
{{repo_url}}: リポジトリーの完全な URL。 -
{{revision}}: コミットの完全 SHA リビジョン。 -
{{sender}}: コミットの送信者のユーザー名またはアカウント ID。 -
{{source_branch}}: イベントが発生したブランチ名。 -
{{target_branch}}: イベントが対象とするブランチ名。プッシュイベントの場合、これはsource_branchと同じです。 -
{{pull_request_number}}:pull_requestイベントタイプに対してのみ定義されたプルまたはマージリクエスト番号。 -
{{git_auth_secret}}: プライベートリポジトリーをチェックアウトするための Git プロバイダーのトークンで自動的に生成されるシークレット名。
イベントのパイプライン実行へのマッチング
パイプライン実行の特別なアノテーションを使用して、異なる Git プロバイダーイベントを各パイプラインに一致させることができます。イベントトガッチする複数のパイプライン実行がある場合に、Pipelines as Code はそれらを並行して実行し、パイプライン実行の終了直後に結果を Git プロバイダーに Post します。
プルイベントのパイプライン実行へのマッチング
次の例を使用して、main ブランチを対象とする pull_request イベントと、pipeline-pr-main パイプラインをマッチさせることができます。
- 1
- コンマ区切りのエントリーを追加して、複数のブランチを指定できます。たとえば、
"[main, release-nightly]"です。さらに、以下を指定できます。-
"refs/heads/main"などのブランチへの完全な参照 -
"refs/heads/\*"などのパターンマッチングを含む glob -
"refs/tags/1.\*"などのタグ
-
プッシュイベントのパイプライン実行とのマッチング
次の例を使用して、pipeline-push-on-main パイプラインを refs/heads/main ブランチを対象とする プッシュ イベントとマッチさせることができます。
- 1
- コンマ区切りのエントリーを追加することで、複数のブランチを指定できます。たとえば、
"[main, release-nightly]"です。さらに、以下を指定できます。-
"refs/heads/main"などのブランチへの完全な参照 -
"refs/heads/\*"などのパターンマッチングを含む glob -
refs/tags/1.\*などのタグ
-
高度なイベントマッチング
コードとしてのパイプラインは、高度なイベントマッチングのための Common Expression Language (CEL) ベースのフィルタリングの使用をサポートします。パイプラインの実行に pipelinesascode.tekton.dev/on-cel-expression アノテーションがある場合に、Pipelines as Code は CEL 式を使用し、on-target-branch アノテーションをスキップします。単純な オンターゲットブランチ アノテーションマッチングと比較して、CEL 式では複雑なフィルタリングと否定が可能です。
Pipelines as Code で CEL ベースのフィルタリングを使用するには、次のアノテーションの例を検討してください。
mainブランチを対象とし、wipブランチからのpull_requestイベントを一致させるには、次のようにします。... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && target_branch == "main" && source_branch == "wip" ...... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && target_branch == "main" && source_branch == "wip" ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow パスが変更された場合にのみパイプラインを実行するには、glob パターンで
.pathChanged接尾辞関数を使用できます。... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && "docs/\*.md".pathChanged() ...... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && "docs/\*.md".pathChanged()1 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
docsディレクトリー内のすべてのマークダウンファイルと一致します。
[DOWNSTREAM]で始まるすべてのプルリクエストとマッチさせるには、以下を実行します。... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request && event_title.startsWith("[DOWNSTREAM]") ...... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request && event_title.startsWith("[DOWNSTREAM]") ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow pull_requestイベントでパイプラインを実行し、experimentalブランチを省略するには、以下を実行します。... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && target_branch != experimental" ...... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && target_branch != experimental" ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Pipelines as Code を使用しながら高度な CEL ベースのフィルタリングを行うには、次のフィールドと接尾辞関数を使用できます。
-
event:pushまたはpull_requestイベント。 -
target_branch: ターゲットブランチ。 -
source_branch: 元のpull_requestイベントのブランチ。pushイベントの場合は、target_branchと同じです。 -
event_title:pushイベントのコミットタイトルや、pull_requestイベントのプルまたはマージリクエストのタイトルなど、イベントのタイトルとマッチします。現在、サポートされているプロバイダーは GitHub、Gitlab、および Bitbucket Cloud のみです。 -
.pathChanged: 文字列への接尾辞関数です。文字列は、パスが変更されたかどうかを確認するパスの glob にすることができます。現在、GitHub と Gitlab のみがプロバイダーとしてサポートされています。
Github API 操作への一時的な GitHub App トークンの使用
GitHub アプリケーションの Pipelines as Code によって生成された一時インストールトークンを使用して、GitHub API にアクセスできます。トークン値は git-provider-token キーのプライベートリポジトリー用に生成された一時的な {{git_auth_secret}} 動的変数に格納されます。
たとえば、プル要求にコメントを追加するには、Pipelines as Code アノテーションを使用して Tekton Hub からの github-add-comment タスクを使用できます。
... pipelinesascode.tekton.dev/task: "github-add-comment" ...
...
pipelinesascode.tekton.dev/task: "github-add-comment"
...
その後、タスクをパイプライン実行定義の tasks セクションまたは finally タスクに追加できます。
- 1
- 動的変数を使用すると、任意のリポジトリーからのプルリクエストに対して、このスニペットテンプレートを再利用できます。
GitHub アプリでは、生成されたインストールトークンは 8 時間利用可能で、クラスターで別の設定を行わない限り、イベントの発生元のリポジトリーにスコープが設定されます。