2022年3月8日

Continuous Integration

whenディレクティブと組み込み変数を使ったCIでの条件付き実行

whenディレクティブと組み込み変数を使用すれば、ユーザーは複数のパイプラインを作成して維持せずとも、同様のユースケースに対して1つのパイプラインを使うことができます。条件付き実行の全てを学びましょう。

05.-Blog-header-1024x320-2-tablet.webp

whenディレクティブを使うと、パイプラインは与えられた条件によって、ステップやステージを実行すべきかどうかを決定することができます。

なぜ必要なのでしょうか。

例えば、以下のようなロジックを実行するパイプラインを構築する必要があるとします。

  1. アプリケーションのイメージをビルドしてプッシュする
  2. 統合テストを実行し、アプリケーションが正しく動作することをテストする // プルリクエストの場合のみ 
  3. Jira チケットを作成する // 実行中に障害が発生した場合のみ

これは非常に一般的なユースケースです。

アプリケーションをビルド、テスト、プッシュするとき、ユーザーはしばしばビルドの種類に応じてステップやステージを実行したりスキップしたりする必要があります。機能ブランチにプッシュするとき、PRを変更するとき、タグをビルドするときなど、パイプラインのロジックにいくつかのバリエーションが必要になることがあります。

これを実現する方法として、whenディレクティブを使用します。whenディレクティブを使って、ユーザーは以下を設定できます。

  1. ステータスベースの条件。成功時(デフォルト動作)、常時、失敗時など、ステップ/ステージの状態に基づいて実行する。
  2. JEXL条件。ステータスの上に、ユーザーが条件を追加設定できる。

例えば、以下のような条件を設定したステージは、そのステージの実行前にエラーが発生していない場合、プルリクエストのビルドに対してのみ実行されます。 

image-17-81868828-1920w.png

パイプラインのYAMLでは、このような条件になります。

when:
    pipelineStatus: Success 
condition: <+codebase.build.type> == "PR" 

上の例では、whenディレクティブと組み込み変数を組み合わせています。また、JEXL条件をパイプライン変数、ステージ変数、ステップ出力変数などの他の変数と併用することで、ステージ/ステップの実行タイミングを条件付きで決定することも可能です。 

組み込み変数をwhen条件で使用する際のベストプラクティス  

パイプライン、ユーザー変数、トリガー、コードベースと、複数のタイプの組み込み変数があります。

<+codebase.X>という形式の変数は、CIステージの一部として実行されたクローン操作に関連する情報を保持します。<+trigger.X> という形式の変数は、パイプラインがどのようにトリガーされたかに関連する情報を保持します。

パイプラインのトリガー方法(手動、webhookなど)やビルドタイプ(Tag、Branch、PR)によって、実行時に解決されない組み込み変数もあるかもしれません。たとえば、<+codebase.tag> はタグをビルドするときのみ、<+trigger.prTitle> はパイプラインがPull Request Gitイベントによってトリガーされた場合のみ、値が設定されます。

変数の扱いを簡単にするために、組み込み変数にはデフォルトでnullという文字列が設定されています。つまり、変数の値がnullと等しいかどうかをテストすることで、値が入力されたかどうかを確認することができるのです。 

ですから、"v."のような特定のパターンで始まるタグだけを実行するステージがある場合、<+codebase.tag>に正規表現にマッチするJEXLを使えば、簡単にそれを実現することができるのです。このパイプラインはPRやブランチの構築にも使用でき、その場合は<+codebase.tag>がパターンにマッチしない文字列nullに解決されるため、このステージはスキップされます。

when:
    pipelineStatus: Success 
condition: <+codebase.tag> ~/v.*/ 

まとめ

今回のブログでは、whenディレクティブと組み込み変数を使用した条件付き実行について学びました。

複数のパイプラインを作成・管理するのではなく、1つのパイプラインで類似の、しかし微妙に異なるユースケースに対応できることを示しました。

より詳しく知りたい方は、こちらをご参照ください。


この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。

Harnessに関するお問い合わせはお気軽にお寄せください。

お問い合わせ