データ接続と統合Code Repositories高度なワークフローカスタムチェックの作成

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

カスタム CI

カスタム CI ジョブまたはカスタム Gradle タスクを追加して、リポジトリで実行される継続的インテグレーション(CI)チェックを拡張できます。

カスタム CI ジョブを追加する [ベータ版]

ベータ版

カスタム CI ジョブは開発のベータ版段階にあり、お使いのエンロールメントでは利用できない場合があります。開発が進行している間は機能が変更される可能性があります。カスタム CI ジョブの利用をご希望の場合は、Palantir サポートにお問い合わせください。

Foundry のコードリポジトリでは、ci.yml ファイルに Foundry が管理するデフォルトの CI ジョブが定義されています。チェックに独自のジョブを追加するには、ci.additions.yml ファイルにジョブを定義します。

カスタム CI ジョブでは、次のことができます。

  • シェルコマンドのリストをそれぞれ実行するジョブをチェックに追加する。
  • デフォルトのジョブを含むすべてのジョブ、または単一のカスタムジョブに環境変数を設定する。
  • Data Connection ソースのエグレスポリシーとシークレットを使用して、デフォルトのジョブを含むすべてのジョブを外部システムに接続する。

カスタム CI ジョブを作成する

ジョブを追加するには、リポジトリのルートに ci.additions.yml という名前のファイルを作成します。リポジトリのアップグレードによって、このファイルが上書きされることはありません。

次の例を実行する前に、API名が MySource で、password という名前のシークレットを持つソースを準備してインポートしてください。この例では、環境変数を定義し、ソースを宣言し、GREETING の値を出力して password シークレットが利用可能であることを確認するジョブを追加します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 env: GREETING: Hello from a custom CI job sources: - MySource jobs: print-greeting: timeout: 5 minutes steps: - echo "$GREETING" - test -n "$MySource_password"

test -n "$MySource_password" ステップは、MySource_password 環境変数が空または未設定の場合に失敗します。これにより、シークレットの値をログに出力せずに、シークレットが利用可能であることを確認できます。

ファイルをコミットすると、チェックが実行されます。チェックタブでは、ジョブごとにステータスとログが個別に表示されます。

ファイルリファレンス

ci.additions.yml ファイルは、次のトップレベルキーをサポートしています。すべてのキーは任意です。ファイルにこれ以外のトップレベルキーが含まれている場合、チェックは失敗します。

キー説明
envci.yml で定義されたジョブを含むすべてのジョブで利用可能な環境変数。各キーが変数名、各値がその変数の値です。
jobs実行するジョブ。各キーがジョブ名、各値がそのジョブの定義です。
sourcesジョブが使用できるソースのAPI名。詳細については、ジョブでソースを使用するを参照してください。

jobs 内の各ジョブは、次の項目をサポートしています。

項目説明
steps必須。順番に実行するシェルコマンドのリスト。各ステップは、リポジトリのルートから別々の bash プロセスで実行されるため、あるステップでエクスポートした変数は、後続のステップでは利用できません。ステップがゼロ以外の終了コードを返すと、ジョブは失敗し、残りのステップは実行されません。
timeout任意。ジョブの最大実行時間。たとえば 10 minutes です。ジョブがこの時間を超えると、失敗します。timeout を省略すると、ジョブ単体の制限はありませんが、CI 実行全体には、すべてのジョブで共有されるプラットフォーム設定のタイムアウトが引き続き適用されます。デフォルトは60分です。
env任意。このジョブでのみ利用可能な環境変数。形式はトップレベルの env キーと同じです。ジョブレベルの変数がトップレベルの変数と同じ名前の場合、ジョブレベルの値が優先されます。

ルール

ci.additions.yml が次のルールに従っていない場合、チェックは失敗します。

  • env と jobs の名前は、ci.yml ですでに定義されている名前と重複してはいけません。新しい名前を追加することはできますが、Foundry が管理する設定を変更することはできません。
  • ジョブに order を設定してはいけません。

カスタムジョブは、ci.yml で定義されたすべてのジョブの後に、ci.additions.yml に記載された順序で実行されます。ci.yml が order でジョブの順序を指定しており、そのジョブのいずれかが失敗した場合、カスタムジョブは実行されません。

