パラメーターとシークレット
パラメーターは、ユーザーによって定義されるか、Automation によって提供される名前と値のペアです。パラメーターの主な目的は、さまざまなデータをジョブに渡すことです。例: これは、Docker イメージ名、URL、コマンドライン引数などです。あるいは、アクセストークンやパスワードである場合もあります。このような機密パラメーターはシークレットと呼ばれます。
ジョブでパラメーターを使用する
ジョブのパラメーターを取得するには、その名前を二重波括弧: "{{ my-param }}"
内の文字列で指定します。これは、 startOn
、 git
、 kotlinScript
を除く、DSL ブロック内の任意の文字列で行うことができます。
スクリプトにパラメーターとして使用されない波括弧を含む文字列が含まれている場合は、\\{{ ... }}
または {{ ... \\}}
のようにエスケープする必要があります。
例: これはプロジェクトパラメーターを参照する方法です:
job.parameters.text
ブロックを使用して、ジョブ内でパラメーターを直接定義することもできます。
ジョブでシークレットを使用する
パラメーターを参照するのと同じ方法でシークレットを参照できますが、場所は限られています。詳細
シークレットをファイルに保存することもできます。例: SSH キーを指定する方法は次のとおりです。
kotlinScript でパラメーターとシークレットを使用する
kotlinScript
ブロック内のパラメーターを取得するには、次のいずれかのオプションを使用します。
環境変数
プロジェクト全体のパラメーターとシークレット
プロジェクトパラメーターは、プロジェクト内のすべてのオートメーションジョブ内で使用できます。プロジェクトパラメーターには次の 2 種類があります。
プレーンテキストパラメーター – 通常、これらはオートメーションスクリプト全体で頻繁に使用されるパラメーターです。例: 外部サービスの URL。
シークレット – AES 暗号化形式で保存されたパラメーター。例: 外部サービスへのパスワードまたはアクセストークン。自動化では、セキュリティ上の理由からジョブログ内のシークレット値が非表示になります。
プロジェクトからシークレットを削除すると、シークレットはストレージから即座に削除されます (シークレットを使用する実行中のジョブがある場合、ジョブの実行が終了するとシークレットは削除されます)。
プロジェクトのシークレットとパラメーターを定義するには
プロジェクトのサイドバーメニューで、設定を選択し、次にシークレットとパラメーターを選択します。
作成をクリックし、シークレットまたはパラメーターを選択します。
指定
キー : パラメーター名。この名前を使用して、スクリプト内でこのパラメーターを参照します。
値 : パラメーター値。
制限:
シークレットとパラメーターは、特定のプロジェクトのスコープ内にのみ存在します。1 つのプロジェクトでシークレットまたはパラメーターを作成した場合、他のプロジェクトで使用することはできません。
シークレットとパラメーターのキーはプロジェクト内で一意である必要があります。同じキーを持つシークレットとパラメーターも許可されません。
キーは 128 文字以下である必要があり、英数字 (
[a-z]
、[A-Z]
、[0-9]
)、ダッシュ (-
)、またはアンダースコア (_
) のみを含めることができます。シークレットまたはパラメーターの値の最大サイズは 30KB です。すべてのコンテナー引数、環境変数、シークレット、パラメーターの最大合計サイズも 30KB に制限されることに注意してください。例: 30KB のシークレットと 1KB の引数をステップに指定すると、ステップは失敗します。
プロジェクトのシークレットとパラメーターを使用するには
ルールに従う:
プロジェクトパラメーターまたはシークレットを取得するには、そのキーの前に
project:
接頭辞"{{ project:param-key }}"
を付けて使用します。シークレットは
job.parameters
、job.container.env
、job.container.shellScript.args
、job.container.args
ブロック内でのみ取得できます (同じことは、対応するすべてのjob.host
ブロックを指します)。
例:
job("Use project params") { // E.g., a parameter and a secret // 'bintray-repo-url' and 'bintray-repo-password' // exist in the project settings parameters { // you can assign project secrets and params to configured params text("url", value = "{{ project:bintray-repo-url }}") secret("password", value = "{{ project:bintray-repo-password }}") } // Get project parameter values in a shell script container(displayName = "Print param value shell", image = "ubuntu") { env["URL"] = "{{ project:bintray-repo-url }}" // The only way to get a secret in a shell script is an env variable env["PSWRD"] = "{{ project:bintray-repo-password }}" shellScript { content = """ echo "Url from conf param - {{ url }}" echo "Url from env var - ${'$'}URL" echo "Password from env var - ${'$'}PSWRD" echo "Url from project param directly - {{ project:bintray-repo-url }}" # It's not possible to directly reference secrets from a shell script. # The next commented lines would fail. # echo "Password from conf param - {{ password }}" # echo "Password from project param - {{ project:bintray-repo-password }}" """ // Output: // Url from conf param - http://example.com // Url from env var - http://example.com // Password from env var - ***** // Url from project param directly - http://example.com } } // Get project parameter values in a Kotlin script container(displayName = "Print param value kotlin", image = "amazoncorretto:17-alpine") { env["URL"] = "{{ project:bintray-repo-url }}" env["PSWRD"] = "{{ project:bintray-repo-password }}" kotlinScript { api -> println("Url from env var - " + System.getenv("URL")) println("Url from API - " + api.parameters["url"]) println("Password from env var" + System.getenv("PSWRD")) // An advanced use case is the Ref class that holds a // reference to a secret or a parameter: // Ref("project:my-param").toString() == "{{ project:my-param }} // See the example below api.secrets["service-password"] = Ref("project:bintray-repo-password") println("Password from Ref" + api.secrets["service-password"]) // Output: // Url from env var - http://example.com // Url from env API - http://example.com // Password from env var - ***** // Password from Ref - ***** } } }特定のシークレットまたはパラメーターがどのジョブで使用されているかを確認するには、プロジェクト設定でシークレットとパラメーターを開き、目的のシークレットまたはパラメーターの横にある使用箇所の表示をクリックします。
- 従来のシークレットとパラメーターからの移行
以前は、プロジェクトシークレットとパラメーターの値を取得するために
Secrets
関数とParams
関数を使用できました。これらの関数は非推奨であり、将来削除される予定です。オートメーションスクリプトでSecrets
またはParams
関数を使用している場合は、job.parameters.secret
およびjob.parameters.text
ブロックに置き換えることを強くお勧めします。従来のスクリプト
job("Legacy way to use secrets and params") { container(displayName = "Show pwd", image = "ubuntu") { env["URL"] = Params("bintray-repo-url") env["PSWRD"] = Secrets("bintray-repo-password") shellScript { content = """ echo My password for ${'$'}URL echo is ${'$'}PSWRD """ } } }置換
job("New way to use secrets and params") { parameters { text("url", "{{ project:bintray-repo-url }}") secret("password", "{{ project:bintray-repo-password }}") } container(displayName = "Show pwd", image = "ubuntu") { env["URL"] = "{{ url }}" env["PSWRD"] = "{{ password }}" shellScript { content = """ echo My password for ${'$'}URL echo is ${'$'}PSWRD """ } } }
Custom Run でジョブをカスタマイズする
ユーザーは、スクリプトを実行する前にデフォルトのパラメーター値を変更できます。カスタマイズされたパラメーターを使用してジョブを実行するには、カスタムランオプションを使用する必要があります。
job.parameters.text
関数を使用すると、さまざまな型のカスタマイズ可能なパラメーターを定義できます。以下の表は、可能なオプションとカスタムランウィンドウでのそれらの表現を示しています。
// Simple text parameter with optional description
text("text-param", value = "default-value", description = "This is a text param") |
// Text parameter with no default value. The job will fail
// if a user doesn't specify its value before a custom run
text("param-no-default") |
// Multiline text parameter
text("param-multiline", value = "default-value", multiline = true) |
// Text parameter that doesn't allow changing its default value
text("param-no-override", value = "non-overridable-value", allowCustomRunOverride = false) |
// Drop-down list of values
text("param-options", value = "two") {
options("one", "two", "three")
} |
// List with multiple value choice
text("param-options-multiple-choice", value = "two") {
options("one", "two", "three") {
allowMultiple = true
// optionally, you can specify how the values must be separated
valueSeparator = ","
}
} |
// Project secret
secret("token", value = "{{ project:auth-token }}", description = "Auth token") |
例: カスタマイズ可能なデプロイスクリプトは次のようになります。
ステップ間でパラメーターを渡す
場合によっては、実行コンテキスト (スクリプトの実行結果など) を 1 つのオートメーションステップから別のオートメーションステップに渡す必要があります。ステップ内からパラメーターまたはシークレットを作成するには、parameters
API を使用する必要があります。API は kotlinScript
ブロック内でのみ使用できます。ステップを実行するコンテナーには JRE/JDK 11 以降が含まれている必要があります。
例: この機能を使用して、前のステップで構築されたイメージ内のステップを実行できます。
container
ステップとは異なり、host
ステップ内では、後続の多数のスクリプト (つまり、shellScript
および kotlinScript
ブロック) を実行できます。ただし、制限があります。スクリプト内で定義されたパラメーターには、同じ host
ステップ内の後続のスクリプトではアクセスできません。例: 次のジョブは失敗します:
パラメーターのフォールバック値
場合によっては、ジョブの実行中にパラメーター値が欠落することがあります。パラメーターが現在のコンテキストに存在しないか、空の文字列に解決される可能性があります。例: 通常、マージリクエストで実行されるジョブを作成する場合、{{ run:review.id }}
のようなレビュー番号を参照できます。ただし、ジョブを手動で実行するか、別のトリガーを使用して実行すると、レビュー ID 値が欠落し、ジョブは失敗します。これを防ぐには、パラメーターのフォールバック値 {{ run:review.id ?: 'no-review'}}
を指定します。レビュー ID が見つからない場合は、代わりに no-review
フォールバック値が使用されます。
フォールバック値を指定する構文は {{ parameter-name ?: <fallback> }}
です。ここで、fallback
は、{{ param1 ?: param2 ?: 'If no params 1 and 2, this string will be the value' }}
のようなフォールバックパラメーターまたは値のシーケンスを参照できるテンプレート式です。例:
kotlinScript
では、ネイティブ Kotlin チェックを使用して null 可能性を確認できます。
ボールトパラメーター
Space は、独自のシークレットストレージに加えて、外部の HashiCorp Vault ストレージもサポートしています。Vault サーバーへの接続を設定すると、プロジェクトパラメーターを使用すると同じ方法でストレージの変数を使用できるようになります。
- 前提条件
AppRole(英語) が設定された動作中の Vault サーバーがあります。サーバーは、ビルドスクリプトに必要なシークレットを保存します。
Vault サーバーへの接続を設定するには
プロジェクトのサイドバーメニューで、設定を選択し、次にボールト接続を選択します。
新規接続をクリックし、接続名前およびその他の設定を指定します。
ボールトの URL :
https://vaultserver:port
形式の Vault サーバーの URL。アプリロール ID および AppRole シークレット ID : Space が Vault サーバーにログインするために使用する資格情報(英語)。
パラメーターの名前空間 : (オプション) 追加の接続識別子。プロジェクトに複数の Vault 接続がある場合、パラメーターの名前空間を使用して、特定のパラメーターを解決するためにどの接続を使用する必要があるかを指定できます。
ボールトの名前空間 : (オプション) マルチテナント Vault 構成で使用されるボールトの名前空間(英語)。
「接続のテスト」をクリックし、接続に成功したら「作成」をクリックします。
Vault パラメーターを作成するには
プロジェクトのサイドバーメニューで、設定を選択し、次にシークレットとパラメーターを選択します。
作成をクリックし、ボールトパラメーターを選択します。
指定
キー : 変数名。この名前を使用して、スクリプト内でこの変数を参照します。
パス : Key/Value v1 または v2 シークレットエンジン形式の Vault シークレットパス。例:
/aws/sts/mysecret
フィールド : (オプション) フィールド名。シークレットに複数のフィールドがある場合は、オートメーションジョブで取得する値のフィールドを指定します。シークレットに複数のフィールドがあるが、フィールド名を指定しない場合、オートメーションは
value
という名前のフィールドを取得しようとします。名前空間 : (オプション) パラメーターを解決する必要がある Vault 接続の識別子。名前空間は、Vault 接続に指定されたパラメーターの名前空間と一致する必要があります。
保存をクリックします。
ジョブで Vault パラメーターを使用するには
ルールに従う:
プロジェクトパラメーターまたはシークレットを取得するには、
vault:namespace:/secret_path/field_name
形式を使用します。例:vault:/secret/password
:password
という名前のフィールドが 1 つだけあるシークレットの値を取得します。vault:/secret/credentials!/password
:/secret/credentials!
シークレットのpassword
フィールドの値を取得します。vault:/secret/json!/store.books[0].category
: JSON オブジェクトとして保存されている/secret/json
シークレット内の JsonPath 検索クエリ (ドット表記) に対応する値を取得します。vault:/secret/json!/['store'].['books'][0].['category']
: JSON オブジェクトとして格納されている/secret/json
シークレット内の JsonPath 検索クエリ (括弧表記) に対応する値を取得します。vault:test:/secret/credentials!/password
:test
パラメーターの名前空間を使用した Vault 接続を使用して、/secret/credentials
シークレットのpassword
フィールドの値を取得します。
Vault パラメーターは
job.parameters
、job.container.env
、job.container.shellScript.args
、job.container.args
ブロック内でのみ取得できます (同じことは、対応するすべてのjob.host
ブロックを指します)。
例:
job("Build") { // reference `username` field of the `/secret/data/credentials!` secret // using the parameters block parameters { secret("username", "{{ vault:secret/data/credentials!/username }}") } container("ubuntu:latest") { // get Vault parameter directly env["PSWRD"] = "{{ vault:/secret/data/credentials!/password }}" // get Vault parameter from defined parameter env["USERNAME"] = "{{ username }}" shellScript { content = """ echo "Username from env var - ${'$'}USERNAME" echo "Password from env var - ${'$'}PSWRD" # It's not possible to directly reference secrets from a shell script. # The next commented lines would fail. # echo "Username from conf param - {{ username }}" """ } } }特定の Vault パラメーターがどのジョブで使用されているかを確認するには、プロジェクト設定でシークレットとパラメーターを開き、目的のパラメーターの横にある使用箇所の表示をクリックします。
ジョブの実行後にパラメーター値を表示する
プロジェクトに移動します。
サイドバーメニューで、ジョブを選択します。
ジョブを選択します。
ジョブ内のすべてのパラメーターを表示するには、「パラメーター」タブを開きます。
特定のステップのパラメーターを表示するには、「ステップ」タブを開き、特定のステップを選択して、その「パラメーター」タブを開きます。
提供されたパラメーターのリファレンス
オートメーションには、ジョブ実行番号、Git ブランチ名とコミット ID、Space インスタンスの URL など、ビルドスクリプトで使用できる事前定義されたパラメーターが多数用意されています。
指定されたパラメーターの値を取得するには、いくつかの方法があります (変数によっては、これらの方法の一部が使用できない場合があります)。
事前定義されたパラメーター名 (例:
"{{ run:number }}"
) を使用します。kotlinScript
では動作しません。事前定義された環境変数を使用します。
$JB_SPACE_EXECUTION_NUMBER
kotlinScript
ブロック内:必要な変数値を返す API メソッド (例:
api.executionNumber()
) を使用します。対応する API メソッドは常にString
値を返します。parameters
API を使用して、パラメーター名 (例:api.parameters["run:number"]
) によって値を取得します。
例:
定義済み名 | 説明 |
---|---|
— | JetBrains Space インスタンスの URL。例:
|
| 現在のプロジェクトの ID。
|
| 現在のプロジェクトのキー。
|
| デフォルトのキャッシュリポジトリの名前。 |
— | 現在のスクリプトに対して発行される一時的な OAuth 2.0 アクセストークン。スクリプトはこれを使用して、さまざまな Space モジュールでの認証を行うことができます。例: これを使用して、ビルドアーティファクトを公開するために、パッケージリポジトリ内のスクリプトを承認できます。
|
— | アクセストークンの代わりに、スクリプトは一時的な OAuth 2.0 認証情報を使用して認証できます。
|
| 現在の Git コミット ID。
|
| 現行の Git ブランチ。
|
| チェックアウトされたリポジトリのコンマ区切りリスト:
|
| ジョブの実行を開始するために使用されるトリガー。可能な値: |
| ジョブの実行をトリガーしたユーザーの ID。ジョブが Space ユーザーによって手動で実行された場合にのみ関係します。 |
| ジョブの実行をトリガーしたアプリケーションの ID。登録されたアプリケーションからの HTTP API 呼び出しによってジョブが実行された場合にのみ関係します。 |
| セーフマージ実行をトリガーしたユーザーの ID。セーフマージジョブが Space ユーザーによって手動で実行された場合にのみ関係します。 |
| 現行の Git ブランチ。ユーザーがカスタム実行中に特定のコミットを選択した場合にのみ関係します。 |
| 現在の Git コミット ID。ユーザーがカスタム実行中に特定のコミットを選択した場合にのみ関係します。 |
| ジョブの実行をトリガーしたコミットの ID。gitPush トリガーが有効な場合にのみ関連します。 |
| このプッシュの前に ref が指していたコミットの ID。gitPush トリガーが有効な場合にのみ関連します。 |
| ジョブの実行をトリガーしたブランチ。gitPush トリガーが有効な場合にのみ関連します。 |
| ジョブの実行をトリガーしたリポジトリ。gitPush トリガーが有効な場合にのみ関連します。 |
| 削除されたブランチ / タグのリスト。gitBranchDeleted トリガーが有効な場合にのみ関連します。コンマは区切り文字として使用されます (例: |
| ジョブの実行をトリガーしたレビューの ID。codeReviewOpened または codeReviewClosed トリガーが有効な場合にのみ関係します。 |
| コードレビューを経たブランチ。codeReviewOpened または codeReviewClosed トリガーが有効な場合にのみ関係します。 |
| コードレビューを通過するコミットの ID。codeReviewOpened または codeReviewClosed トリガーが有効な場合にのみ関係します。 |
| コードレビュー後に変更がマージされることになるブランチ。codeReviewOpened または codeReviewClosed トリガーが有効な場合にのみ関係します。 |
| コードレビュー後にマージされるコミットの ID。codeReviewOpened または codeReviewClosed トリガーが有効な場合にのみ関係します。 |
| ジョブの実行をトリガーしたレビューの ID。codeReviewOpened、codeReviewClosed、gitPush (マージリクエスト内) マニュアル (マージリクエストページから)、または safeMerge トリガーが有効な場合にのみ関連します。 |
| コードレビューを経たブランチ。codeReviewOpened、codeReviewClosed、gitPush (マージリクエスト内) 手動 (マージリクエストから)、または safeMerge トリガーが有効な場合にのみ関連します。 |
| コードレビューを通過するコミットの ID。codeReviewOpened、codeReviewClosed、gitPush (マージリクエスト内) 手動 (マージリクエストから)、または safeMerge トリガーが有効な場合にのみ関連します。 |
| コードレビュー後に変更がマージされることになるブランチ。codeReviewOpened、codeReviewClosed、gitPush (マージリクエスト内) 手動 (マージリクエストから)、または safeMerge トリガーが有効な場合にのみ関連します。 |
| コードレビュー後にマージされるコミットの ID。codeReviewOpened、codeReviewClosed、gitPush (マージリクエスト内) 手動 (マージリクエストから)、または safeMerge トリガーが有効な場合にのみ関連します。 |
| プロジェクト内のマージリクエスト番号。codeReviewOpened、codeReviewClosed、gitPush (マージリクエスト内) 手動 (マージリクエストから)、または safeMerge トリガーが有効な場合にのみ関連します。 |
| 現在の実行 (ビルド) の一意の ID。これを使用して、Space API を使用して特定のビルドを参照できます。
|
| 現在のジョブの一意の ID。 |
| 現在の |
| 現在のジョブの実行番号 (ビルド番号)。例: アプリケーションのバージョン番号を生成するために使用できます。詳細
|
| 現在のジョブ実行へのリンク。
|
— | ワーカーに割り当てられた JetBrains Space インスタンスの URL。例:
|
— | ワーカーに対して発行される認証トークン。ワーカーは、これを使用して Space での認証を行います。
|
— | スクリプトがすべての必要なデータ (プロジェクトソース、ファイル共有、オートメーション固有のデータ) をダウンロードするディレクトリへのパス。
|
— | ワーカーのホスト名。
|
| ワーカーエージェントを実行するホストマシンで利用可能なシステムリソース: CPU コア (mCPU)、RAM (MB)。
|
| ワーカーマシンのホスト名。 |
| ワーカーのオペレーティングシステム (OS) のターゲット CPU アーキテクチャ、OS タイプ、OS バージョン。 |
関連ページ:
DSL リファレンス
オートメーション DSL は、Space オートメーションスクリプトの作成を支援することを目的としたドメイン固有の言語です。DSL は Kotlin プログラミング言語に基づいています。これは、スクリプト内で Kotlin データ型と言語構造を使用できることを意味します。作業:は、ステップで構成される定義済みタスクです。はジョブの名前ですは作業内容です例:job(
プロジェクトに参加する
あるプロジェクトに貢献を開始したい場合は、そのプロジェクトに参加する必要があります。つまり、そのプロジェクトのメンバーになる必要があります。貢献しようとしているプロジェクトに移動します。すでにメンバーである場合は、プロジェクトのページのプロジェクトメンバーにリストされます。そうでない場合は、プロジェクト管理者に連絡してメンバーシップを依頼してください。プロジェクト管理者を確認するには、プロジェクトページでメンバーウィジェットをクリックします。プロジェクトを探す:すべてのプロジェクトは名前で見つ
ジョブの表示、実行、停止、サブスクライブ
プロジェクトのジョブページでは、ジョブの実行と停止、現在のジョブの実行進行状況と実行結果の表示、およびジョブ通知のサブスクライブを行うことができます。ジョブの実行結果を表示する:プロジェクトに移動します。サイドバーメニューで、ジョブを選択します。必要なリポジトリとブランチが選択されていることを確認してください。このページには、プロジェクト内のすべてのジョブのリストとその実行結果が表示されます。ここでは、たとえば次のような場合にジョブフィルターを適用することもできます。実物のみジョブを残す: 自...
Gradle プロジェクトからアーティファクトを公開する
Gradle ビルドツールを使用するプロジェクトがあり、以下を使用して新しく作成された Maven リポジトリにプロジェクトアーティファクトを公開するとします。Gradle コマンドラインツール ,、JetBrains TeamCity,、Space Automation.、同じパッケージバージョンのアーティファクトを公開することは許可されていないことに注意してください。サーバーは 409 HTTP 応答を返します。唯一の例外: 接頭辞を持つアーティファクトは、スナップショットサポートが有効になって...
ジョブ実行のトリガー
自動化は次のジョブトリガーをサポートします。デフォルトで有効になっています。ユーザーが参照 (ブランチ、タグ、コミット、その他の Git 参照) をプロジェクトリポジトリにプッシュした後にジョブを実行します。の範囲を制限して、プロジェクトリポジトリ内の変更ではなく特定のブランチ、タグ、ディレクトリ、ファイルの変更についてのみがトリガーされるようにすることができます。マルチリポジトリプロジェクトがある場合は、特定のリポジトリ内の変更に対してジョブを実行するようにトリガーを設定できます。詳細 |DSL...