ジョブでソースを使用する

ジョブは、Data Connection ソースを通じて外部システムに接続できます。ci.additions.yml でソースを宣言すると、チェックはそのソースのエグレスポリシーを、デフォルトのジョブを含むすべてのジョブに適用し、ソースのシークレットを環境変数として渡します。

ソースを準備する

ジョブでソースを使用するには、事前に Data Connection でソースの次の設定を行ってください。

  1. 接続設定 > コードインポート設定に移動し、このソースを Code Repositories にインポートできるようにするをオンにして、ソースにAPI名があることを確認します。ジョブはこの名前でソースを参照します。
  2. 接続設定 > エクスポート設定に移動し、マーキング検証なしでこのソースへのエクスポートを有効化をオンにします。

チェックはリポジトリ内のデータのマーキングを検証せず、ジョブはそのデータを外部システムに送信できます。この設定を有効にする前に、カスタム CI ジョブの権限とエクスポートを有効にするために必要な権限を確認してください。

ソースをリポジトリにインポートする

ci.additions.yml を含むリポジトリにソースをインポートします。たとえば、次の方法があります。

ソースをインポートするには、ソースに対する編集者権限が必要です。

ソースを宣言する

カスタム CI ジョブの例に示すように、ジョブが使用できるソースのAPI名をトップレベルの sources キーにリストします。

宣言した各ソースは、リポジトリにインポートされていて、API名を持っている必要があります。リポジトリにインポートされていても、ci.additions.yml で宣言されていないソースは、ジョブで使用できません。

ソースのシークレットにアクセスする

チェックは、宣言されたソースの各シークレットを、<source API name>_<secret name> という名前の環境変数として渡します。たとえば、API名が MySource のソースに password という名前のシークレットがある場合、ジョブは MySource_password 環境変数からシークレットを読み取れます。

ソースのシークレット変数は、env 内の同名の変数よりも優先されます。2個のソースから同じ変数名が生成される場合、ジョブにはどちらか一方の値のみが渡されます。ソースのAPI名とシークレット名の組み合わせがそれぞれ一意であることを確認してください。

利用可能なツール

ジョブは、次のツールを含む控え目な構成の Linux 環境で実行されます。

  • bash と、grep、sed、find、xargs、tar、gzip、bzip2、base64 などの一般的なコマンドラインユーティリティ
  • git
  • python3 と Python 標準ライブラリ
  • $JAVA_HOME に配置された Java Development Kit (JDK)

curl や ssh などのツールは利用できません。HTTP リクエストを行うには、Python を使用します。たとえば、urllib.request モジュール ↗を使用できます。

カスタム Gradle タスクを作成する

カスタムチェックを Gradle ↗ タスクとして作成できます。これらのタスクを、言語別サブフォルダー内の適切な build.gradle ファイルに追加します。次の例では、実行時に Hello World を出力する Gradle タスクを定義しています。doLast メソッドは、設定時ではなく、タスクの実行時に動作するタスクアクションを作成します。

Copied!
1 2 3 4 5 6 // カスタムタスクを定義します task customTask { doLast { println "Hello World" } }

CI チェック中にタスクを実行するには、CI タスクがそのタスクに依存している必要があります。この依存関係を同じ build.gradle ファイルで定義します。次の例では、CI で customTask の後に check タスクが実行され、CI ログに Hello World メッセージが表示されます。

Copied!
1 2 // カスタムタスクに対する CI の依存関係を追加します project.tasks.check.dependsOn customTask

タスクリストの最後にタスクを実行するには、代わりに次の構文を使用します。

Copied!
1 2 // CI チェックが公開された後にカスタムタスクを実行します project.tasks.publish.configure { finalizedBy customTask }

依存関係を追加するには、CI タスク project.tasks.check、project.tasks.test、project.tasks.publish を使用します。内部タスクなど、ほかの CI タスクは保証されておらず、変更される可能性があるため、使用したり依存したりしないでください。

Gradle ビルドスクリプトの詳細については、Gradle ドキュメント ↗を参照してください。

ci.yml ファイルはリポジトリのアップグレードによって上書きされるため、カスタムチェックを追加しないでください。チェック中に追加のコマンドを実行するには、代わりにカスタム CI ジョブを使用します。