CI/CD YAML構文リファレンス
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
このドキュメントでは、GitLabの.gitlab-ci.ymlファイルの設定オプションについて説明します。このファイルでは、パイプラインを構成するCI/CDジョブを定義します。
- 基本的なCI/CDの概念をすでに理解している方は、シンプルまたは複雑なパイプラインの構築手順を示すチュートリアルに沿って、独自の
.gitlab-ci.ymlファイルを作成してみてください。 - さまざまな例については、GitLab CI/CDの例を参照してください。
- エンタープライズで使用される大規模な
.gitlab-ci.ymlファイルを確認するには、gitlabの.gitlab-ci.ymlファイルを参照してください。
.gitlab-ci.ymlファイルを編集しているときは、CI Lintツールでこのファイルを検証できます。
GitLab CI/CDの設定はYAML形式を使用するため、キーワードの順序は特に指定がない限り重要ではありません。
より動的なパイプライン設定オプションについては、CI/CD式を使用してください。
キーワード
GitLab CI/CDパイプラインの設定には、次の要素が含まれます。
パイプラインの動作を設定するグローバルキーワード:
キーワード 説明 defaultジョブキーワードに対するカスタムデフォルト値。 include他のYAMLファイルから設定をインポートします。 stagesパイプラインステージの名前と順序。 variablesパイプラインのすべてのジョブのデフォルトCI/CD変数を定義します。 workflow実行するパイプラインのタイプを制御します。 キーワード 説明 spec外部設定ファイルの仕様を定義します。 キーワード 説明 after_scriptジョブの後に実行される一連のコマンドをオーバーライドします。 allow_failureジョブの失敗を許容します。ジョブが失敗してもパイプライン全体の失敗とはなりません。 artifacts成功時にジョブに添付されるファイルとディレクトリのリスト。 before_scriptジョブの前に実行される一連のコマンドをオーバーライドします。 cache後続の実行間でキャッシュされるファイルのリスト。 coverage指定されたジョブのコードカバレッジ設定。 dast_configurationジョブレベルでDASTプロファイルの設定を使用します。 dependenciesアーティファクトのフェッチ元のジョブのリストを指定することで、特定のジョブに渡されるアーティファクトを制限します。 environmentジョブのデプロイ先の環境の名前。 extendsこのジョブが継承する設定エントリ。 identityアイデンティティフェデレーションを使用したサードパーティサービスの認証を行います。 imageDockerイメージを使用します。 inheritすべてのジョブが継承するグローバルデフォルトを選択します。 interruptibleより新しい実行によってジョブが冗長になった場合に、ジョブをキャンセルできるかどうかを定義します。 manual_confirmation手動ジョブのカスタム確認メッセージを定義します。 needsステージの順序よりも早い時点でジョブを実行します。 pagesGitLab Pagesで使用するためにジョブの結果をアップロードします。 parallel並列実行するジョブインスタンスの数。 releaseリリースオブジェクトを生成するようにRunnerに指示します。 resource_groupジョブの並行処理を制限します。 retryジョブが失敗した場合に、ジョブを自動的に再試行できる条件と回数。 rulesジョブの一部の属性を評価し、そのジョブが作成されるかどうかを決定する条件のリスト。 scriptRunnerが実行するShellスクリプト。 runRunnerが実行する実行設定。 secretsジョブに必要なCI/CDシークレット。 servicesDockerサービスイメージを使用します。 stageジョブステージを定義します。 start_in指定された期間、ジョブの実行を遅らせます。 when: delayedが必要です。tagsRunnerを選択するために使用されるタグのリスト。 timeoutプロジェクト全体の設定よりも優先される、カスタムのジョブレベルのタイムアウトを定義します。 triggerダウンストリームパイプライントリガーを定義します。 variables個々のジョブのCI/CD変数を定義します。 whenジョブを実行するタイミング。 現在は使用が推奨されていない非推奨のキーワード。
グローバルキーワード
一部のキーワードはジョブでは定義されません。これらのキーワードは、パイプラインの動作を制御するか、追加のパイプライン設定をインポートします。
default
一部のキーワードではグローバルデフォルトを設定できます。各デフォルトキーワードは、まだそのキーワードが定義されていないすべてのジョブにコピーされます。
デフォルト設定はジョブの設定とマージされません。ジョブにキーワードがすでに定義されている場合、そのキーワードのジョブキーワードが優先され、そのキーワードのデフォルト設定は使用されません。
キーワードのタイプ: グローバルキーワード。
サポートされている値: 以下のキーワードにはカスタムデフォルトを設定できます。
after_scriptartifactsbefore_scriptcachehooksid_tokensimageinterruptibleretryservicestagstimeout。ただし、イシュー213634のためこのキーワードには効果がありません。
defaultの例:
default:
image: ruby:3.0
retry: 2
rspec:
script: bundle exec rspec
rspec 2.7:
image: ruby:2.7
script: bundle exec rspecこの例では:
image: ruby:3.0とretry: 2は、パイプラインのすべてのジョブのデフォルトキーワードです。rspecジョブではimageとretryが定義されていないため、デフォルトのimage: ruby:3.0とretry: 2が使用されます。rspec 2.7ジョブではretryが定義されていませんが、imageが明示的に定義されています。そのため、デフォルトのretry: 2が使用されますが、デフォルトのimageは無視され、ジョブで定義されているimage: ruby:2.7が使用されます。
補足情報:
inherit:defaultを使用することで、ジョブごとにデフォルトキーワードの継承を制御できます。- グローバルデフォルトはダウンストリームパイプラインには引き継がれません。ダウンストリームパイプラインは、それをトリガーしたアップストリームパイプラインとは独立して実行されます。
include
includeを使用して、外部のYAMLファイルをCI/CD設定にインクルードすることができます。1つの長い.gitlab-ci.ymlファイルを複数のファイルに分割することで読みやすさを向上させたり、複数の場所で同じ設定が重複する状況を減らしたりすることができます。
テンプレートファイルを中央のリポジトリに保存し、プロジェクトにインクルードすることもできます。
includeファイルは次のように処理されます。
.gitlab-ci.ymlファイルの内容とマージされます。includeキーワードの位置に関係なく、常に最初に評価され、.gitlab-ci.ymlファイルの内容とマージされます。
すべてのファイルを解決するための制限時間は30秒です。
キーワードのタイプ: グローバルキーワード。
サポートされている値: includeサブキー。
オプションで使用可能:
補足情報:
includeキーワードでは特定のCI/CD変数のみを使用できます。- マージを使用して、インクルードされるCI/CD設定をローカルでカスタマイズおよびオーバーライドできます。
- インクルードされる設定をオーバーライドするには、
.gitlab-ci.ymlファイルに同じジョブ名またはグローバルキーワードを指定します。2つの設定がマージされ、インクルードされる設定よりも.gitlab-ci.ymlファイル内の設定が優先されます。 - 再実行する場合:
- ジョブを再実行すると、
includeファイルは再度フェッチされません。パイプラインのすべてのジョブは、パイプラインの作成時にフェッチされた設定を使用します。そのため、ソースincludeファイルが変更されても、ジョブの再実行には影響しません。 - パイプラインを再実行すると、
includeファイルが再度フェッチされます。前回のパイプライン実行後にこれらのファイルが変更されていた場合、新しいパイプラインは変更された設定を使用します。
- ジョブを再実行すると、
- デフォルトでは、ネストされたインクルードを含めて、パイプラインごとに最大150個のインクルードを使用できます。補足情報を以下に示します。
- GitLab 16.0以降、GitLab Self-Managedのユーザーは、最大インクルード数の値を変更できるようになりました。
- GitLab 15.10以降、最大150個のインクルードを設定できます。ネストされたインクルードでは、同じファイルを複数回インクルードできますが、重複したインクルードもカウントの対象になります。
- GitLab 14.9からGitLab 15.9では、最大100個のインクルードを使用できます。ネストされたインクルードでは同じファイルを複数回インクルードできますが、重複は無視されます。
include:component
include:componentを使用して、CI/CDコンポーネントをパイプライン設定に追加します。
キーワードのタイプ: グローバルキーワード。
サポートされている値: CI/CDコンポーネントの完全なアドレス(形式: <fully-qualified-domain-name>/<project-path>/<component-name>@<specific-version>)。
include:componentの例:
include:
- component: $CI_SERVER_FQDN/my-org/security-components/secret-detection@1.0関連トピック:
include:local
include:localを使用して、includeキーワードを含む設定ファイルと同じリポジトリおよびブランチにあるファイルをインクルードします。シンボリックリンクの代わりにinclude:localを使用します。
キーワードのタイプ: グローバルキーワード。
サポートされている値:
ルートディレクトリ(/)を基準にしたフルパス:
- YAMLファイルの拡張子は、
.ymlまたは.yamlである必要があります。 - ファイルパスではワイルドカード
*と**を使用できます。 - 特定のCI/CD変数を使用できます。
include:localの例:
include:
- local: '/templates/.gitlab-ci-template.yml'短縮構文を使用してパスを定義することもできます。
include: '.gitlab-ci-production.yml'補足情報:
.gitlab-ci.ymlファイルとローカルファイルは、同じブランチに存在している必要があります。- Gitサブモジュールパスを使用してローカルファイルをインクルードすることはできません。
include設定は常に、パイプラインを実行しているプロジェクトではなく、includeキーワードを含むファイルの場所を基準に評価されます。そのため、ネストされたincludeが別のプロジェクトの設定ファイル内にある場合、include: localはその別のプロジェクト内でファイルを確認します。
include:project
同じGitLabインスタンス上の別の非公開プロジェクトからファイルをインクルードするには、include:projectとinclude:fileを使用します。
キーワードのタイプ: グローバルキーワード。
サポートされている値:
include:project: GitLabプロジェクトのフルパス。include:file: ルートディレクトリ(/)を基準にしたファイルのフルパス、またはファイルパスの配列。YAMLファイルの拡張子は.ymlまたは.yamlでなければなりません。include:ref: オプション。ファイルの取得元のref。指定しない場合、デフォルトはプロジェクトのHEADです。- 特定のCI/CD変数を使用できます。
include:projectの例:
include:
- project: 'my-group/my-project'
file: '/templates/.gitlab-ci-template.yml'
- project: 'my-group/my-subgroup/my-project-2'
file:
- '/templates/.builds.yml'
- '/templates/.tests.yml'refを指定することもできます。
include:
- project: 'my-group/my-project'
ref: main # Git branch
file: '/templates/.gitlab-ci-template.yml'
- project: 'my-group/my-project'
ref: v1.0.0 # Git Tag
file: '/templates/.gitlab-ci-template.yml'
- project: 'my-group/my-project'
ref: 787123b47f14b552955ca2786bc9542ae66fee5b # Git SHA
file: '/templates/.gitlab-ci-template.yml'補足情報:
include設定は常に、パイプラインを実行しているプロジェクトではなく、includeキーワードを含むファイルの場所を基準に評価されます。そのため、ネストされたincludeが別のプロジェクトの設定ファイル内にある場合、include: localはその別のプロジェクト内でファイルを確認します。- パイプラインが開始されると、すべての方法によってインクルードされた
.gitlab-ci.ymlファイルの設定が評価されます。この設定はその時点でのスナップショットであり、データベースに保持されます。GitLabは、参照先の.gitlab-ci.ymlファイルの設定が変更されても、次のパイプラインが開始されるまではその変更を反映しません。 - 別の非公開プロジェクトのYAMLファイルをインクルードする場合、パイプラインを実行するユーザーは両方のプロジェクトのメンバーであり、パイプラインを実行するための適切な権限を持っている必要があります。ユーザーがインクルード対象のファイルにアクセスできない場合、
not found or access deniedエラーが表示されることがあります。 - 別のプロジェクトのCI/CD設定ファイルをインクルードする場合は注意してください。CI/CD設定ファイルが変更されても、パイプラインや通知はトリガーされません。セキュリティの観点では、これはサードパーティの依存関係をプルすることと似ています。
refについては以下を検討してください。
include:remote
include:remoteと完全なURLを使用して、別の場所にあるファイルをインクルードします。
キーワードのタイプ: グローバルキーワード。
サポートされている値:
HTTP/HTTPS GETリクエストでアクセス可能な公開URL:
- リモートURLの認証はサポートされていません。
- YAMLファイルの拡張子は、
.ymlまたは.yamlである必要があります。 - 特定のCI/CD変数を使用できます。
include:remoteの例:
include:
- remote: 'https://gitlab.com/example-project/-/raw/main/.gitlab-ci.yml'補足情報:
- すべてのネストされたインクルードは、公開ユーザーとしてコンテキストなしで実行されるため、公開プロジェクトまたはテンプレートのみをインクルードできます。ネストされたインクルードの
includeセクションでは、変数は使用できません。 - 別のプロジェクトのCI/CD設定ファイルをインクルードする場合は注意してください。他のプロジェクトのファイルが変更されても、パイプラインや通知はトリガーされません。セキュリティの観点では、これはサードパーティの依存関係をプルすることと似ています。インクルードするファイルの整合性を検証するには、
integrityキーワードを使用することを検討してください。所有している別のGitLabプロジェクトにリンクする場合は、保護ブランチと保護タグの両方を使用して変更管理ルールを適用することを検討してください。
include:template
include:templateを使用して、.gitlab-ci.ymlテンプレートをインクルードします。
キーワードのタイプ: グローバルキーワード。
サポートされている値:
- すべてのテンプレートは、
lib/gitlab/ci/templatesで確認できます。すべてのテンプレートがinclude:templateでの使用を前提として設計されているわけではないため、使用する前にテンプレートのコメントを確認してください。 - 特定のCI/CD変数を使用できます。
include:templateの例:
# File sourced from the GitLab template collection
include:
- template: Auto-DevOps.gitlab-ci.yml複数のinclude:templateファイル:
include:
- template: Android-Fastlane.gitlab-ci.yml
- template: Auto-DevOps.gitlab-ci.yml補足情報:
- すべてのネストされたインクルードは、公開ユーザーとしてコンテキストなしで実行されるため、公開プロジェクトまたはテンプレートのみをインクルードできます。ネストされたインクルードの
includeセクションでは、変数は使用できません。
include:inputs
インクルードされた設定がspec:inputsを使用しパイプラインに追加される際、include:inputsを使用して入力パラメータの値を設定します。
キーワードのタイプ: グローバルキーワード。
サポートされている値: 文字列、数値、またはブール値。
include:inputsの例:
include:
- local: 'custom_configuration.yml'
inputs:
website: "My website"この例では:
custom_configuration.ymlに含まれる設定がパイプラインに追加され、インクルードされる設定のwebsiteインプットにはMy websiteという値が設定されます。
補足情報:
- インクルードされる設定ファイルが
spec:inputs:typeを使用している場合、インプット値は定義された型と一致している必要があります。 - インクルードされる設定ファイルが
spec:inputs:optionsを使用している場合、インプット値はリストされているオプションのいずれかと一致している必要があります。
関連トピック:
include:rules
rulesとincludeを組み合わせて使用すると、他の設定ファイルを条件付きでインクルードできます。
キーワードのタイプ: グローバルキーワード。
サポートされている値: 次のrulesサブキー:
include:rulesの例:
include:
- local: build_jobs.yml
rules:
- if: $INCLUDE_BUILDS == "true"
test-job:
stage: test
script: echo "This is a test job"この例では、INCLUDE_BUILDS変数の値に応じて次のようになります。
trueの場合、build_jobs.ymlの設定がパイプラインにインクルードされます。trueではない場合、または変数が存在しない場合は、build_jobs.ymlの設定はパイプラインにインクルードされません。
関連トピック:
includeを使用した例:
include:integrity
integrityをinclude:remoteと組み合わせて使用して、インクルードされたリモートファイルのSHA256ハッシュを指定します。integrityの値が実際の内容と一致しない場合、そのリモートファイルは処理されず、パイプラインは失敗します。
キーワードのタイプ: グローバルキーワード。
サポートされている値: インクルードされるコンテンツのBase64エンコードされたSHA256ハッシュ。
include:integrityの例:
include:
- remote: 'https://gitlab.com/example-project/-/raw/main/.gitlab-ci.yml'
integrity: 'sha256-L3/GAoKaw0Arw6hDCKeKQlV1QPEgHYxGBHsH4zG1IY8='stages
stagesを使用して、ジョブのグループを含むステージを定義します。ジョブにstageを指定することで、そのジョブを特定のステージで実行するように設定できます。
.gitlab-ci.ymlファイルでstagesが定義されていない場合、デフォルトのパイプラインステージは次のとおりです。
stagesに列挙された項目の順序によって、ジョブの実行順序が決まります。
- 同じステージ内のジョブは並列実行されます。
- 次のステージのジョブは、前のステージのジョブが正常に完了した後に実行されます。
パイプラインに.preステージまたは.postステージのジョブしか含まれていない場合、そのパイプラインは実行されません。これら以外のステージに少なくとも1つのジョブが必要です。
キーワードのタイプ: グローバルキーワード。
stagesの例:
stages:
- build
- test
- deployこの例では:
build内のすべてのジョブは並列実行されます。build内のすべてのジョブが成功すると、test内のジョブが並列実行されます。test内のすべてのジョブが成功すると、deploy内のジョブが並列実行されます。deploy内のすべてのジョブが成功すると、パイプラインはpassedとしてマークされます。
いずれかのジョブが失敗すると、パイプラインはfailedとしてマークされ、後続ステージのジョブは開始されません。現在のステージのジョブは停止されず、引き続き実行されます。
補足情報:
- ジョブに
stageが指定されていない場合、そのジョブにはtestステージが割り当てられます。 - ステージが定義されていても、そのステージを使用するジョブが存在しない場合、パイプラインには表示されません。これは、コンプライアンスパイプライン設定に役立ちます。
- ステージはコンプライアンス設定で定義できますが、使用されなければ非表示のままになります。
- 定義されたステージをデベロッパーがジョブ定義で使用すると、これらのステージが表示されます。
関連トピック:
- ジョブをより早い時点で開始し、ステージの順序を無視するには、
needsキーワードを使用する。
workflow
workflowを使用して、パイプラインの動作を制御します。
workflowの設定では、一部の定義済みCI/CD変数を使用できますが、ジョブの開始時にのみ定義される変数は使用できません。
関連トピック:
workflow:auto_cancel:on_new_commit
workflow:auto_cancel:on_new_commitを使用して、冗長なパイプラインを自動キャンセル機能の動作を設定します。
サポートされている値:
conservative: パイプラインをキャンセルします。ただし、interruptible: falseが設定されたジョブがまだ開始されていない場合に限ります。定義されていない場合は、この値がデフォルトです。interruptible:interruptible: trueが設定されたジョブのみをキャンセルします。none: ジョブは自動キャンセルされません。
workflow:auto_cancel:on_new_commitの例:
workflow:
auto_cancel:
on_new_commit: interruptible
job1:
interruptible: true
script: sleep 60
job2:
interruptible: false # Default when not defined.
script: sleep 60この例では:
- 新しいコミットがブランチにプッシュされると、GitLabは新しいパイプラインを作成し、
job1とjob2が開始されます。 - ジョブが完了する前に新しいコミットがブランチにプッシュされると、
job1のみがキャンセルされます。
workflow:auto_cancel:on_job_failure
workflow:auto_cancel:on_job_failureを使用して、いずれかのジョブが失敗した場合にキャンセルするジョブを設定します。
サポートされている値:
all: いずれかのジョブが失敗すると、パイプラインと実行中のすべてのジョブが直ちにキャンセルされます。none: ジョブは自動キャンセルされません。
workflow:auto_cancel:on_job_failureの例:
stages: [stage_a, stage_b]
workflow:
auto_cancel:
on_job_failure: all
job1:
stage: stage_a
script: sleep 60
job2:
stage: stage_a
script:
- sleep 30
- exit 1
job3:
stage: stage_b
script:
- sleep 30この例では、job2が失敗した場合、job1がまだ実行中であればキャンセルされ、job3は開始されません。
関連トピック:
workflow:name
workflow:でnameを使用して、パイプラインの名前を定義できます。
定義された名前はすべてのパイプラインに割り当てられます。名前の先頭または末尾のスペースは削除されます。
サポートされている値:
- 文字列。
- CI/CD変数。
- 両方の組み合わせ。
workflow:nameの例:
定義済み変数を使用した単純なパイプライン名:
workflow:
name: 'Pipeline for branch: $CI_COMMIT_BRANCH'パイプラインの条件に応じてパイプライン名が異なる設定:
variables:
PROJECT1_PIPELINE_NAME: 'Default pipeline name' # A default is not required
workflow:
name: '$PROJECT1_PIPELINE_NAME'
rules:
- if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-in-ruby3/'
variables:
PROJECT1_PIPELINE_NAME: 'Ruby 3 pipeline'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
variables:
PROJECT1_PIPELINE_NAME: 'MR pipeline: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME'
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # For default branch pipelines, use the default name補足情報:
- 名前が空の文字列の場合、パイプラインには名前が割り当てられません。CI/CD変数のみで構成された名前は、それらの変数もすべて空の場合、空の文字列と評価される可能性があります。
workflow:rules:variablesで定義された変数は、すべてのジョブで使用できるデフォルト変数になります。これには、デフォルトで変数をダウンストリームパイプラインに転送するtriggerジョブも含まれます。ダウンストリームパイプラインが同じ変数を使用する場合、アップストリーム変数の値によって変数が上書きされます。そのため、次のいずれかを必ず実施してください。- 各プロジェクトのパイプライン設定で一意の変数名を使用する(例:
PROJECT1_PIPELINE_NAME)。 - トリガージョブで
inherit:variablesを使用し、ダウンストリームパイプラインに転送する正確な変数をリストする。
- 各プロジェクトのパイプライン設定で一意の変数名を使用する(例:
workflow:rules
workflowにおけるrulesキーワードは、ジョブで定義されるrulesに似ていますが、パイプライン全体を作成するかどうかを制御します。
trueと評価されるルールがない場合、パイプラインは実行されません。
サポートされている値: ジョブレベルのrulesと同じキーワードの一部を使用できます。
rules: if。rules: changes。rules: exists。when。workflowとともに使用する場合はalwaysまたはneverのみ指定できます。variables。
workflow:rulesの例:
workflow:
rules:
- if: $CI_COMMIT_TITLE =~ /-draft$/
when: never
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCHこの例では、パイプラインが実行されるのは、コミットタイトル(コミットメッセージの1行目)が-draftで終わっておらず、パイプラインが次のいずれかに該当する場合です。
- マージリクエスト。
- デフォルトブランチ。
補足情報:
- ルールがブランチパイプライン(デフォルトブランチ以外)とマージリクエストパイプラインの両方に一致する場合、パイプラインが重複して作成される可能性があります。
start_in、allow_failure、needsは、workflow:rulesでサポートされていませんが、構文違反にはなりません。効果はありませんが、将来的に構文エラーを引き起こす可能性があるため、workflow:rulesでは使用しないでください。詳細については、イシュー436473を参照してください。
関連トピック:
workflow:rules:variables
workflow:rulesでvariablesを使用して、特定のパイプライン条件の変数を定義します。
条件が一致すると変数が作成されます。この変数は、パイプライン内のすべてのジョブで使用できます。すでにその変数がデフォルト変数としてトップレベルで定義されている場合でも、workflow変数が優先され、デフォルト変数はオーバーライドされます。
キーワードのタイプ: グローバルキーワード。
サポートされている値: 変数名と値のペア:
- 名前には数字、英字、アンダースコア(
_)のみを使用できます。 - 値は文字列でなければなりません。
workflow:rules:variablesの例:
variables:
DEPLOY_VARIABLE: "default-deploy"
workflow:
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
variables:
DEPLOY_VARIABLE: "deploy-production" # Override globally-defined DEPLOY_VARIABLE
- if: $CI_COMMIT_BRANCH =~ /feature/
variables:
IS_A_FEATURE: "true" # Define a new variable.
- if: $CI_COMMIT_BRANCH # Run the pipeline in other cases
job1:
variables:
DEPLOY_VARIABLE: "job1-default-deploy"
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
variables: # Override DEPLOY_VARIABLE defined
DEPLOY_VARIABLE: "job1-deploy-production" # at the job level.
- when: on_success # Run the job in other cases
script:
- echo "Run script with $DEPLOY_VARIABLE as an argument"
- echo "Run another script if $IS_A_FEATURE exists"
job2:
script:
- echo "Run script with $DEPLOY_VARIABLE as an argument"
- echo "Run another script if $IS_A_FEATURE exists"ブランチがデフォルトブランチの場合:
- job1の
DEPLOY_VARIABLEはjob1-deploy-productionです。 - job2の
DEPLOY_VARIABLEはdeploy-productionです。
ブランチがfeatureの場合:
- job1の
DEPLOY_VARIABLEはjob1-default-deployであり、IS_A_FEATUREはtrueです。 - job2の
DEPLOY_VARIABLEはdefault-deployであり、IS_A_FEATUREはtrueです。
ブランチがそれ以外の場合:
- job1の
DEPLOY_VARIABLEはjob1-default-deployです。 - job2の
DEPLOY_VARIABLEはdefault-deployです。
補足情報:
workflow:rules:variablesで定義された変数は、すべてのジョブで使用できるデフォルト変数になります。これには、デフォルトで変数をダウンストリームパイプラインに転送するtriggerジョブも含まれます。ダウンストリームパイプラインが同じ変数を使用する場合、アップストリーム変数の値によって変数が上書きされます。そのため、次のいずれかを必ず実施してください。- 各プロジェクトのパイプライン設定で一意の変数名を使用する(例:
PROJECT1_VARIABLE_NAME)。 - トリガージョブで
inherit:variablesを使用し、ダウンストリームパイプラインに転送する正確な変数をリストする。
- 各プロジェクトのパイプライン設定で一意の変数名を使用する(例:
workflow:rules:auto_cancel
workflow:rules:auto_cancelを使用して、workflow:auto_cancel:on_new_commit機能またはworkflow:auto_cancel:on_job_failure機能の動作を設定します。
サポートされている値:
on_new_commit:workflow:auto_cancel:on_new_commiton_job_failure:workflow:auto_cancel:on_job_failure
workflow:rules:auto_cancelの例:
workflow:
auto_cancel:
on_new_commit: interruptible
on_job_failure: all
rules:
- if: $CI_COMMIT_REF_PROTECTED == 'true'
auto_cancel:
on_new_commit: none
on_job_failure: none
- when: always # Run the pipeline in other cases
test-job1:
script: sleep 10
interruptible: false
test-job2:
script: sleep 10
interruptible: trueこの例では、デフォルトですべてのジョブのworkflow:auto_cancel:on_new_commitがinterruptibleに設定され、workflow:auto_cancel:on_job_failureがallに設定されます。ただし、保護ブランチに対してパイプラインが実行される場合、ルールはデフォルトをon_new_commit: noneとon_job_failure: noneでオーバーライドします。たとえば、パイプラインの実行対象によって、動作は次のように変わります。
- 保護されていないブランチに対して実行される場合、新しいコミットがプッシュされると、
test-job1の実行が継続され、test-job2はキャンセルされます。 - 保護ブランチに対して実行される場合、新しいコミットがプッシュされると、
test-job1とtest-job2の両方の実行が継続されます。
ヘッダーキーワード
いくつかのキーワードは、YAML設定ファイルのヘッダーセクションで定義する必要があります。ヘッダーはファイルの先頭に配置し、設定の他の部分と---で区切る必要があります。
spec
YAMLファイルのヘッダーにspecセクションを追加すると、includeキーワードを使用して設定がパイプラインに追加されたときのパイプラインの動作を設定できます。
仕様は設定ファイルの先頭にあるヘッダーセクションで宣言する必要があります。このセクションは、設定の他の部分と---で区切られています。
spec:inputs
spec:inputsを使用して、CI/CD設定に対するインプットを定義できます。
ヘッダーセクションの外部でその値を参照するには、補間形式$[[ inputs.input-id ]]を使用します。インプットは、パイプライン作成時に設定がフェッチされる際に評価および補間されます。inputsを使用すると、設定が.gitlab-ci.ymlファイルの内容とマージされる前に補間が完了します。
キーワードのタイプ: ヘッダーキーワード。specは、設定ファイルの先頭にあるヘッダーセクションで宣言する必要があります。
サポートされている値: 予期される入力を表す文字列のハッシュ。
spec:inputsの例:
spec:
inputs:
environment:
job-stage:
---
scan-website:
stage: $[[ inputs.job-stage ]]
script: ./scan-website $[[ inputs.environment ]]補足情報:
spec:inputs:defaultを使用してデフォルト値を設定しない限り、入力は必須です。include:inputsと組み合わせてインプットを使用する場合を除き、インプットを必須にするのは避けることをおすすめします。- インプットは文字列を想定しています。ただし、
spec:inputs:typeを使用して別の型を指定する場合を除きます。 - 補間ブロックを含む文字列は、1 MB以下にする必要があります。
- 補間ブロック内の文字列は、1 KB以下にする必要があります。
- 入力値は新しいパイプラインの実行時に定義できます。
関連トピック:
spec:inputs:default
spec:inputs:defaultを使用してデフォルト値を設定しない限り、仕様に含まれるインプットはすべて必須になります。
デフォルト値を設定しない場合はdefault: ''を使用します。
キーワードのタイプ: ヘッダーキーワード。specは、設定ファイルの先頭にあるヘッダーセクションで宣言する必要があります。
サポートされている値: デフォルト値を表す文字列、または''。
spec:inputs:defaultの例:
spec:
inputs:
website:
user:
default: 'test-user'
flags:
default: ''
---
# The pipeline configuration would follow...この例では:
websiteは必須であり、定義する必要があります。userはオプションです。定義されていない場合、値はtest-userになります。flagsはオプションです。定義されていない場合、値はありません。
補足情報:
- インプットが次の条件に該当する場合、パイプラインは検証エラーで失敗します。
spec:inputs:description
descriptionを使用して、特定の入力に説明を付けます。説明はインプットの動作に影響を与えません。ファイルのユーザーがインプットを理解できるようにする目的でのみ使用されます。
キーワードのタイプ: ヘッダーキーワード。specは、設定ファイルの先頭にあるヘッダーセクションで宣言する必要があります。
サポートされている値: 説明を表す文字列。
spec:inputs:descriptionの例:
spec:
inputs:
flags:
description: 'Sample description of the `flags` input details.'
---
# The pipeline configuration would follow...spec:inputs:options
インプットでoptionsを使用して、インプットに許可される値のリストを指定できます。各入力に指定できるオプションの数は、最大50個までです。
キーワードのタイプ: ヘッダーキーワード。specは、設定ファイルの先頭にあるヘッダーセクションで宣言する必要があります。
サポートされている値: 入力オプションの配列。文字列と数値のtype入力のみをオプションで使用できます。
spec:inputs:optionsの例:
spec:
inputs:
environment:
options:
- development
- staging
- production
---
# The pipeline configuration would follow...この例では:
environmentは必須であり、リスト内のいずれかの値で定義する必要があります。
補足情報:
- 次の場合、パイプラインは検証エラーで失敗します。
spec:inputs:regex
spec:inputs:regexを使用して、入力が一致する必要がある正規表現を指定します。
キーワードのタイプ: ヘッダーキーワード。specは、設定ファイルの先頭にあるヘッダーセクションで宣言する必要があります。
サポートされている値: 正規表現である必要があります。
spec:inputs:regexの例:
spec:
inputs:
version:
regex: ^v\d\.\d+(\.\d+)?$
---
# The pipeline configuration would follow...この例では、v1.0またはv1.2.3の入力は正規表現に一致し、検証に合格します。v1.A.B の入力v1.0は正規表現v1.0と一致せず、検証v1.0`に失敗します。
補足情報:
inputs:regexは、typeがstringの場合にのみ使用できます。numberまたはbooleanの場合は使用できません。/文字で正規表現を囲まないでください。たとえば、/regex.*/ではなくregex.*を使用します。inputs:regexはRE2を使用して正規表現を解析します。- 正規表現に対する入力の検証は、変数の展開前に行われます。入力テキストに変数の名前が含まれている場合、検証されるのは変数の値ではなく、入力のraw値(変数の名前)です。
spec:inputs:rules
spec:inputs:rulesを使用して、他の入力の値に基づいて、入力の条件付きのoptionsとdefaultの値を定義します。
キーワードのタイプ: ヘッダーキーワード。specは、設定ファイルの先頭にあるヘッダーセクションで宣言する必要があります。
サポートされている値: ルールオブジェクトの配列。各ルールには以下を含めることができます:
if:$[[ inputs.input-id ]]構文を使用して、入力値をチェックする条件式。options: 入力に対して許可される値の配列。default: このルールに一致した場合の入力のデフォルト値。default: nullを使用して、ユーザーが入力に独自の値エントリを入力できるようにします。
spec:inputs:rulesの例:
spec:
inputs:
environment:
options: ['development', 'production']
default: 'development'
instance_type:
description: 'VM instance size'
rules:
- if: $[[ inputs.environment ]] == 'development'
options: ['small', 'medium']
default: 'small'
- if: $[[ inputs.environment ]] == 'production'
options: ['large', 'xlarge']
default: 'large'
---
deploy:
script: echo "Deploying $[[ inputs.instance_type ]] instance"この例では、environmentがdevelopmentの場合、ユーザーはsmallまたはmediumインスタンスのみを選択できます。environmentがproductionの場合、largeまたはxlargeインスタンスのみ使用できます。
補足情報:
- ルールは順番に評価されます。一致する
if条件を持つ最初のルールが使用されます。 if条件のないルールは、他のルールが一致しない場合にフォールバックとして機能します。- フォールバックルールは、少なくとも1つの値で
optionsを定義する必要があります。 optionsを持つすべてのルールは、optionsリストに存在するdefault値も定義する必要があります。- 同じ入力に対して、
rulesとトップレベルのoptionsまたはdefaultの両方を使用することはできません。
関連トピック:
spec:inputs:type
デフォルトでは、入力は文字列を想定しています。spec:inputs:typeを使用すると、入力に必要な別の型を指定できます。
キーワードのタイプ: ヘッダーキーワード。specは、設定ファイルの先頭にあるヘッダーセクションで宣言する必要があります。
サポートされている値: 次のいずれかです。
array: 入力の配列を受け入れます。string: 文字列のインプットを受け入れます(定義されていない場合のデフォルト)。number: 数値の入力のみを受け入れます。boolean:trueまたはfalseの入力のみを受け入れます。
spec:inputs:typeの例:
spec:
inputs:
job_name:
website:
type: string
port:
type: number
available:
type: boolean
array_input:
type: array
---
# The pipeline configuration would follow...spec:include
spec:includeを使用して、他のファイルから外部入力定義を含めます。複数のパイプライン設定で入力定義を共有して再利用できます。
キーワードのタイプ: ヘッダーキーワード。specは、設定ファイルの先頭にあるヘッダーセクションで宣言する必要があります。
サポートされている値: インクルード場所の配列。local、remote、およびprojectインクルードのみをサポートします。
spec:includeの例:
spec:
include:
- local: /shared-inputs.yml
inputs:
environment:
default: production
---
deploy:
script: echo "Deploying to $[[ inputs.environment ]]"異なるソースからの複数のインクルードの場合:
spec:
include:
- local: /base-inputs.yml
- remote: 'https://example.com/ci/common-inputs.yml'
- project: 'my-group/shared-configs'
ref: main
file: '/ci/team-inputs.yml'
inputs:
environment:
default: production
---
deploy:
script: echo "Deploying to $[[ inputs.environment ]]"補足情報:
- CI/CDコンポーネントで
spec:includeを使用することはできません。 - 外部入力ファイルには、
inputsキーのみが含まれている必要があります。他のキーは検証エラーを引き起こします。 - 最初に外部入力がマージされ、次にインライン入力が適用されます。
- インライン入力は、同じ名前の外部入力よりも優先されます。
- 複数の入力ファイルを含める場合、指定された順序でマージされます。
local、remote、およびprojectインクルードタイプをサポートします。template、component、またはartifactインクルードはサポートされていません。
関連トピック:
spec:component
spec:componentを使用して、CI/CDコンポーネントで補間に使用できるコンポーネントコンテキストデータを定義します。
コンポーネントコンテキストは、コンポーネント自体のメタデータ(名前、バージョン、コミットSHAなど)を提供します。これにより、コンポーネントテンプレートが独自のメタデータを動的に参照できるようになります。
補間形式$[[ component.field-name ]]を使用して、コンポーネントテンプレートでコンポーネントコンテキスト値を参照します。
キーワードのタイプ: ヘッダーキーワード。specは、設定ファイルの先頭にあるヘッダーセクションで宣言する必要があります。
サポートされている値: 文字列の配列。各文字列は、次のいずれかである必要があります:
name: コンポーネントパスで指定されているコンポーネント名。sha: コンポーネントのコミットSHA。version: カタログリソースから解決されたセマンティックバージョン。次の場合にnullを返します:- コンポーネントがカタログリソースではない。
- 参照がブランチ名またはコミットSHA(リリースされたバージョンではない)である。
reference: コンポーネントパスの@の後に指定された元の参照。たとえば、1.0、~latest、ブランチ名、またはコミットSHA。
spec:componentの例:
spec:
component: [name, version, reference]
inputs:
image_tag:
default: latest
---
build-image:
image: registry.example.com/$[[ component.name ]]:$[[ component.version ]]
script:
- echo "Building with component version $[[ component.version ]]"
- echo "Component reference: $[[ component.reference ]]"補足情報:
versionフィールドは、以下を使用する場合に実際のセマンティックバージョンに解決されます:@1.0.0のような完全なバージョン(1.0.0を返します)@1.0のような部分的なバージョン(たとえば、1.0.2のように、一致する最新のバージョンを返します)@~latest(最新のバージョンを返します)
referenceフィールドは、@の後に指定された正確な値を常に返します:@1.0は1.0を返します(versionが1.0.2を返す場合があります)@~latestは~latestを返します(versionは実際のバージョン番号を返します)@abc123はabc123を返します(versionがnullを返す場合)
関連トピック:
ジョブキーワード
以降のトピックでは、キーワードを使用してCI/CDパイプラインを設定する方法について説明します。
after_script
after_scriptを使用して、ジョブのbefore_scriptセクションとscriptセクションの完了後に最後に実行するコマンドの配列を定義します。after_scriptのコマンドは、次の条件に該当する場合にも実行されます。
before_scriptセクションまたはscriptセクションの実行中に、ジョブがキャンセルされた場合。- ジョブで
script_failureという種類の失敗が発生した場合(ただし、それ以外の種類の失敗では実行されません)。
ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインにdefault:after_scriptが定義されていて、ジョブにもafter_scriptがある場合、ジョブの設定が優先され、デフォルト設定は使用されません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値: 次の内容を含む配列。
CI/CD変数がサポートされています。
after_scriptの例:
job:
script:
- echo "An example script section."
after_script:
- echo "Execute this command after the `script` section completes."補足情報:
after_scriptで指定するスクリプトは、before_scriptコマンドまたはscriptコマンドとは別のShellで実行されます。その結果、スクリプトは次のようになります。
- 現在のワーキングディレクトリがデフォルトにリセットされます(デフォルト値は、RunnerがGitリクエストをどのように処理するかを定義する変数に基づいて決まります)。
before_scriptまたはscriptで定義されたコマンドによる変更にはアクセスできません。これには以下が含まれます。scriptスクリプトでエクスポートされたコマンドエイリアスと変数。- ワークツリー外の変更(Runnerのexecutorによってアクセス可否が異なります)。たとえば、
before_scriptまたはscriptスクリプトによってインストールされたソフトウェアなどが該当します。
- 個別のタイムアウトが設定されます。GitLab Runner 16.4以降では、デフォルトは5分で、
RUNNER_AFTER_SCRIPT_TIMEOUT変数で設定できます。GitLab 16.3以前では、タイムアウトは5分にハードコードされています。 - ジョブの終了コードには影響しません。
scriptセクションが成功し、after_scriptがタイムアウトになるか失敗した場合、ジョブはコード0(Job Succeeded)で終了します。 after_scriptでCI/CDジョブトークンを使用する場合の既知の問題があります。after_scriptコマンドでの認証にジョブトークンを使用することはできますが、ジョブがキャンセルされるとそのトークンは直ちに無効になります。詳細については、イシューを参照してください。- ジョブがタイムアウトした場合:
after_scriptコマンドはデフォルトでは実行されません。- タイムアウト値を設定することで、
after_scriptを確実に実行させることができます。そのためには、ジョブのタイムアウトを超えないように、RUNNER_SCRIPT_TIMEOUTとRUNNER_AFTER_SCRIPT_TIMEOUTに適切な値を設定します。
- トップレベルで
after_scriptを使用しても、defaultセクションでは使用しない場合、非推奨になります。
Execution timing and file inclusion:
after_scriptコマンドは、キャッシュおよびアーティファクトのアップロード操作の前に実行されます。
- アーティファクトコレクションを構成した場合:
after_scriptで作成または変更されたファイルは、アーティファクトに含まれます。after_scriptで行われた変更は、キャッシュのアップロードに含まれます。
after_scriptが指定されたキャッシュまたはアーティファクトパスで作成または変更するファイルはすべてキャプチャされ、アップロードされます。このタイミングは、次のようなシナリオに使用できます:- メインスクリプトの後にテストレポートまたはカバレッジデータを生成する。
- サマリーファイルまたはログを作成する。
- ビルド出力のポスト処理。
次の例では、含まれていないファイルは、アーティファクトまたはキャッシュのアップロードステージの後に作成または変更されたファイルのみです:
job:
script:
- echo "main" > output.txt
- build_something
after_script:
- echo "modified in after_script" >> output.txt # This WILL be in the artifact
- generate_test_report > report.html # This WILL be in the artifact
artifacts:
paths:
- output.txt
- report.html
cache:
paths:
- output.txt # Will include the "modified in after_script" line詳細については、ジョブ実行フローを参照してください。
関連トピック:
after_scriptをdefaultと組み合わせて使用すると、すべてのジョブの後に実行されるコマンドのデフォルト配列を定義できます。- ジョブがキャンセルされた場合に
after_scriptコマンドをスキップするようにジョブを設定できます。 - ゼロ以外の終了コードを無視できます。
after_scriptでカラーコードを使用すると、ジョブログのレビューが容易になります。- カスタムの折りたたみ可能なセクションを作成して、ジョブログ出力をシンプルにできます。
after_scriptのエラーを無視できます。
allow_failure
allow_failureを使用して、ジョブが失敗した場合にパイプラインの実行を継続するかどうかを決定します。
- パイプラインで後続のジョブを継続して実行させるには、
allow_failure: trueを使用します。 - パイプラインで後続のジョブの実行を停止させるには、
allow_failure: falseを使用します。
ジョブの失敗が許容されている場合(allow_failure: true)、オレンジ色の警告( )はジョブが失敗したことを示します。ただしパイプラインは成功し、関連するコミットは警告なしで成功としてマークされます。
このような警告は、次の場合に表示されます。
- ステージ内の他のすべてのジョブが成功した場合。
- パイプライン内の他のすべてのジョブが成功した場合。
allow_failureのデフォルト値は次のとおりです。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
trueまたはfalse。
allow_failureの例:
job1:
stage: test
script:
- execute_script_1
job2:
stage: test
script:
- execute_script_2
allow_failure: true
job3:
stage: deploy
script:
- deploy_to_staging
environment: stagingこの例では、job1とjob2は並列実行されます。
job1が失敗した場合、deployステージのジョブは開始されません。job2が失敗した場合、deployステージのジョブは開始できます。
補足情報:
allow_failureをrulesのサブキーとして使用できます。allow_failure: trueが設定されている場合、そのジョブは常に成功と見なされます。そのため、そのジョブが失敗しても、when: on_failureが設定された後続のジョブは開始されません。- 手動ジョブに
allow_failure: falseを設定することで、ブロック手動ジョブを作成できます。ブロックされたパイプラインは、その手動ジョブが開始されて正常に完了するまで、後続ステージのジョブを実行しません。
allow_failure:exit_codes
allow_failure:exit_codesを使用して、ジョブの失敗を許容する条件を制御します。ジョブは、リストされた終了コードのいずれかの場合はallow_failure: true、それ以外の終了コードに対してはallow_failureがfalseとなります。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- 1つの終了コード。
- 終了コードの配列。
allow_failureの例:
test_job_1:
script:
- echo "Run a script that results in exit code 1. This job fails."
- exit 1
allow_failure:
exit_codes: 137
test_job_2:
script:
- echo "Run a script that results in exit code 137. This job is allowed to fail."
- exit 137
allow_failure:
exit_codes:
- 137
- 255artifacts
artifactsを使用して、ジョブアーティファクトとして保存するファイルを指定します。ジョブアーティファクトは、ジョブが成功した場合、失敗した場合、または常に、ジョブに添付されるファイルとディレクトリのリストです。
アーティファクトは、ジョブの完了後にGitLabに送信されます。サイズが最大アーティファクトサイズよりも小さい場合、GitLab UIでダウンロードできます。
デフォルトでは、後続ステージのジョブは、前のステージのジョブによって作成されたすべてのアーティファクトを自動的にダウンロードします。dependenciesを使用すると、ジョブにおけるアーティファクトのダウンロード動作を制御できます。
needsキーワードを使用している場合、ジョブはneeds設定で定義されたジョブからのみアーティファクトをダウンロードできます。
デフォルトでは、成功したジョブのジョブアーティファクトのみが収集されます。キャッシュが復元された後に、アーティファクトが復元されます。
ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインにdefault:artifactsが定義されていて、ジョブにもartifactsがある場合、ジョブの設定が優先され、デフォルト設定は使用されません。
artifacts:paths
パスはプロジェクトディレクトリ($CI_PROJECT_DIR)を基準にした相対パスであり、プロジェクトディレクトリの外部に直接リンクすることはできません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- プロジェクトディレクトリを基準にしたファイルパスの配列。
- globパターンおよび
doublestar.Globパターンを使用するワイルドカードを使用できます。 - GitLab Pagesジョブの場合:
- GitLab 17.10以降では、
pages.publishパスは自動的にartifacts:pathsに付加されるため、再度指定する必要はありません。 - GitLab 17.10以降では、
pages.publishパスが指定されていない場合、publicディレクトリが自動的にartifacts:pathsに付加されます。
- GitLab 17.10以降では、
CI/CD変数がサポートされています。
artifacts:pathsの例:
job:
artifacts:
paths:
- binaries/
- .configこの例では、.configと、binariesディレクトリ内にあるすべてのファイルを含むアーティファクトを作成します。
補足情報:
artifacts:nameと組み合わせて使用しない場合、アーティファクトファイルの名前はartifactsになり、ダウンロード時にartifacts.zipになります。
関連トピック:
- 特定のジョブがどのジョブからアーティファクトをフェッチするかを制限するには、
dependenciesを参照してください。 - ジョブアーティファクトを作成する。
artifacts:exclude
artifacts:excludeを使用して、ファイルがアーティファクトアーカイブに追加されないようにします。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- プロジェクトディレクトリを基準にしたファイルパスの配列。
- globパターンまたは
doublestar.PathMatchパターンを使用するワイルドカードを使用できます。
artifacts:excludeの例:
artifacts:
paths:
- binaries/
exclude:
- binaries/**/*.oこの例では、binaries/内のすべてのファイルが保存されますが、binaries/以下のサブディレクトリにある*.oファイルは保存されません。
補足情報:
artifacts:excludeで指定されたパスは再帰的には検索されません。artifacts:untrackedで一致したファイルもartifacts:excludeを使用して除外できます。
関連トピック:
artifacts:expire_in
expire_inを使用して、ジョブアーティファクトが期限切れになり削除されるまでに保存される期間を指定します。expire_inの設定は、以下には影響しません。
期限が切れたアーティファクトは、デフォルトでは毎時(cronジョブを使用して)削除され、アクセスできなくなります。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値: 有効期間。単位が指定されていない場合は秒単位です。有効な値の例は以下のとおりです。
'42'42 seconds3 mins 4 sec2 hrs 20 min2h20min6 mos 1 day47 yrs 6 mos and 4d3 weeks and 2 daysnever
artifacts:expire_inの例:
job:
artifacts:
expire_in: 1 week補足情報:
- 有効期間は、アーティファクトがGitLabにアップロードされて保存された時点から始まります。有効期間が定義されていない場合は、インスタンス全体の設定がデフォルトで使用されます。
- 有効期間をオーバーライドし、アーティファクトが自動的に削除されないように保護するには、次のようにします。
- ジョブページで維持を選択します。
expire_inの値をneverに設定します。
- 有効期間が短すぎると、長いパイプラインの後半のステージにあるジョブが、前半のジョブから期限切れのアーティファクトをフェッチしようとする可能性があります。アーティファクトが期限切れになっている場合、それらをフェッチしようとしたジョブは
could not retrieve the needed artifactsエラーで失敗します。有効期間を長く設定するか、後続のジョブでdependenciesを使用して、期限切れのアーティファクトをフェッチしないようにしてください。 artifacts:expire_inは、GitLab Pagesのデプロイには影響しません。Pagesのデプロイの有効期間を設定するには、pages.expire_inを使用します。
artifacts:expose_as
artifacts:expose_asキーワードを使用して、マージリクエストUIでアーティファクトを公開します。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- マージリクエストUIに表示する、アーティファクトのダウンロードリンクの名前。
artifacts:pathsと組み合わせて使用する必要があります。
artifacts:expose_asの例:
test:
script: ["echo 'test' > file.txt"]
artifacts:
expose_as: 'artifact 1'
paths: ['file.txt']補足情報:
- マージリクエストごとに最大10個のジョブで、
expose_asをジョブごとに1回だけ使用できます。 - Globパターンはサポートされていません。
- アーティファクトは常にGitLabに送信されます。
artifacts:paths値がない限り、UIに表示されます:- CI/CD変数を使用している。
- ディレクトリを定義しているが、パスの末尾が
/ではない。たとえば、artifacts:expose_asでdirectory/は機能しますが、directoryは機能しません。
artifacts:pathsに単一のファイルのみが含まれている場合、リンクはそのファイルを直接開きます。それ以外の場合はすべて、リンクはアーティファクトブラウザーを開きます。- リンクされたファイルはデフォルトでダウンロードされます。GitLab Pagesが有効になっている場合は、ブラウザで一部のアーティファクトのファイル拡張子を直接プレビューできます。詳細については、アーティファクトアーカイブの内容の参照を参照してください。
関連トピック:
artifacts:name
artifacts:nameキーワードを使用して、作成されたアーティファクトアーカイブの名前を定義します。アーカイブごとに一意の名前を指定できます。
定義されていない場合、デフォルトの名前はartifactsであり、ダウンロード時にartifacts.zipになります。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- アーティファクトアーカイブの名前。CI/CD変数がサポートされています。
artifacts:pathsと組み合わせて使用する必要があります。
artifacts:nameの例:
現在のジョブの名前でアーカイブを作成するには:
job:
artifacts:
name: "job1-artifacts-file"
paths:
- binaries/関連トピック:
artifacts:public
artifacts:publicを使用して、パブリックパイプライン内のジョブアーティファクトが匿名ユーザー、またはゲストロールとレポーターロールによってGitLab UIおよびAPIでダウンロードできるかどうかを制御します。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
true(デフォルト): パブリックパイプラインのジョブのアーティファクトは、匿名ユーザー、またはゲストロールとレポーターロールを含む、誰でもダウンロードできます。false: ジョブ内のアーティファクトは、少なくともデベロッパーロールを持つユーザーのみがダウンロードできます。
artifacts:publicの例:
job:
artifacts:
public: falseartifacts:access
artifacts:accessを使用して、GitLab UIまたはAPIからジョブアーティファクトにアクセスできるユーザーを決定します。このオプションを使用しても、アーティファクトをダウンストリームパイプラインに転送できなくなることはありません。
同じジョブ内でartifacts:publicとartifacts:accessを併用することはできません。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
all(デフォルト): 公開パイプラインのジョブのアーティファクトは、匿名ユーザー、ゲストユーザー、レポーターユーザーなど誰でもダウンロードできます。developer: ジョブ内のアーティファクトは、少なくともデベロッパーロールを持つユーザーのみがダウンロードできます。maintainer: ジョブ内のアーティファクトは、少なくともメンテナーロールを持つユーザーのみがダウンロードできます。none: 誰もジョブのアーティファクトをダウンロードできません。
artifacts:accessの例:
job:
artifacts:
access: 'developer'補足情報:
artifacts:accessはすべてのartifacts:reportsにも影響するため、レポートのアーティファクトへのアクセスを制限することもできます。
artifacts:reports
artifacts:reportsを使用して、ジョブにインクルードされたテンプレートによって生成されたアーティファクトを収集します。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- 利用可能なアーティファクトレポートのタイプのリストを参照してください。
artifacts:reportsの例:
rspec:
stage: test
script:
- bundle install
- rspec --format RspecJunitFormatter --out rspec.xml
artifacts:
reports:
junit: rspec.xml補足情報:
- 子パイプラインからのアーティファクトを使用して、親パイプラインでレポートを組み合わせる操作はサポートされていません。サポートの追加については、このイシューで進捗を追跡できます。
- レポートの出力ファイルを参照してダウンロードできるようにするには、
artifacts:pathsキーワードを含めます。これにより、アーティファクトのアップロードと保存が2回実行されます。 artifacts: reportsのために作成されたアーティファクトは、ジョブの結果(成功または失敗)にかかわらず、常にアップロードされます。artifacts:expire_inを使用して、アーティファクトの有効期限を設定できます。
artifacts:untracked
artifacts:untrackedを使用して、(artifacts:pathsで定義されたパスとともに)すべての追跡していないGitファイルをアーティファクトとして追加します。artifacts:untrackedはリポジトリの.gitignoreの設定を無視するため、.gitignore内の一致するアーティファクトがインクルードされます。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
trueまたはfalse(定義されていない場合はデフォルト)。
artifacts:untrackedの例:
追跡していないGitファイルをすべて保存します。
job:
artifacts:
untracked: true関連トピック:
artifacts:when
artifacts:whenを使用して、ジョブの失敗時、または失敗にかかわらずアーティファクトをアップロードします。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
on_success(デフォルト): ジョブが成功した場合にのみアーティファクトをアップロードします。on_failure: ジョブが失敗した場合にのみアーティファクトをアップロードします。always: 常にアーティファクトをアップロードします(ジョブがタイムアウトになった場合を除く)。たとえば、失敗したテストの問題解決に必要なアーティファクトをアップロードする場合などです。
artifacts:whenの例:
job:
artifacts:
when: on_failure補足情報:
artifacts:reportsで作成されたアーティファクトは、ジョブの結果(成功または失敗)に関係なく常にアップロードされます。artifacts:whenはこの動作を変更しません。
before_script
before_scriptを使用して、アーティファクトが復元された後、各ジョブのscriptコマンドの前に実行するコマンドの配列を定義します。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値: 次の内容を含む配列。
CI/CD変数がサポートされています。
before_scriptの例:
job:
before_script:
- echo "Execute this command before any 'script:' commands."
script:
- echo "This command executes after the job's 'before_script' commands."補足情報:
before_scriptで指定したスクリプトが、メインのscriptで指定したスクリプトと連結されます。連結されたスクリプトは、1つのShellでまとめて実行されます。before_scriptをdefaultセクションではなくトップレベルで使用することは、非推奨です。
関連トピック:
before_scriptをdefaultと組み合わせて使用すると、すべてのジョブでscriptコマンドの前に実行されるコマンドのデフォルトの配列を定義できます。- ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインに
default:before_scriptが定義されていて、ジョブにもbefore_scriptがある場合、ジョブの設定が優先され、デフォルト設定は使用されません。
- ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインに
- ゼロ以外の終了コードを無視できます。
before_scriptでカラーコードを使用すると、ジョブログのレビューが容易になります。- カスタムの折りたたみ可能なセクションを作成して、ジョブログ出力をシンプルにできます。
cache
cacheを使用して、ジョブ間でキャッシュするファイルとディレクトリのリストを指定します。ローカルの実行コピーにあるパスのみを使用できます。
キャッシュは次のようになります。
特定のジョブのキャッシュを無効にできます。たとえば、以下をオーバーライドする場合です。
ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインにdefault:cacheが定義されていて、ジョブにもcacheがある場合、ジョブの設定が優先され、デフォルト設定は使用されません。
キャッシュの詳細については、GitLab CI/CDでのキャッシュを参照してください。
トップレベルでcacheを使用しても、defaultセクションでは使用しない場合、非推奨になります。
cache:paths
cache:pathsキーワードを使用して、キャッシュするファイルまたはディレクトリを選択します。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- プロジェクトディレクトリ(
$CI_PROJECT_DIR)を基準にしたパスの配列。globパターンおよびdoublestar.Globパターンを使用するワイルドカードを使用できます。
CI/CD変数がサポートされています。
cache:pathsの例:
binariesにある.apkで終わるすべてのファイルと、.configファイルをキャッシュします。
rspec:
script:
- echo "This job uses a cache."
cache:
key: binaries-cache
paths:
- binaries/*.apk
- .config補足情報:
cache:pathsキーワードでは、追跡していないファイルや.gitignoreファイルに記載されているファイルもキャッシュの対象になります。
関連トピック:
- 詳細な
cache:paths例については、CI/CDキャッシュの例を参照してください。
cache:key
cache:keyキーワードを使用して、各キャッシュに一意の識別キーを指定します。同じキャッシュキーを使用するすべてのジョブは、異なるパイプラインでも同じキャッシュを使用します。
設定されていない場合のデフォルトのキーはdefaultです。cacheキーワードを指定していてもcache:keyを指定していないジョブはすべて、defaultキャッシュを共有します。
cache: pathsと組み合わせて使用する必要があります。そうしないと、何もキャッシュされません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- 文字列。
- 定義済みCI/CD変数。
- 両方の組み合わせ。
cache:keyの例:
cache-job:
script:
- echo "This job uses a cache."
cache:
key: binaries-cache-$CI_COMMIT_REF_SLUG
paths:
- binaries/補足情報:
Windowsバッチを使用してShellスクリプトを実行する場合は、
$を%に置き換える必要があります。例:key: %CI_COMMIT_REF_SLUG%cache:keyの値に次の文字を含めることはできません。/、またはそのURIエンコード形式である%2F。.のみ(任意の数)、またはそのURIエンコード形式である%2E。
キャッシュはジョブ間で共有されるため、ジョブごとに異なるパスを使用している場合は、それぞれ異なる
cache:keyも設定する必要があります。そうしないと、キャッシュの内容が上書きされる可能性があります。
関連トピック:
- 指定された
cache:keyが見つからない場合に使用するフォールバックキャッシュキーを指定できます。 - 1つのジョブで複数のキャッシュキーを使用できます。
- 詳細な
cache:key例については、CI/CDキャッシュの例を参照してください。
cache:key:files
指定されたファイルの内容が変更されたときに、cache:key:filesを使用して新しいキャッシュキーを生成します。コンテンツが変更されない場合、キャッシュキーはブランチおよびパイプライン全体で一貫性を保ちます。キャッシュを再利用して再構築する頻度を減らすことができるため、後続のパイプラインの実行が高速化されます。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- 最大2つのファイルパスまたはパターンの配列。
CI/CD変数はサポートされていません。
cache:key:filesの例:
cache-job:
script:
- echo "This job uses a cache."
cache:
key:
files:
- Gemfile.lock
- package.json
paths:
- vendor/ruby
- node_modulesこの例では、RubyとNode.jsの依存関係のキャッシュを作成します。キャッシュは、Gemfile.lockファイルとpackage.jsonファイルの現行バージョンに関連付けられています。これらのファイルのいずれかが変更されると、新しいキャッシュキーが計算され、新しいキャッシュが作成されます。後続のジョブの実行でcache:key:filesが使用され、同じGemfile.lockおよびpackage.jsonを参照している場合には、依存関係を再構築せずに新しいキャッシュが使用されます。
補足情報:
- キャッシュ
keyは、リストされたファイルの内容から計算されたSHAです。ファイルが存在しない場合、キーの計算では無視されます。指定されたファイルが存在しない場合、フォールバックキーはdefaultです。 **/package.jsonなどのワイルドカードパターンを使用できます。キャッシュキーに指定できるパスまたはパターンの数を増やすためのイシューが存在します。
cache:key:files_commits
指定されたファイルの最新のコミットが変更されたときに、cache:key:files_commitsを使用して新しいキャッシュキーを生成します。cache:key:files_commitsキャッシュキーは、ファイルの内容が同一のままであっても、指定されたファイルに新しいコミットがある場合は常に変更されます。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- 最大2つのファイルパスまたはパターンの配列。
cache:key:files_commitsの例:
cache-job:
script:
- echo "This job uses a commit-based cache."
cache:
key:
files_commits:
- package.json
- yarn.lock
paths:
- node_modulesこの例では、package.jsonとyarn.lockのコミット履歴に基づいてキャッシュを作成します。これらのファイルのコミット履歴が変更された場合、新しいキャッシュキーが計算され、新しいキャッシュが作成されます。
補足情報:
- キャッシュ
keyは、指定されたファイルごとに最新のコミットから計算されたSHAです。 - ファイルが存在しない場合、キーの計算では無視されます。
- 指定されたファイルが存在しない場合、フォールバックキーは
defaultです。 - 同じキャッシュ構成で
cache:key:filesと一緒に使用することはできません。
cache:key:prefix
cache:key:prefixを使用して、cache:key:filesで計算されたSHAとプレフィックスを組み合わせます。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- 文字列。
- 定義済みCI/CD変数。
- 両方の組み合わせ。
cache:key:prefixの例:
rspec:
script:
- echo "This rspec job uses a cache."
cache:
key:
files:
- Gemfile.lock
prefix: $CI_JOB_NAME
paths:
- vendor/rubyたとえば$CI_JOB_NAMEというprefixを追加すると、キーはrspec-feef9576d21ee9b6a32e30c5c79d0a0ceb68d1e5のようになります。ブランチでGemfile.lockが変更されると、そのブランチにはcache:key:filesに対する新しいSHAチェックサムが設定されます。これにより、新しいキャッシュキーが生成され、そのキーに対する新しいキャッシュが作成されます。Gemfile.lockが見つからない場合、defaultにプレフィックスが追加されます。この例では、キーはrspec-defaultになります。
補足情報:
cache:key:filesに指定されたファイルがコミットで変更されていない場合は、defaultキーにプレフィックスが追加されます。
cache:untracked
untracked: trueを使用して、Gitリポジトリで追跡していないすべてのファイルをキャッシュします。追跡していないファイルには、次のファイルが含まれます。
.gitignore設定が原因で無視されているファイル。- 作成されたが、
git addでステージングされていないファイル。
追跡していないファイルをキャッシュすると、ジョブが次のようなものをダウンロードした際に、予期せず大きなキャッシュが作成される可能性があります。
- 通常は追跡されない依存関係(gemやノードモジュールなど)。
- 別のジョブからのアーティファクト。デフォルトでは、アーティファクトから抽出されたファイルは追跡されません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
trueまたはfalse(デフォルト)。
cache:untrackedの例:
rspec:
script: test
cache:
untracked: true補足情報:
cache:untrackedとcache:pathsを組み合わせて指定すると、追跡していないすべてのファイルと、設定されたパス内のファイルをキャッシュできます。cache:pathsは、追跡したファイルや作業ディレクトリの外部にあるファイルを含む、特定のファイルをキャッシュするために使用します。cache: untrackedを使用することで、追跡していないファイルもすべてキャッシュすることができます。例:rspec: script: test cache: untracked: true paths: - binaries/この例では、ジョブはリポジトリ内の追跡していないすべてのファイルと、
binaries/内のすべてのファイルをキャッシュします。binaries/内に追跡していないファイルがある場合、それらはこの両方のキーワードでカバーされます。
cache:unprotect
cache:unprotectを使用して、保護ブランチと保護されていないブランチの間でキャッシュが共有されるように設定します。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
trueまたはfalse(デフォルト)。
cache:unprotectの例:
rspec:
script: test
cache:
unprotect: truecache:when
cache:whenを使用して、ジョブのステータスに基づいてキャッシュを保存するタイミングを定義します。
cache: pathsと組み合わせて使用する必要があります。そうしないと、何もキャッシュされません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
on_success(デフォルト): ジョブが成功した場合にのみキャッシュを保存します。on_failure: ジョブが失敗した場合にのみキャッシュを保存します。always: キャッシュを常に保存します。
cache:whenの例:
rspec:
script: rspec
cache:
paths:
- rspec/
when: 'always'この例では、ジョブの成功または失敗にかかわらずキャッシュを保存します。
cache:policy
キャッシュのアップロードとダウンロードの動作を変更するには、cache:policyキーワードを使用します。デフォルトでは、ジョブはジョブの開始時にキャッシュをダウンロードし、ジョブの終了時に変更をキャッシュにアップロードします。このキャッシュスタイルはpull-pushポリシー(デフォルト)です。
ジョブの開始時にキャッシュをダウンロードするだけで、ジョブの終了時に変更をアップロードしないようにジョブを設定するには、cache:policy:pullを使用します。
ジョブの終了時にキャッシュをアップロードするだけで、ジョブの開始時にキャッシュをダウンロードしないようにジョブを設定するには、cache:policy:pushを使用します。
同じキャッシュを使用する多数のジョブが並列実行される場合は、pullポリシーを使用します。このポリシーにより、ジョブの実行が高速化され、キャッシュサーバーの負荷も軽減されます。キャッシュを構築するために、pushポリシーを指定したジョブを使用できます。
cache: pathsと組み合わせて使用する必要があります。そうしないと、何もキャッシュされません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
pullpushpull-push(デフォルト)- CI/CD変数。
cache:policyの例:
prepare-dependencies-job:
stage: build
cache:
key: gems
paths:
- vendor/bundle
policy: push
script:
- echo "This job only downloads dependencies and builds the cache."
- echo "Downloading dependencies..."
faster-test-job:
stage: test
cache:
key: gems
paths:
- vendor/bundle
policy: pull
script:
- echo "This job script uses the cache, but does not update it."
- echo "Running tests..."関連トピック:
cache:fallback_keys
cache:fallback_keysを使用して、cache:keyに対応するキャッシュが見つからない場合に、キャッシュの復元を試行するキーのリストを指定します。キャッシュは、fallback_keysセクションで指定された順序で取得されます。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- キャッシュキーの配列
cache:fallback_keysの例:
rspec:
script: rspec
cache:
key: gems-$CI_COMMIT_REF_SLUG
paths:
- rspec/
fallback_keys:
- gems
when: 'always'coverage
coverageとカスタム正規表現を使用して、ジョブの出力からコードカバレッジを抽出する方法を設定します。ジョブの出力に、正規表現と一致する行が1行以上含まれている場合、カバレッジがUIに表示されます。
一致した文字列からコードカバレッジの値を抽出するために、GitLabは短い正規表現\d+(?:\.\d+)?を使用します。
サポートされている値:
- RE2正規表現。冒頭と末尾の両方が
/である必要があります。カバレッジの数値と一致する必要があります。周囲のテキストも含めて一致しても問題ありません。そのため、正確な数値をキャプチャするために正規表現の文字グループを使用する必要はありません。RE2構文を使用するため、すべてグループは非キャプチャグループでなければなりません。
coverageの例:
job1:
script: rspec
coverage: '/Code coverage: \d+(?:\.\d+)?/'この例では:
- GitLabが、ジョブログに対して正規表現が一致するかどうかをチェックします。
Code coverage: 67.89% of lines coveredのような行が一致します。 - GitLabは、一致した部分をチェックして、正規表現
\d+(?:\.\d+)?と一致する箇所を見つけます。この例の正規表現は、コードカバレッジの値67.89に一致します。
補足情報:
- 正規表現の例はコードカバレッジに記載されています。
- ジョブの出力に一致する行が複数ある場合は、最後の行が使用されます(逆方向検索で最初に一致した結果)。
- 1行内に一致した箇所が複数ある場合は、最後に一致した部分からカバレッジの数値が抽出されます。
- 一致した部分から複数のカバレッジの数値が見つかった場合は、最初の数値が使用されます。
- 先頭のゼロは削除されます。
- 子パイプラインからのカバレッジ出力は、記録または表示されません。詳細については、関連イシューを確認してください。
dast_configuration
- プラン: Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
dast_configurationキーワードを使用して、CI/CD設定で使用するサイトプロファイルとスキャナープロファイルを指定します。両方のプロファイルが、あらかじめプロジェクトで作成されている必要があります。ジョブのステージはdastである必要があります。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値: site_profileとscanner_profile(それぞれ1つずつ)。
- ジョブで使用するサイトプロファイルを指定するには、
site_profileを使用します。 - ジョブで使用するスキャナープロファイルを指定するには、
scanner_profileを使用します。
dast_configurationの例:
stages:
- build
- dast
include:
- template: DAST.gitlab-ci.yml
dast:
dast_configuration:
site_profile: "Example Co"
scanner_profile: "Quick Passive Test"この例では、dastジョブが、includeキーワードで追加されたdast設定を拡張し、特定のサイトプロファイルおよびスキャナープロファイルを選択しています。
補足情報:
- サイトプロファイルまたはスキャナープロファイルに含まれる設定は、DASTテンプレートに含まれる設定よりも優先されます。
関連トピック:
dependencies
dependenciesキーワードを使用して、アーティファクトのフェッチ元のジョブのリストを定義します。指定されたジョブはすべて、先行するステージに存在する必要があります。アーティファクトをまったくダウンロードしないようにジョブを設定することもできます。
ジョブでdependenciesが定義されていない場合、前のステージにあるすべてのジョブが依存対象と見なされ、ジョブはそれらのジョブからすべてのアーティファクトをフェッチします。
同じステージ内のジョブからアーティファクトをフェッチするには、needs:artifactsを使用する必要があります。同じジョブの中でdependenciesをneedsと組み合わせて使用しないでください。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- アーティファクトのフェッチ元のジョブの名前。
- 空の配列(
[])。アーティファクトをダウンロードしないようにジョブを設定します。
dependenciesの例:
build osx:
stage: build
script: make build:osx
artifacts:
paths:
- binaries/
build linux:
stage: build
script: make build:linux
artifacts:
paths:
- binaries/
test osx:
stage: test
script: make test:osx
dependencies:
- build osx
test linux:
stage: test
script: make test:linux
dependencies:
- build linux
deploy:
stage: deploy
script: make deploy
environment: productionこの例では、build osxとbuild linuxの2つのジョブがアーティファクトを生成します。test osxが実行されると、build osxからのアーティファクトがダウンロードされ、ビルドのコンテキストで抽出されます。test linuxも同様に、build linuxからのアーティファクトを取得します。
deployジョブは、ステージの優先順位に従って、それ以前のすべてのジョブからアーティファクトをダウンロードします。
補足情報:
- ジョブステータスは関係ありません。ジョブが失敗した場合、またはトリガーされていない手動ジョブである場合、エラーは発生しません。
- 依存先のジョブのアーティファクトが期限切れであるか削除されている場合、ジョブは失敗します。
environment
environmentを使用して、ジョブがデプロイされる環境を定義します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値: ジョブのデプロイ先の環境の名前。次のいずれかの形式で指定します。
- 平文(英字、数字、スペース、および文字
-、_、/、$、{、}を含む)。 - CI/CD変数(定義済みの変数、プロジェクト、グループ、インスタンスの変数、または
.gitlab-ci.ymlファイルで定義された変数を含む)。scriptセクションで定義された変数は使用できません。
environmentの例:
deploy to production:
stage: deploy
script: git push production HEAD:main
environment: production補足情報:
environmentを指定しても、その名前の環境が存在しない場合は、環境が作成されます。
environment:name
環境の名前を設定します。
一般的な環境名はqa、staging、productionですが、任意の名前を使用できます。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値: ジョブのデプロイ先の環境の名前。次のいずれかの形式で指定します。
- 平文(英字、数字、スペース、および文字
-、_、/、$、{、}を含む)。 - CI/CD変数(定義済みの変数、プロジェクト、グループ、インスタンスの変数、または
.gitlab-ci.ymlファイルで定義された変数を含む)。scriptセクションで定義された変数は使用できません。
environment:nameの例:
deploy to production:
stage: deploy
script: git push production HEAD:main
environment:
name: productionenvironment:url
環境のURLを設定します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値: 単一のURL。次のいずれかの形式で指定します。
- 平文(例:
https://prod.example.com)。 - CI/CD変数(定義済みの変数、プロジェクト、グループ、インスタンスの変数、または
.gitlab-ci.ymlファイルで定義された変数を含む)。scriptセクションで定義された変数は使用できません。
environment:urlの例:
deploy to production:
stage: deploy
script: git push production HEAD:main
environment:
name: production
url: https://prod.example.com補足情報:
- ジョブが完了したら、URLにアクセスできます。URLにアクセスするには、マージリクエスト、環境、またはデプロイページでボタンを選択します。
environment:on_stop
environmentで定義されているon_stopキーワードを使用して、環境を閉じる(停止する)ことができます。これは、環境を閉じるために実行される別のジョブを宣言します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
補足情報:
- 詳細と例については、
environment:actionを参照してください。
environment:action
actionキーワードを使用して、ジョブが環境をどのように操作するかを指定します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値: 次のキーワードのいずれか。
| 値 | 説明 |
|---|---|
start | デフォルト値。ジョブが環境を開始することを示します。デプロイはジョブの開始後に作成されます。 |
prepare | ジョブが環境の準備のみを行うことを示します。デプロイはトリガーされません。環境の準備の詳細については、こちらを参照してください。 |
stop | ジョブが環境を停止することを示します。環境の停止の詳細については、こちらを参照してください。 |
verify | ジョブが環境の検証のみを行うことを示します。デプロイはトリガーされません。環境の検証の詳細については、こちらを参照してください。 |
access | ジョブが環境へのアクセスのみを行うことを示します。デプロイはトリガーされません。環境へのアクセスの詳細については、こちらを参照してください。 |
environment:actionの例:
stop_review_app:
stage: deploy
variables:
GIT_STRATEGY: none
script: make delete-app
when: manual
environment:
name: review/$CI_COMMIT_REF_SLUG
action: stopenvironment:auto_stop_in
auto_stop_inキーワードは、環境のライフタイムを指定します。環境の有効期限が切れると、GitLabは自動的にその環境を停止します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値: 自然言語で記述された期間。たとえば、以下の表記はすべて同等です。
168 hours7 daysone weeknever
CI/CD変数がサポートされています。
environment:auto_stop_inの例:
review_app:
script: deploy-review-app
environment:
name: review/$CI_COMMIT_REF_SLUG
auto_stop_in: 1 dayreview_appの環境が作成されると、その環境のライフタイムは1 dayに設定されます。レビューアプリがデプロイされるたびに、そのライフタイムも1 dayにリセットされます。
auto_stop_inキーワードは、stopを除くすべての環境アクションに使用できます。一部のアクションは、環境のスケジュールされた停止時間をリセットするために使用できます。詳細については、準備または検証目的で環境にアクセスするを参照してください。
関連トピック:
environment:kubernetes
kubernetesキーワードを使用して、環境のKubernetesのダッシュボードとGitLabで管理されるKubernetesリソースを構成します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
agent: Kubernetes向けGitLabエージェントを指定する文字列。形式はpath/to/agent/project:agent-nameです。エージェントがパイプラインを実行しているプロジェクトに接続されている場合は、$CI_PROJECT_PATH:agent-nameを使用します。dashboard:namespace: 環境がデプロイされるKubernetesネームスペースを表す文字列。ネームスペースは、agentキーワードと一緒に設定する必要があります。namespaceは非推奨です。dashboard:flux_resource_path:HelmReleaseなどの、Fluxリソースへのフルパスを表す文字列。Fluxリソースは、agentキーワード、dashboard:namespaceキーワードと一緒に設定する必要があります。flux_resource_pathは非推奨です。managed_resources: 環境のGitLabで管理されるKubernetesリソースを構成するためのenabledキーワードを使用したハッシュ。managed_resources:enabled: GitLabで管理されるKubernetesリソースが環境で有効になっているかどうかを示すブール値。
dashboard: 環境のKubernetesのダッシュボードを構成するためのdashboard:namespaceキーワードとdashboard:flux_resource_pathキーワードを使用したハッシュ。
environment:kubernetesの例:
deploy:
stage: deploy
script: make deploy-app
environment:
name: production
kubernetes:
agent: path/to/agent/project:agent-name
dashboard:
namespace: my-namespace
flux_resource_path: helm.toolkit.fluxcd.io/v2/namespaces/flux-system/helmreleases/helm-release-resource管理対象リソースを無効にする場合のExample of:
deploy:
stage: deploy
script: make deploy-app
environment:
name: production
kubernetes:
agent: path/to/agent/project:agent-name
managed_resources:
enabled: false
dashboard:
namespace: my-namespace
flux_resource_path: helm.toolkit.fluxcd.io/v2/namespaces/flux-system/helmreleases/helm-release-resourceこの設定では:
deployジョブをセットアップして、production環境にデプロイします。- エージェントという名前の
agent-nameを環境に関連付けます。 - ネームスペースが
my-namespaceに設定され、flux_resource_pathにhelm.toolkit.fluxcd.io/v2/namespaces/flux-system/helmreleases/helm-release-resourceが指定された環境向けに、Kubernetesのダッシュボードを設定します。
補足情報:
- ダッシュボードを使用するには、Kubernetes向けGitLabエージェントをインストールし、環境のプロジェクトまたはその親グループの
user_accessを設定する必要があります。 - ジョブを実行するユーザーには、クラスターエージェントへのアクセス権限が必要です。権限がない場合、ダッシュボードは
agent、namespace、flux_resource_path属性を無視します。 agentのみを設定する場合は、namespaceを設定する必要はなく、flux_resource_pathを設定することはできません。ただし、この設定では、Kubernetesのダッシュボードにクラスター内のすべてのネームスペースが一覧表示されます。
environment:deployment_tier
deployment_tierキーワードを使用して、デプロイメント環境のプランを指定します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値: 次のいずれか。
productionstagingtestingdevelopmentother- CI/CD変数(定義済みの変数、プロジェクト、グループ、インスタンスの変数、または
.gitlab-ci.ymlファイルで定義された変数を含む)。scriptセクションで定義された変数は使用できません。
environment:deployment_tierの例:
deploy:
script: echo
environment:
name: customer-portal
deployment_tier: production補足情報:
- このジョブ定義から作成された環境には、この値に基づいてプランが割り当てられます。
- この値が後で追加された場合、既存の環境のプランは更新されません。既存の環境のプランを更新するには、Environments APIを使用する必要があります。
関連トピック:
動的環境
CI/CD変数を使用して、環境名を動的に指定します。
例:
deploy as review app:
stage: deploy
script: make deploy
environment:
name: review/$CI_COMMIT_REF_SLUG
url: https://$CI_ENVIRONMENT_SLUG.example.com/deploy as review appジョブは、review/$CI_COMMIT_REF_SLUG環境を動的に作成するためのデプロイとしてマークされます。$CI_COMMIT_REF_SLUGは、Runnerによって設定されるCI/CD変数です。$CI_ENVIRONMENT_SLUG変数は環境名に基づいていますが、URLに含めるのに適しています。powというブランチでdeploy as review appジョブが実行される場合、この環境はhttps://review-pow.example.com/のようなURLでアクセスできるようになります。
一般的なユースケースは、ブランチの動的環境を作成し、それらをレビューアプリとして使用することです。レビューアプリの使用例は、https://gitlab.com/gitlab-examples/review-apps-nginx/で確認できます。
extends
extendsを使用して、設定セクションを再利用します。これはYAMLアンカーの代替手段であり、わずかに柔軟性が高く、読みやすくなっています。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- パイプライン内の別のジョブの名前。
- パイプライン内の他のジョブの名前のリスト(配列)。
extendsの例:
.tests:
stage: test
image: ruby:3.0
rspec:
extends: .tests
script: rake rspec
rubocop:
extends: .tests
script: bundle exec rubocopこの例では、rspecジョブが.testsテンプレートジョブの設定を使用します。パイプラインの作成時に、GitLabは次の処理を行います。
- キーに基づいて逆ディープマージを実行します。
.testsの内容をrspecジョブとマージします。- キーの値はマージしません。
結合された設定は、以下のジョブと同等です。
rspec:
stage: test
image: ruby:3.0
script: rake rspec
rubocop:
stage: test
image: ruby:3.0
script: bundle exec rubocop補足情報:
extendsには複数の親を使用できます。extendsキーワードは最大11レベルの継承をサポートしていますが、4レベル以上を使用することは避けてください。- 前述の例では、
.testsは非表示ジョブですが、通常のジョブから設定を拡張することもできます。
関連トピック:
extendsを使用して設定セクションを再利用する。extendsを使用して、インクルードされた設定ファイルの設定を再利用する。
hooks
hooksを使用して、ジョブ実行の特定のステージ(Gitリポジトリを取得する前など)で、Runnerで実行するコマンドのリストを指定します。
ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインにdefault:hooksが定義されていて、ジョブにもhooksがある場合、ジョブの設定が優先され、デフォルト設定は使用されません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- フックとそのコマンドのハッシュ。利用可能なフック:
pre_get_sources_script。
hooks:pre_get_sources_script
hooks:pre_get_sources_scriptを使用して、Gitリポジトリとサブモジュールをクローンする前にRunnerで実行するコマンドのリストを指定します。たとえば、次のような用途に使用できます。
サポートされている値: 次の内容を含む配列。
CI/CD変数がサポートされています。
hooks:pre_get_sources_scriptの例:
job1:
hooks:
pre_get_sources_script:
- echo 'hello job1 pre_get_sources_script'
script: echo 'hello job1 script'関連トピック:
identity
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com
- ステータス: ベータ版
この機能はベータ版です。
identityを使用して、アイデンティティフェデレーションを使用したサードパーティサービスの認証を行います。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefault:セクションでのみ使用できます。
サポートされている値: 識別子。サポートされているプロバイダーは以下のとおりです。
google_cloud: Google Cloud。Google Cloud IAMインテグレーションを使用して設定する必要があります。
identityの例:
job_with_workload_identity:
identity: google_cloud
script:
- gcloud compute instances list関連トピック:
id_tokens
id_tokensを使用して、サードパーティサービスで認証するためのIDトークンを作成します。この方法で作成されたすべてのJSON Webトークンは、OIDC認証をサポートしています。JSON Webトークンのaudクレームを設定するために、必須のサブキーワードaudを使用します。
ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインにdefault:id_tokensが定義されていて、ジョブにもid_tokensがある場合、ジョブの設定が優先され、デフォルト設定は使用されません。
サポートされている値:
- トークン名と、その
audクレーム。audでは以下がサポートされています。- 単一の文字列。
- 文字列の配列。
- CI/CD変数。
id_tokensの例:
job_with_id_tokens:
id_tokens:
ID_TOKEN_1:
aud: https://vault.example.com
ID_TOKEN_2:
aud:
- https://gcp.com
- https://aws.com
SIGSTORE_ID_TOKEN:
aud: sigstore
script:
- command_to_authenticate_with_vault $ID_TOKEN_1
- command_to_authenticate_with_aws $ID_TOKEN_2
- command_to_authenticate_with_gcp $ID_TOKEN_2関連トピック:
image
imageを使用して、ジョブが実行されるDockerイメージを指定します。
ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインにdefault:imageが定義されていて、ジョブにもimageがある場合、ジョブの設定が優先され、デフォルト設定は使用されません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値: イメージ名(必要に応じてレジストリパスを含む)。次のいずれかの形式で指定します。
<image-name>(<image-name>にlatestタグを付けた場合と同じ)<image-name>:<tag><image-name>@<digest>
CI/CD変数がサポートされています。
imageの例:
default:
image: ruby:3.0
rspec:
script: bundle exec rspec
rspec 2.7:
image: registry.example.com/my-group/my-project/ruby:2.7
script: bundle exec rspecこの例では、ruby:3.0イメージがパイプライン内のすべてのジョブに対するデフォルトです。rspec 2.7ジョブは、ジョブ固有のimageセクションでデフォルトをオーバーライドするため、デフォルトを使用しません。
補足情報:
- トップレベルで
imageを使用しても、defaultセクションでは使用しない場合、非推奨になります。
関連トピック:
image:name
ジョブが実行されるDockerイメージの名前。imageを単独で使用した場合と同様に機能します。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値: イメージ名(必要に応じてレジストリパスを含む)。次のいずれかの形式で指定します。
<image-name>(<image-name>にlatestタグを付けた場合と同じ)<image-name>:<tag><image-name>@<digest>
CI/CD変数がサポートされています。
image:nameの例:
test-job:
image:
name: "registry.example.com/my/image:latest"
script: echo "Hello world"関連トピック:
image:entrypoint
コンテナのエントリポイントとして実行するコマンドまたはスクリプト。
Dockerコンテナの作成時に、entrypointはDockerの--entrypointオプションに変換されます。構文はDockerfileのENTRYPOINTディレクティブに似ており、各Shellトークンは配列内の個別の文字列です。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- 文字列。
image:entrypointの例:
test-job:
image:
name: super/sql:experimental
entrypoint: [""]
script: echo "Hello world"関連トピック:
image:docker
image:dockerを使用して、DockerエグゼキュータまたはKubernetesエグゼキュータを使用するRunnerにオプションを渡します。このキーワードは、他のexecutorタイプでは機能しません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
Docker executorのオプションを定義するハッシュ。以下を含めることができます。
platform: プルするイメージのアーキテクチャを選択します。指定しない場合、デフォルトはホストRunnerと同じプラットフォームです。user: コンテナの実行時に使用するユーザー名またはUIDを指定します。
image:dockerの例:
arm-sql-job:
script: echo "Run sql tests"
image:
name: super/sql:experimental
docker:
platform: arm64/v8
user: dave補足情報:
image:docker:platformは、docker pull --platformオプションにマップされます。image:docker:userは、docker run --userオプションにマップされます。
image:kubernetes
image:kubernetesを使用して、GitLab Runner Kubernetes executorにオプションを渡します。このキーワードは、他のexecutorタイプでは機能しません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
Kubernetes executorのオプションを定義するハッシュ。以下を含めることができます。
user: コンテナの実行時に使用するユーザー名またはUIDを指定します。UID:GID形式を使用して、GIDを設定することもできます。
UIDのみを使用したimage:kubernetesの例:
arm-sql-job:
script: echo "Run sql tests"
image:
name: super/sql:experimental
kubernetes:
user: "1001"UIDとGIDの両方を使用したimage:kubernetesの例:
arm-sql-job:
script: echo "Run sql tests"
image:
name: super/sql:experimental
kubernetes:
user: "1001:1001"image:pull_policy
RunnerがDockerイメージをフェッチするために使用するプルポリシー。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- 1つのプルポリシー、または配列で指定する複数のプルポリシー。
always、if-not-present、neverのいずれかを指定できます。
image:pull_policyの例:
job1:
script: echo "A single pull policy."
image:
name: ruby:3.0
pull_policy: if-not-present
job2:
script: echo "Multiple pull policies."
image:
name: ruby:3.0
pull_policy: [always, if-not-present]補足情報:
- 定義済みのプルポリシーをRunnerがサポートしていない場合、ジョブは次のようなエラーで失敗します:
ERROR: Job failed (system failure): the configured PullPolicies ([always]) are not allowed by AllowedPullPolicies ([never])。
関連トピック:
inherit
inheritを使用して、デフォルトのキーワードと変数の継承を制御します。
inherit:default
inherit:defaultを使用して、デフォルトのキーワードの継承を制御します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
true(デフォルト)、またはfalse。すべてのデフォルトキーワードの継承を有効または無効にします。- 継承する特定のデフォルトキーワードのリスト。
inherit:defaultの例:
default:
retry: 2
image: ruby:3.0
interruptible: true
job1:
script: echo "This job does not inherit any default keywords."
inherit:
default: false
job2:
script: echo "This job inherits only the two listed default keywords. It does not inherit 'interruptible'."
inherit:
default:
- retry
- image補足情報:
- 継承するデフォルトキーワードを1行で記述することもできます:
default: [keyword1, keyword2]
inherit:variables
inherit:variablesを使用して、デフォルト変数のキーワードの継承を制御します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
true(デフォルト)、またはfalse。すべてのデフォルト変数の継承を有効または無効にします。- 継承する特定の変数のリスト。
inherit:variablesの例:
variables:
VARIABLE1: "This is default variable 1"
VARIABLE2: "This is default variable 2"
VARIABLE3: "This is default variable 3"
job1:
script: echo "This job does not inherit any default variables."
inherit:
variables: false
job2:
script: echo "This job inherits only the two listed default variables. It does not inherit 'VARIABLE3'."
inherit:
variables:
- VARIABLE1
- VARIABLE2補足情報:
- 継承するデフォルト変数を1行で記述することもできます:
variables: [VARIABLE1, VARIABLE2]
interruptible
interruptibleを使用して、冗長なパイプラインを自動キャンセル機能を設定します。この機能は、新しいコミットに対して同じref上で新しいパイプラインが開始された場合、ジョブが完了する前にそのジョブをキャンセルします。この機能が無効になっている場合、このキーワードは効果がありません。新しいパイプラインは、新しい変更を含むコミットに対して開始されたものである必要があります。たとえば、UIでパイプラインを新規作成を選択して同じコミットに対してパイプラインを実行した場合、冗長なパイプラインを自動キャンセル機能は適用されません。
冗長なパイプラインを自動キャンセル機能の動作はworkflow:auto_cancel:on_new_commit設定で制御できます。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
trueまたはfalse(デフォルト)。
デフォルトの動作を使用するinterruptibleの例:
workflow:
auto_cancel:
on_new_commit: conservative # the default behavior
stages:
- stage1
- stage2
- stage3
step-1:
stage: stage1
script:
- echo "Can be canceled."
interruptible: true
step-2:
stage: stage2
script:
- echo "Can not be canceled."
step-3:
stage: stage3
script:
- echo "Because step-2 can not be canceled, this step can never be canceled, even though it's set as interruptible."
interruptible: trueこの例では、新しいパイプラインが実行中のパイプラインに次のような影響を及ぼします。
step-1のみが実行中または保留中の場合は、キャンセルされます。step-2の開始後は、キャンセルされません。
auto_cancel:on_new_commit:interruptible設定を使用したinterruptibleの例:
workflow:
auto_cancel:
on_new_commit: interruptible
stages:
- stage1
- stage2
- stage3
step-1:
stage: stage1
script:
- echo "Can be canceled."
interruptible: true
step-2:
stage: stage2
script:
- echo "Can not be canceled."
step-3:
stage: stage3
script:
- echo "Can be canceled."
interruptible: trueこの例では、新しいパイプラインによって、実行中のパイプラインが実行中または保留中のstep-1とstep-3をキャンセルします。
補足情報:
- ビルドジョブのように、ジョブを開始した後でもジョブを安全にキャンセルできる場合にのみ、
interruptible: trueを設定してください。部分的なデプロイを防ぐため、デプロイメントジョブは通常、キャンセルすべきではありません。 - デフォルトの動作(
workflow:auto_cancel:on_new_commit: conservative)を使用する場合:- まだ開始されていないジョブは、ジョブの設定に関係なく常に
interruptible: trueと見なされます。interruptible設定は、ジョブの開始後にのみ考慮されます。 - 実行中のパイプラインがキャンセルされるのは、実行中のすべてのジョブで
interruptible: trueが設定されているか、interruptible: falseが設定されたジョブが一度も開始されていない場合のみです。interruptible: falseと指定されたジョブが開始されると、パイプライン全体が中断不可と見なされます。 - パイプラインがダウンストリームパイプラインをトリガーした場合でも、ダウンストリームパイプライン内で
interruptible: falseが設定されたジョブがまだ開始されていなければ、ダウンストリームパイプラインもキャンセルされます。
- まだ開始されていないジョブは、ジョブの設定に関係なく常に
interruptible: falseが設定されたオプションの手動ジョブをパイプラインの最初のステージに追加すると、ユーザーがパイプラインの自動キャンセルを手動で防止できるようになります。ユーザーがこのジョブを開始すると、冗長なパイプラインを自動キャンセル機能でそのパイプラインをキャンセルすることはできません。- トリガージョブで
interruptibleを使用する場合:- トリガーされたダウンストリームパイプラインは、トリガージョブの
interruptible設定の影響を受けません。 workflow:auto_cancelがconservativeに設定されている場合、トリガージョブのinterruptible設定は無効です。workflow:auto_cancelがinterruptibleに設定されている場合、interruptible: trueが設定されたトリガージョブは自動キャンセルできます。
- トリガーされたダウンストリームパイプラインは、トリガージョブの
needs
needsを使用して、ジョブを順不同で実行します。needsを使用するジョブ間の関係は、有向非巡回グラフとして視覚化できます。
ステージの順序を無視して、他のジョブの完了を待たずに一部のジョブを実行できます。複数のステージのジョブを同時に実行できます。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- ジョブの配列(最大で50のジョブを指定可能)。
- 空の配列(
[])。パイプラインの作成後、すぐにジョブを開始するために設定します。
needsの例:
linux:build:
stage: build
script: echo "Building linux..."
mac:build:
stage: build
script: echo "Building mac..."
lint:
stage: test
needs: []
script: echo "Linting..."
linux:rspec:
stage: test
needs: ["linux:build"]
script: echo "Running rspec on linux..."
mac:rspec:
stage: test
needs: ["mac:build"]
script: echo "Running rspec on mac..."
production:
stage: deploy
script: echo "Running production..."
environment: productionこの例では、4つの実行パスを作成します。
- Linter:
lintジョブは、ニーズがないため(needs: [])、buildステージの完了を待たずにすぐ実行されます。 - Linuxパス:
linux:rspecジョブは、mac:buildの完了を待たずに、linux:buildジョブが完了するとすぐに実行されます。 - macOSパス:
mac:rspecジョブは、linux:buildの完了を待たずに、mac:buildジョブの完了後すぐに実行されます。 productionジョブは、それ以前のすべてのジョブ(lint、linux:build、linux:rspec、mac:build、mac:rspec)の完了後すぐに実行されます。
補足情報:
- 単一のジョブが
needs配列に指定できるジョブの最大数には、次の制限があります。- GitLab.comの場合、上限は50です。詳細については、イシュー350398を参照してください。
- GitLabセルフマネージドおよびGitLab Dedicatedの場合、デフォルトの制限は50です。この制限は、管理者エリアでCI/CD制限を更新することで変更できます。
needsがparallelキーワードを使用するジョブを参照している場合、それは1つのジョブだけでなく、並列に作成されるすべてのジョブに依存します。また、デフォルトでは、すべての並列ジョブからアーティファクトをダウンロードします。同じ名前のアーティファクトがある場合、上書きすることになり、最後にダウンロードしたアーティファクトだけが保存されます。needsに(並列ジョブのすべてではなく)並列ジョブの一部のみを参照させるには、needs:parallel:matrixキーワードを使用します。
- 設定対象のジョブと同じステージのジョブを参照できます。
needsがonly、except、rulesの条件によりパイプラインに追加されない可能性があるジョブを参照する場合、パイプラインの作成に失敗する可能性があります。このパイプライン作成の失敗を解決するには、needs:optionalキーワードを使用します。- パイプラインに
needs: []を指定したジョブと.preステージのジョブがある場合、これらはすべてパイプラインの作成直後に開始されます。needs: []を指定したジョブはすぐに開始され、.preステージのジョブもすぐに開始されます。
needs:artifacts
ジョブでneedsを使用すると、デフォルトでは、それ以前のステージからすべてのアーティファクトをダウンロードすることはなくなります。needsを指定したジョブは、それ以前のステージの完了前に開始される可能性があるからです。needsを使用する場合、needsの設定で指定したジョブからのみアーティファクトをダウンロードできます。
needsを使用するジョブでアーティファクトをダウンロードするタイミングを制御するには、artifacts: true(デフォルト)またはartifacts: falseを使用します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。needs:jobと一緒に使用する必要があります。
サポートされている値:
true(デフォルト)またはfalse。
needs:artifactsの例:
test-job1:
stage: test
needs:
- job: build_job1
artifacts: true
test-job2:
stage: test
needs:
- job: build_job2
artifacts: false
test-job3:
needs:
- job: build_job1
artifacts: true
- job: build_job2
- build_job3この例では:
test-job1ジョブはbuild_job1のアーティファクトをダウンロードします。test-job2ジョブはbuild_job2のアーティファクトをダウンロードしません。test-job3ジョブは、3つのbuild_jobsすべてからアーティファクトをダウンロードします。必要なすべてのジョブで、artifactsにtrueが指定されているか、またはデフォルトでtrueになっているためです。
補足情報:
- 同じジョブの中で
needsをdependenciesと組み合わせて使用しないでください。
needs:project
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
needs:projectを使用して、他のパイプライン内の最大5つのジョブからアーティファクトをダウンロードします。アーティファクトは、指定されたref上で最後に成功した指定ジョブからダウンロードされます。複数のジョブを指定するには、needsキーワードの下にそれぞれ個別の配列項目として追加します。
指定されたrefに対して実行中のパイプラインがある場合、needs:projectを使用するジョブはそのパイプラインの完了を待機しません。代わりに、指定されたジョブの最後に成功した実行結果からアーティファクトをダウンロードします。
needs:projectは、job、ref、artifactsと一緒に使用する必要があります。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
needs:project: ネームスペースとグループを含む、プロジェクトのフルパス。job: アーティファクトのダウンロード元のジョブ。ref: アーティファクトのダウンロード元のref。artifacts: アーティファクトをダウンロードするには、trueに設定する必要があります。
needs:projectの例:
build_job:
stage: build
script:
- ls -lhR
needs:
- project: namespace/group/project-name
job: build-1
ref: main
artifacts: true
- project: namespace/group/project-name-2
job: build-2
ref: main
artifacts: trueこの例では、build_jobは、group/project-nameおよびgroup/project-name-2プロジェクトのmainブランチにおいて、最後に成功したbuild-1およびbuild-2ジョブからアーティファクトをダウンロードします。
needs:projectではCI/CD変数を使用できます。次に例を示します。
build_job:
stage: build
script:
- ls -lhR
needs:
- project: $CI_PROJECT_PATH
job: $DEPENDENCY_JOB_NAME
ref: $ARTIFACTS_DOWNLOAD_REF
artifacts: true補足情報:
- 現在のプロジェクト内の別のパイプラインからアーティファクトをダウンロードするには、
projectに現在のプロジェクトと同じ値を指定し、現在のパイプラインとは異なるrefを使用します。同じref上で複数のパイプラインが同時に実行されていると、アーティファクトが上書きされる可能性があります。 - パイプラインを実行するユーザーは、グループまたはプロジェクトに対して少なくともレポーターロールを付与されている必要があります。または、グループ/プロジェクトの表示レベルが公開でなければなりません。
needs:projectとtriggerは、同じジョブ内で併用できません。needs:projectを使用して別のパイプラインからアーティファクトをダウンロードする場合、ジョブは必要なジョブが完了するのを待機しません。needsを使用してジョブの完了を待機する動作は、同じパイプライン内のジョブに限定されます。そのため、ジョブがアーティファクトをダウンロードしようとする前に、他のパイプライン内の必要なジョブが完了していることを確認してください。parallelで実行されるジョブからアーティファクトをダウンロードすることはできません。project、job、refではCI/CD変数をサポートしています。
関連トピック:
- 親子パイプライン間でアーティファクトをダウンロードするには、
needs:pipeline:jobを使用します。
needs:pipeline:job
子パイプラインは、親パイプラインまたは同じ親子パイプライン階層にある別の子パイプラインの正常に完了したジョブからアーティファクトをダウンロードできます。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
needs:pipeline: パイプラインID。同じ親子パイプライン階層に属するパイプラインである必要があります。job: アーティファクトのダウンロード元のジョブ。
needs:pipeline:jobの例:
親パイプライン(
.gitlab-ci.yml):stages: - build - test create-artifact: stage: build script: echo "sample artifact" > artifact.txt artifacts: paths: [artifact.txt] child-pipeline: stage: test trigger: include: child.yml strategy: mirror variables: PARENT_PIPELINE_ID: $CI_PIPELINE_ID子パイプライン(
child.yml):use-artifact: script: cat artifact.txt needs: - pipeline: $PARENT_PIPELINE_ID job: create-artifact
この例では、親パイプライン内のcreate-artifactジョブがアーティファクトを作成します。child-pipelineジョブは子パイプラインをトリガーし、CI_PIPELINE_ID変数を新しいPARENT_PIPELINE_ID変数として子パイプラインに渡します。子パイプラインは、この変数をneeds:pipelineに使用することで、親パイプラインからアーティファクトをダウンロードできます。後続のステージにcreate-artifactジョブとchild-pipelineジョブを配置することで、create-artifactが正常に完了した場合にのみuse-artifactジョブが実行されるようになります。
補足情報:
pipeline属性は、現在のパイプラインID($CI_PIPELINE_ID)を受け付けません。現在のパイプライン内のジョブからアーティファクトをダウンロードするには、needs:artifactsを使用します。needs:pipeline:jobをトリガージョブで使用することはできず、マルチプロジェクトパイプラインからアーティファクトをフェッチするために使用することもできません。マルチプロジェクトパイプラインからアーティファクトをフェッチするには、needs:projectを使用します。needs:pipeline:jobにリストされているジョブは、successで完了する必要があります。そうなっていない場合、アーティファクトをフェッチできません。イシュー367229では、アーティファクトを持つ任意のジョブからアーティファクトをフェッチできるようにする提案がなされています。
needs:optional
パイプライン中に存在しないことのあるジョブを必須とするには、needsの設定にoptional: trueを追加します。定義されていない場合、optional: falseがデフォルトです。
rules、only、またはexceptを使用しているジョブや、includeによって追加されたジョブは、常にパイプラインに追加されるとは限りません。GitLabは、パイプラインを開始する前にneedsの関係をチェックします。
needsエントリにoptional: trueが設定され、必要なジョブがパイプラインに存在する場合、ジョブはその完了を待ってから開始します。- 必要なジョブが存在しない場合、ジョブは他のすべてのneeds要件が満たされた時点で開始できます。
needsセクションにオプションのジョブのみが含まれており、いずれもパイプラインに追加されていない場合、そのジョブはすぐに開始されます(空のneedsエントリであるneeds: []を指定した場合と同じ)。- 必要なジョブに
optional: falseが指定されているが、パイプラインに追加されなかった場合、パイプラインの開始は失敗し、次のようなエラーになります:'job1' job needs 'job2' job, but it was not added to the pipeline。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
needs:optionalの例:
build-job:
stage: build
test-job1:
stage: test
test-job2:
stage: test
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
deploy-job:
stage: deploy
needs:
- job: test-job2
optional: true
- job: test-job1
environment: production
review-job:
stage: deploy
needs:
- job: test-job2
optional: true
environment: reviewこの例では:
build-job、test-job1、test-job2は、ステージの順に開始します。- ブランチがデフォルトブランチの場合、
test-job2がパイプラインに追加されるため、次のようになります。deploy-jobは、test-job1とtest-job2の両方が完了するのを待機します。review-jobは、test-job2が完了するのを待機します。
- ブランチがデフォルトブランチでない場合、
test-job2はパイプラインに追加されないため、次のようになります。deploy-jobはtest-job1の完了のみを待機し、存在しないtest-job2の完了は待機しません。review-jobには他に必要なジョブがないため、needs: []と同様に、すぐに(build-jobと同時に)開始されます。
needs:pipeline
needs:pipelineキーワードを使用すると、アップストリームパイプラインからジョブにパイプラインのステータスをミラーリングできます。デフォルトブランチからの最新のパイプラインステータスが、ジョブにレプリケートされます。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- ネームスペースとグループを含む、プロジェクトのフルパス。プロジェクトが同じグループまたはネームスペースに含まれる場合は、
projectキーワードからそれらを省略できます。例:project: group/project-nameまたはproject: project-name。
needs:pipelineの例:
upstream_status:
stage: test
needs:
pipeline: other/project補足情報:
jobキーワードをneeds:pipelineに追加すると、ジョブはパイプラインステータスをミラーリングしなくなります。動作はneeds:pipeline:jobに変わります。
needs:parallel:matrix
ジョブでparallel:matrixを使用すれば、単一のパイプラインで1つのジョブを複数のインスタンスとして同時実行し、ジョブのインスタンスごとに異なる変数値を使用できます。
needs:parallel:matrixを使用して、複数の並列ジョブに応じてジョブを順不同で実行します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。needs:jobと一緒に使用する必要があります。
サポートされている値: マトリックスハッシュの配列:
- 識別子と値は、
parallel:matrixジョブで定義された識別子と値から選択する必要があります。 - マトリックス式を使用できます。
needs:parallel:matrixの例:
linux:build:
stage: build
script: echo "Building linux..."
parallel:
matrix:
- PROVIDER: aws
STACK:
- monitoring
- app1
- app2
linux:rspec:
stage: test
needs:
- job: linux:build
parallel:
matrix:
- PROVIDER: aws
STACK: app1
script: echo "Running rspec on linux..."前述の例では、次のジョブが生成されます。
linux:build: [aws, monitoring]
linux:build: [aws, app1]
linux:build: [aws, app2]
linux:rspeclinux:rspecジョブは、linux:build: [aws, app1]ジョブが完了するとすぐに実行されます。
補足情報:
needs:parallel:matrixのマトリックス識別子の順序は、必要なジョブのマトリックス変数の順序と一致する必要があります。たとえば、前述の例のlinux:rspecジョブで、変数の順序を逆にすると無効になります。linux:rspec: stage: test needs: - job: linux:build parallel: matrix: - STACK: app1 # The variable order does not match `linux:build` and is invalid. PROVIDER: aws script: echo "Running rspec on linux..."
関連トピック:
pages
pagesを使用して、静的コンテンツをGitLabにアップロードするGitLab Pagesジョブを定義します。コンテンツはウェブサイトとして公開されます。
次のことを行う必要があります。
pages: trueを定義し、publicという名前のディレクトリを公開します。- 別のコンテンツディレクトリを使用する場合は、代わりに
pages.publishを定義します。 - コンテンツディレクトリのルートに空ではない
index.htmlファイルを配置します。
キーワードのタイプ: ジョブキーワード、またはジョブ名(非推奨)。ジョブの一部としてのみ使用できます。
サポートされている値:
- ブール値。
trueに設定すると、デフォルトの設定を使用します。 - 設定オプションのハッシュ。詳細については、この後のセクションを参照してください。
pagesの例:
create-pages:
stage: deploy
script:
- mv my-html-content public
pages: true # specifies that this is a Pages job and publishes the default public directory
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
environment: productionこの例では、my-html-content/ディレクトリの名前をpublic/に変更しています。このディレクトリはアーティファクトとしてエクスポートされ、GitLab Pagesで公開されます。
設定ハッシュを使用した例:
create-pages:
stage: deploy
script:
- echo "nothing to do here"
pages: # specifies that this is a Pages job and publishes the default public directory
publish: my-html-content
expire_in: "1 week"
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
environment: productionこの例では、ディレクトリは移動せず、publishプロパティを直接使用しています。また、このページデプロイが1週間後に非公開になるよう設定しています。
補足情報:
pagesをジョブ名として使用することは非推奨です。- Pagesのデプロイをトリガーせずに
pagesをジョブ名として使用するには、pagesプロパティをfalseに設定します。
pages.publish
pages.publishを使用して、pagesジョブのコンテンツディレクトリを設定します。
キーワードのタイプ: ジョブキーワード。これは、pagesジョブの一部としてのみ使用できます。
サポートされている値: Pagesコンテンツを含むディレクトリのパス。GitLab 17.10以降、これを指定しない場合、デフォルトのpublicディレクトリが使用されます。指定した場合、そのパスが自動的にartifacts:pathsに付加されます。
pages.publishの例:
create-pages:
stage: deploy
script:
- npx @11ty/eleventy --input=path/to/eleventy/root --output=dist
pages:
publish: dist # this path is automatically appended to artifacts:paths
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
environment: productionこの例では、Eleventyを使用して静的ウェブサイトを生成し、生成されたHTMLファイルをdist/ディレクトリに出力しています。このディレクトリはアーティファクトとしてエクスポートされ、GitLab Pagesで公開されます。
pages.publishフィールドでは変数も使用できます。例:
create-pages:
stage: deploy
script:
- mkdir -p $CUSTOM_FOLDER/$CUSTOM_PATH
- cp -r public $CUSTOM_FOLDER/$CUSTOM_SUBFOLDER
pages:
publish: $CUSTOM_FOLDER/$CUSTOM_SUBFOLDER # this path is automatically appended to artifacts:paths
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
variables:
CUSTOM_FOLDER: "custom_folder"
CUSTOM_SUBFOLDER: "custom_subfolder"指定する公開パスは、ビルドのルートからの相対パスでなければなりません。
補足情報:
- トップレベルキーワード
publishは非推奨となっており、現在はpagesキーワードの下にネストされた状態にする必要があります。
pages.path_prefix
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
- ステータス: ベータ版
pages.path_prefixを使用して、GitLab Pagesの並列デプロイのパスプレフィックスを設定します。
キーワードのタイプ: ジョブキーワード。これは、pagesジョブの一部としてのみ使用できます。
サポートされている値:
- 文字列
- CI/CD変数
- 両方の組み合わせ
指定された値は小文字に変換され、63バイトに短縮されます。英数字とピリオド以外の文字はすべてハイフンに置き換えられます。先頭および末尾にハイフンまたはピリオドを含めることはできません。
pages.path_prefixの例:
create-pages:
stage: deploy
script:
- echo "Pages accessible through ${CI_PAGES_URL}"
pages: # specifies that this is a Pages job and publishes the default public directory
path_prefix: "$CI_COMMIT_BRANCH"この例では、ブランチごとに異なるページデプロイが作成されます。
pages.expire_in
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
expire_inを使用して、デプロイが期限切れになるまでの有効期間を指定します。デプロイが期限切れになると、10分ごとに実行されるcronジョブによって非アクティブ化されます。
デフォルトでは、並列デプロイは24時間後に自動的に期限切れになります。この動作を無効にするには、値をneverに設定します。
キーワードのタイプ: ジョブキーワード。これは、pagesジョブの一部としてのみ使用できます。
サポートされている値: 有効期間。単位が指定されていない場合は秒単位です。変数もサポートされています。有効な値の例は以下のとおりです。
'42'42 seconds3 mins 4 sec2 hrs 20 min2h20min6 mos 1 day47 yrs 6 mos and 4d3 weeks and 2 daysnever$DURATION
pages.expire_inの例:
create-pages:
stage: deploy
script:
- echo "Pages accessible through ${CI_PAGES_URL}"
pages: # specifies that this is a Pages job and publishes the default public directory
expire_in: 1 weekparallel
parallelを使用して、1つのパイプラインで同じジョブを複数並列に実行します。
複数のRunnerが存在する必要があります。または、単一のRunnerが複数のジョブを同時に実行するよう設定されている必要があります。
並列ジョブには、job_name 1/Nからjob_name N/Nまでの連番の名前が付けられます。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
1から200までの数値。
parallelの例:
test:
script: rspec
parallel: 5この例では、並列に実行される5つのジョブが作成され、それぞれtest 1/5からtest 5/5という名前が付けられます。
補足情報:
- どの並列ジョブにも、
CI_NODE_INDEXおよびCI_NODE_TOTALという定義済みのCI/CD変数が設定されています。 parallelを使用するジョブを含むパイプラインでは、次のような状況が発生する可能性があります。- 利用可能なRunner数を超える並列実行ジョブが作成されることがあります。超過したジョブはキューに入れられ、Runnerが利用可能になるまで待機している間、
pendingのマークが付けられます。 - パイプラインを作成すると、すべてのアクティブなパイプライン全体のジョブの合計数がインスタンス制限を超える場合、
job_activity_limit_exceededエラーで失敗します。
- 利用可能なRunner数を超える並列実行ジョブが作成されることがあります。超過したジョブはキューに入れられ、Runnerが利用可能になるまで待機している間、
関連トピック:
parallel:matrix
parallel:matrixを使用して、1つのパイプラインで同じジョブを複数並列に実行し、ジョブのインスタンスごとに異なる変数値を指定します。
複数のRunnerが存在する必要があります。または、単一のRunnerが複数のジョブを同時に実行するよう設定されている必要があります。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値: 変数のハッシュの配列。
- マトリックス識別子(変数名になります)には、数字、文字、アンダースコア(
_)のみを使用できます。 - 値は文字列、または文字列の配列でなければなりません。
- 順列の数は200以下でなければなりません。
parallel:matrixの例:
deploystacks:
stage: deploy
script:
- bin/deploy
parallel:
matrix:
- PROVIDER: aws
STACK:
- monitoring
- app1
- app2
- PROVIDER: [gcp, vultr]
STACK: [data, processing]
environment: $PROVIDER/$STACKこの例では、7つの並列deploystacksジョブが生成され、それぞれPROVIDERとSTACKに異なる値が設定されます:
deploystacks: [aws, monitoring]deploystacks: [aws, app1]deploystacks: [aws, app2]deploystacks: [gcp, data]deploystacks: [gcp, processing]deploystacks: [vultr, data]deploystacks: [vultr, processing]
補足情報:
parallel:matrixジョブは、ジョブを互いに区別するためにジョブ名にマトリックス値を追加しますが、大きな値を使用すると名前が制限を超える可能性があります:rules:ifの変数としてマトリックス値を使用することはできません。同じ値で異なる名前を持つ複数のマトリックス構成を作成することはできません。ジョブ名は名前ではなくマトリックス値から生成されるため、同じ値を持つマトリックスエントリは、互いに上書きされる同じジョブ名を生成します。
たとえば、次の
test設定では、同一のジョブで構成される2つのシリーズを作成しようとしていますが、OS2バージョンのジョブがOSバージョンのジョブを上書きすることになります。test: parallel: matrix: - OS: [ubuntu] PROVIDER: [aws, gcp] - OS2: [ubuntu] PROVIDER: [aws, gcp]
関連トピック:
- 並列ジョブの1次元マトリックスを実行する。
- 並列トリガージョブのマトリックスを実行する。
- 並列マトリックスジョブごとに異なるRunnerタグを選択する。
needs:parallel:matrixのマトリックス式。
release
releaseを使用して、リリースを作成します。
リリースジョブは、glab CLIにアクセスできる必要があり、これは$PATHにある必要があります。
Docker executorを使用する場合は、次のGitLabコンテナレジストリにあるDockerイメージを使用できます: registry.gitlab.com/gitlab-org/cli:latest
Shell executorなどを使用する場合は、Runnerが登録されているサーバーにglab CLIをインストールします。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値: releaseサブキー。
tag_nametag_message(オプション)name(オプション)descriptionref(オプション)milestones(オプション)released_at(オプション)assets:links(オプション)
releaseキーワードの例:
release_job:
stage: release
image: registry.gitlab.com/gitlab-org/cli:latest
rules:
- if: $CI_COMMIT_TAG # Run this job when a tag is created manually
script:
- echo "Running the release job."
release:
tag_name: $CI_COMMIT_TAG
name: 'Release $CI_COMMIT_TAG'
description: 'Release created using the CLI.'この例では、次のタイミングでリリースを作成します。
- Gitタグをプッシュしたとき。
- コード > タグのUIでGitタグを追加する場合。
補足情報:
トリガージョブを除くすべてのリリースジョブには、
scriptキーワードを含める必要があります。リリースジョブでは、スクリプト型コマンドからの出力を使用できます。スクリプトが不要な場合は、次のようにプレースホルダーを使用できます。script: - echo "release job"この要件を削除するためのイシューが存在します。
releaseセクションは、scriptキーワードの後、after_scriptの前に実行されます。リリースが作成されるのは、ジョブのメインスクリプトが成功した場合のみです。
同じリリースがすでに存在する場合、そのリリースは更新されず、
releaseキーワードを含むジョブは失敗します。
関連トピック:
release:tag_name
必須。リリースのGitタグです。
このタグがまだプロジェクト内に存在しない場合、リリースの作成と同時にタグも作成されます。新しいタグは、パイプラインに関連付けられたSHAを使用します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- タグ名。
CI/CD変数がサポートされています。
release:tag_nameの例:
新しいタグがプロジェクトに追加された時点でリリースを作成するには、次のようにします。
tag_nameとしてCI/CD変数$CI_COMMIT_TAGを使用します。rules:ifを使用して、新しいタグに対してのみジョブを実行するよう設定します。
job:
script: echo "Running the release job for the new tag."
release:
tag_name: $CI_COMMIT_TAG
description: 'Release description'
rules:
- if: $CI_COMMIT_TAGリリースと新しいタグを同時に作成するには、新しいタグに対してのみジョブが実行されるようにrulesを設定しないでください。セマンティックバージョニングの例を以下に示します。
job:
script: echo "Running the release job and creating a new tag."
release:
tag_name: ${MAJOR}_${MINOR}_${REVISION}
description: 'Release description'
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"release:tag_message
タグが存在しない場合、新しく作成されるタグには、tag_messageで指定されているメッセージが注釈として付けられます。省略した場合、軽量タグが作成されます。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- テキスト文字列。
release:tag_messageの例:
release_job:
stage: release
release:
tag_name: $CI_COMMIT_TAG
description: 'Release description'
tag_message: 'Annotated tag message'release:name
リリース名。省略した場合、release: tag_nameの値が入力されます。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- テキスト文字列。
release:nameの例:
release_job:
stage: release
release:
name: 'Release $CI_COMMIT_TAG'release:description
リリースの長い説明。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- 長い説明の文字列。
- 説明を含むファイルのパス。
- そのファイルの場所は、プロジェクトディレクトリ(
$CI_PROJECT_DIR)からの相対パスでなければなりません。 - ファイルがシンボリックリンクの場合、
$CI_PROJECT_DIR内に存在する必要があります。 ./path/to/fileとファイル名にスペースを含めることはできません。
- そのファイルの場所は、プロジェクトディレクトリ(
release:descriptionの例:
job:
release:
tag_name: ${MAJOR}_${MINOR}_${REVISION}
description: './path/to/CHANGELOG.md'補足情報:
descriptionは、glabを実行するShellによって評価されます。説明の定義にはCI/CD変数を使用できますが、一部のShellでは変数を参照するための構文が異なることがあります。同様に、Shellによっては特殊文字をエスケープする必要があります。たとえば、バッククォート(`)をバックスラッシュ(\)でエスケープしなければならない場合があります。
release:ref
release: tag_nameがまだ存在しない場合に使用されるリリースのrefです。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- コミットSHA、別のタグ名、またはブランチ名。
release:milestones
リリースが関連付けられている各マイルストーンのタイトル。
release:released_at
リリースが準備完了になる日時。
サポートされている値:
- ISO 8601形式の日付(引用符で囲む)。
release:released_atの例:
released_at: '2021-03-15T08:00:00Z'補足情報:
- 定義されていない場合は、現在の日時が使用されます。
release:assets:links
release:assets:linksを使用して、リリースにアセットリンクを含めます。
release:assets:linksの例:
assets:
links:
- name: 'asset1'
url: 'https://example.com/assets/1'
- name: 'asset2'
url: 'https://example.com/assets/2'
filepath: '/pretty/url/1' # optional
link_type: 'other' # optionalresource_group
resource_groupを使用して、同じプロジェクトの異なるパイプライン間で、ジョブが相互に排他的に実行されるようにするためのリソースグループを作成します。
たとえば、同じリソースグループに属する複数のジョブが同時にキューに登録された場合、それらのジョブのうち1つだけが開始されます。その他のジョブは、resource_groupが解放されるまで待機します。
リソースグループの動作は、他のプログラミング言語におけるセマフォに似ています。
処理モードを選択することで、デプロイの設定に応じてジョブの並行処理を戦略的に制御できます。デフォルトの処理モードはunorderedです。リソースグループの処理モードを変更するには、APIを使用して、既存のリソースグループを編集するリクエストを送信します。
環境ごとに複数のリソースグループを定義できます。たとえば、物理デバイスにデプロイする場合、複数の物理デバイスが存在するかもしれません。各デバイスにデプロイすることは可能ですが、1つのデバイスに対して実行できるデプロイは常に1件だけです。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- 英字、数字、
-、_、/、$、{、}、.、およびスペースのみ。/は先頭にも末尾にも使用できません。CI/CD変数がサポートされています。
resource_groupの例:
deploy-to-production:
script: deploy
resource_group: productionこの例では、2つの異なるパイプライン内にある2つのdeploy-to-productionジョブを同時に実行することは決してできません。これにより、本番環境への同時デプロイが決して発生しないよう制御できます。
関連トピック:
retry
retryを使用して、ジョブが失敗した場合に再試行する回数を設定します。定義されていない場合、デフォルトは0になり、ジョブは再試行されません。
ジョブが失敗すると、成功するか最大再試行回数に達するまで、最大であと2回処理が繰り返されます。
デフォルトでは、すべてのタイプの失敗でジョブが再試行されます。再試行の対象となる失敗を選択するには、retry:whenまたはretry:exit_codesを使用します。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
0(デフォルト)、1、または2。
retryの例:
test:
script: rspec
retry: 2
test_advanced:
script:
- echo "Run a script that results in exit code 137."
- exit 137
retry:
max: 2
when: runner_system_failure
exit_codes: 137終了コードが137の場合、またはRunnerのシステムエラーが発生した場合、test_advancedは最大2回まで再試行されます。
retry:when
retry:whenは、retry:maxと組み合わせて使用し、失敗の特定のケースでのみジョブを再試行します。retry:maxは、retryと同様に最大再試行回数であり、指定できる値は0、1、または2です。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- 単一の失敗タイプ、または1つ以上の失敗タイプの配列。
always: あらゆる失敗時に再試行します(デフォルト)。unknown_failure: 失敗の理由が不明な場合に再試行します。script_failure: 次のいずれかの場合に再試行します。- スクリプトが失敗した。
- RunnerがDockerイメージのプルに失敗した。executorが
docker、docker+machine、kubernetesの場合。
api_failure: APIの失敗時に再試行します。stuck_or_timeout_failure: ジョブがスタックした場合、またはタイムアウトした場合に再試行します。runner_system_failure: Runnerのシステムエラーが発生した場合(ジョブのセットアップの失敗など)に再試行します。runner_unsupported: Runnerがサポートされていない場合に再試行します。stale_schedule: 遅延ジョブを実行できなかった場合に再試行します。job_execution_timeout: ジョブに対して設定されている最大実行時間をスクリプトが超過した場合に再試行します。archived_failure: ジョブがアーカイブされていて実行できない場合に再試行します。unmet_prerequisites: ジョブの前提条件タスクが正常に完了しなかった場合に再試行します。scheduler_failure: スケジューラーがジョブをRunnerに割り当てられなかった場合に再試行します。data_integrity_failure: ジョブで不明な問題が発生した場合に再試行します。
retry:whenの例(単一の失敗タイプ):
test:
script: rspec
retry:
max: 2
when: runner_system_failureRunnerのシステムエラー以外の失敗が発生した場合、このジョブは再試行されません。
retry:whenの例(複数の失敗タイプの配列):
test:
script: rspec
retry:
max: 2
when:
- runner_system_failure
- stuck_or_timeout_failureretry:exit_codes
retry:exit_codesは、retry:maxと組み合わせて使用し、失敗の特定のケースでのみジョブを再試行します。retry:maxは、retryと同様に最大再試行回数であり、指定できる値は0、1、または2です。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- 1つの終了コード。
- 終了コードの配列。
retry:exit_codesの例:
test_job_1:
script:
- echo "Run a script that results in exit code 1. This job isn't retried."
- exit 1
retry:
max: 2
exit_codes: 137
test_job_2:
script:
- echo "Run a script that results in exit code 137. This job will be retried."
- exit 137
retry:
max: 1
exit_codes:
- 255
- 137関連トピック:
変数を使用して、ジョブ実行の特定のステージに対する再試行回数を指定できます。
rules
rulesを使用して、パイプラインにジョブを含めたり除外したりすることができます。
パイプラインの作成時にルールが評価され、順番に評価されます。一致するルールが見つかると、それ以降のルールはチェックされず、設定に応じてジョブがパイプラインに含まれるか除外されます。どのルールにも一致しなかった場合、ジョブはパイプラインに追加されません。
rulesはルールの配列を受け入れます。各ルールには、少なくとも以下のいずれか1つを含める必要があります。
ifchangesexistswhen
必要に応じて、以下を組み合わせることもできます。
allow_failureneedsvariablesinterruptible
複数のキーワードを組み合わせて、複雑なルールを作成することもできます。
ジョブがパイプラインに追加されるのは次の場合です。
if、changes、またはexistsのルールに一致し、かつ、そのルールがwhen: on_success(定義されていない場合のデフォルト)、when: delayed、またはwhen: alwaysにより設定されている場合。when: on_success、when: delayed、またはwhen: alwaysのみで構成されたルールに到達した場合。
ジョブがパイプラインに追加されないのは次の場合です。
- どのルールにも一致しなかった場合。
- ルールに一致し、かつ
when: neverが指定されている場合。
その他の例については、rulesでジョブの実行タイミングを指定するを参照してください。
rules:if
rules:if句を使用して、ジョブをパイプラインに追加する条件を指定します。
ifステートメントがtrueの場合、ジョブをパイプラインに追加します。ifステートメントがtrueでも、when: neverと組み合わされている場合、ジョブをパイプラインに追加しません。ifステートメントがfalseの場合、次のrules項目(他に存在する場合)をチェックします。
if句は次のように評価されます。
- CI/CD変数または定義済みCI/CD変数の値に基づいて評価される(一部例外あり)。
rulesの実行フローに従って、順番に評価される。
キーワードのタイプ: ジョブ固有およびパイプライン固有。ジョブの一部として使用してジョブの動作を設定するか、またはworkflowとともに使用してパイプラインの動作を設定できます。
サポートされている値:
rules:ifの例:
job:
script: echo "Hello, Rules!"
rules:
- if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^feature/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != $CI_DEFAULT_BRANCH
when: never
- if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^feature/
when: manual
allow_failure: true
- if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME補足情報:
- ネストされた変数を
ifで使用することはできません。詳細については、イシュー327780を参照してください。 - ルールが一致し、かつ
whenが定義されていない場合、ルールはジョブで定義されているwhenを使用します。ジョブにも定義されていない場合のデフォルトはon_successです。 - ジョブレベルの
whenとルール内のwhenを組み合わせることができます。rules内のwhenの設定がジョブレベルのwhenよりも優先されます。 scriptセクションの変数とは異なり、ルール式内の変数は常に$VARIABLE形式です。rules:ifとincludeを組み合わせて使用すると、他の設定ファイルを条件付きでインクルードできます。
=~式と!~式の右辺にあるCI/CD変数は、正規表現として評価されます。
関連トピック:
rules:changes
rules:changesを使用して、特定のファイルに対する変更をチェックすることで、ジョブをパイプラインに追加する条件を指定します。
新しいブランチパイプラインの場合、またはGitのpushイベントがない場合、rules: changesは常にtrueと評価され、ジョブは常に実行されます。タグパイプライン、スケジュールされたパイプライン、手動パイプラインなどのパイプラインはどれも、Gitのpushイベントが関連付けられていません。これらのケースに対応するには、rules: changes: compare_toを使用して、パイプラインのrefと比較するブランチを指定します。
compare_toを使用しない場合、rules: changesはブランチパイプラインまたはマージリクエストパイプラインのみに使用してください。ただし、新しいブランチを作成する際は、rules: changesは依然としてtrueと評価されます。次のように動作します。
- マージリクエストパイプラインでは、
rules:changesは、変更内容をターゲットMRブランチと比較します。 - ブランチパイプラインでは、
rules:changesは、変更内容をブランチの直前のコミットと比較します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
次の要素を任意の数だけ含む配列。
- ファイルのパス。ファイルのパスには、CI/CD変数を含めることができます。
- 次のようなワイルドカードパス。
- 単一のディレクトリ(例:
path/to/directory/*)。 - ディレクトリとそのすべてのサブディレクトリ(例:
path/to/directory/**/*)。
- 単一のディレクトリ(例:
- 同じ拡張子または複数の拡張子を持つすべてのファイルを対象とするワイルドカードglobパス(例:
*.md、path/to/directory/*.{rb,py,sh})。 - ルートディレクトリまたはすべてのディレクトリ内のファイルを対象とするワイルドカードパス(二重引用符で囲む)。例:
"*.json"、"**/*.json"。
rules:changesの例:
docker build:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- Dockerfile
when: manual
allow_failure: true
docker build alternative:
variables:
DOCKERFILES_DIR: 'path/to/dockerfiles'
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- $DOCKERFILES_DIR/**/*この例では:
- パイプラインがマージリクエストパイプラインの場合、
Dockerfileと$DOCKERFILES_DIR/**/*内のファイルに変更がないかどうか確認します。 Dockerfileに変更がある場合、ジョブを手動ジョブとしてパイプラインに追加し、ジョブがトリガーされない場合でもパイプラインの実行を継続します(allow_failure: true)。$DOCKERFILES_DIR/**/*内のファイルに変更がある場合、ジョブをパイプラインに追加します。- リストされたファイルに変更がなかった場合、いずれのジョブもパイプラインに追加しません(
when: neverと同じ)。
補足情報:
- globパターンは、Rubyの
File.fnmatchで、フラグFile::FNM_PATHNAME | File::FNM_DOTMATCH | File::FNM_EXTGLOBを使用して解釈されます。 - パフォーマンス上の理由から、GitLabは
changesパターンまたはファイルパスに対して最大50,000回のチェックを実行します。チェック回数が50,000回を超えると、パターンglobを含むルールは常に一致するようになります。つまり、changesルールは、50,000を超えるファイルが変更された場合、または変更されたファイルが50,000未満でもchangesルールが50,000回以上チェックされた場合、常に一致すると見なします。 rules:changesセクションごとに最大50個のパターンまたはファイルパスを定義できます。- 一致するファイルのいずれかに変更がある場合、
changesはtrueに解決されます(OR演算)。 - その他の例については、
rulesでジョブの実行タイミングを指定するを参照してください。 - 変数とパスの両方に文字
$を使用できます。たとえば、$VAR変数が存在する場合、その値が使用されます。存在しない場合、$はパスの一部として解釈されます。 ./、二重スラッシュ(//)、またはその他の種類の相対パスを使用しないでください。パスは完全な文字列比較で照合され、シェルのように評価されません。
関連トピック:
rules:changes:paths
rules:changesを使用して、特定のファイルが変更された場合にのみジョブをパイプラインに追加するよう指定します。また、rules:changes:pathsを使用して、対象とするファイルを指定します。
rules:changes:pathsは、rules:changesをサブキーなしで使用するのと同じです。補足情報と関連トピックもすべて同じです。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
rules:changesと同じです。
rules:changes:pathsの例:
docker-build-1:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- Dockerfile
docker-build-2:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
paths:
- Dockerfileこの例では、両方のジョブの動作は同じです。
rules:changes:compare_to
rules:changes:compare_toを使用して、rules:changes:pathsで指定されたファイルに対する変更について比較するrefを指定します。
キーワードのタイプ: ジョブキーワード。これはジョブの一部としてのみ使用でき、rules:changes:pathsと組み合わせる必要があります。
サポートされている値:
- ブランチ名(例:
main、branch1、refs/heads/branch1)。 - タグ名(例:
tag1、refs/tags/tag1)。 - コミットSHA(例:
2fg31ga14b)。
CI/CD変数がサポートされています。
rules:changes:compare_toの例:
docker build:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
paths:
- Dockerfile
compare_to: 'refs/heads/branch1'この例では、docker buildジョブがパイプラインに含まれるのは、Dockerfileがrefs/heads/branch1と比較して変更されており、かつパイプラインソースがマージリクエストイベントである場合のみです。
補足情報:
- 状況によっては
compare_toを使用すると、予期しない結果が生じる可能性があります:- マージ結果パイプラインでは、比較ベースはGitLabが作成する内部コミットであるためです。
- フォークしたプロジェクトでは、イシュー424584を参照してください。
関連トピック:
rules:changes:compare_toを使用すると、ブランチが空の場合にジョブをスキップできます。
rules:exists
existsを使用して、特定のファイルまたはディレクトリがリポジトリに存在する場合にジョブを実行します。
キーワードのタイプ: ジョブキーワード。ジョブまたはincludeの一部として使用できます。
サポートされている値:
- ファイルまたはディレクトリパスの配列。パスはプロジェクトディレクトリ(
$CI_PROJECT_DIR)を基準にした相対パスであり、プロジェクトディレクトリの外部に直接リンクすることはできません。ファイルパスでは、globパターンとCI/CD変数を使用できます。
rules:existsの例:
job1:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- exists:
- Dockerfile
job2:
variables:
DOCKERPATH: "**/Dockerfile"
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- exists:
- $DOCKERPATHこの例では:
job1は、リポジトリのルートディレクトリにDockerfileが存在する場合に実行されます。job2は、リポジトリ内の任意の場所にDockerfileが存在する場合に実行されます。
補足情報:
- globパターンは、Rubyの
File.fnmatchで、フラグFile::FNM_PATHNAME | File::FNM_DOTMATCH | File::FNM_EXTGLOBを使用して解釈されます。 - パフォーマンス上の理由から、GitLabは
existsパターンまたはファイルパスに対して最大50,000回のチェックを実行します。チェック回数が50,000回を超えると、パターンglobを含むルールは常に一致するようになります。つまり、existsルールは、ファイル数が50,000を超えるプロジェクト、またはファイル数が50,000未満でもexistsルールのチェック回数が50,000回を超えるプロジェクトでは、常に一致することを前提としています。- パターンglobが複数ある場合、上限は50,000をglobの数で割った数になります。たとえば、パターンglobが5つあるルールでは、ファイル数の上限は10,000になります。
rules:existsセクションごとに最大50個のパターンまたはファイルパスを定義できます。- リスト内のいずれかのファイルが見つかった場合、
existsはtrueに解決されます(OR演算)。 - ジョブレベルの
rules:existsを使用すると、GitLabはパイプラインを実行するプロジェクトとrefでファイルを検索します。includeとrules:existsを組み合わせて使用すると、GitLabはincludeセクションを含むファイルのプロジェクトとrefでファイルまたはディレクトリを検索します。以下を使用する場合、includeセクションを含むプロジェクトと、パイプラインを実行するプロジェクトが異なる場合があります。 rulesの評価はジョブの実行およびアーティファクトのフェッチよりも前に行われるため、rules:existsはアーティファクトの存在をチェックできません。- ディレクトリの存在をテストするには、パスをフォワードスラッシュ(/)で終わらせる必要があります。
rules:exists:paths
rules:exists:pathsは、rules:existsをサブキーなしで使用するのと同じです。補足情報もすべて同じです。
キーワードのタイプ: ジョブキーワード。ジョブまたはincludeの一部として使用できます。
サポートされている値:
- ファイルパスの配列。
rules:exists:pathsの例:
docker-build-1:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
exists:
- Dockerfile
docker-build-2:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
exists:
paths:
- Dockerfileこの例では、両方のジョブの動作は同じです。
rules:exists:project
rules:exists:projectを使用して、rules:exists:pathsのリストに含まれるファイルの検索場所を指定します。rules:exists:pathsと一緒に使用する必要があります。
キーワードのタイプ: ジョブキーワード。ジョブまたはincludeの一部として使用でき、rules:exists:pathsと組み合わせる必要があります。
サポートされている値:
exists:project: ネームスペースとグループを含む、プロジェクトのフルパス。exists:ref: オプション。ファイルの検索に使用するコミットref。refとしては、タグ、ブランチ名、またはSHAを指定できます。指定しない場合、デフォルトはプロジェクトのHEADです。
rules:exists:projectの例:
docker build:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- exists:
paths:
- Dockerfile
project: my-group/my-project
ref: v1.0.0この例では、docker buildジョブがパイプラインに含まれるのは、プロジェクトmy-group/my-projectのv1.0.0タグが付けられたコミットにDockerfileが存在する場合のみです。
rules:when
rules:whenを単独で、または別のルールの一部として使用して、ジョブをパイプラインに追加する条件を制御します。rules:whenはwhenに似ていますが、インプットオプションが若干異なります。
rules:whenルールがif、changes、またはexistsと組み合わされていない場合、ジョブのルールを評価する際にこのルールに到達すると、常に一致します。
キーワードのタイプ: ジョブ固有。ジョブの一部としてのみ使用できます。
サポートされている値:
on_success(デフォルト): 前のステージでジョブが失敗しなかった場合にのみ、ジョブを実行します。on_failure: 前のステージで少なくとも1つのジョブが失敗した場合にのみ、ジョブを実行します。never: 前のステージのジョブのステータスに関係なく、ジョブを実行しません。always: 前のステージのジョブのステータスに関係なく、ジョブを実行します。manual: ジョブを手動ジョブとしてパイプラインに追加します。allow_failureのデフォルト値がfalseに変わります。delayed: ジョブを遅延ジョブとしてパイプラインに追加します。
rules:whenの例:
job1:
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
- if: $CI_COMMIT_REF_NAME =~ /feature/
when: delayed
- when: manual
script:
- echoこの例では、次の条件でjob1がパイプラインに追加されます。
- デフォルトブランチでは、
whenが定義されていない場合のデフォルトの動作であるwhen: on_successが適用されます。 - フィーチャーブランチでは、遅延ジョブとして追加されます。
- それ以外の場合は、手動ジョブとして追加されます。
補足情報:
on_successとon_failureの条件でジョブのステータスを評価する場合:- 前のステージで
allow_failure: trueが設定されているジョブは、失敗しても成功したと見なされます。 - 前のステージでスキップされたジョブ(開始されていない手動ジョブなど)は、成功したと見なされます。
- 前のステージで
rules:when: manualを使用して手動ジョブを追加する場合:allow_failureはデフォルトでfalseになります。このデフォルトは、when: manualを使用して手動ジョブを追加する場合の動作とは逆になります。rulesの外部で定義されたwhen: manualと同じ動作を実現するには、rules: allow_failureをtrueに設定します。
rules:allow_failure
rulesでallow_failure: trueを使用して、ジョブが失敗してもパイプラインが停止しないようにします。
allow_failure: trueは、手動ジョブでも使用できます。パイプラインは、手動ジョブの結果を待たずに実行を継続します。ルールでallow_failure: falseとwhen: manualを組み合わせると、パイプラインは手動ジョブが実行されるまで待機してから続行します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
trueまたはfalse。定義されていない場合のデフォルトはfalseです。
rules:allow_failureの例:
job:
script: echo "Hello, Rules!"
rules:
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
when: manual
allow_failure: trueルールに一致する場合、ジョブはallow_failure: trueが設定された手動ジョブになります。
補足情報:
- ルールレベルの
rules:allow_failureはジョブレベルのallow_failureをオーバーライドし、特定のルールがジョブをトリガーする場合にのみ適用されます。
rules:needs
ルールでneedsを使用して、特定の条件に応じてジョブのneedsを更新します。条件がルールに一致すると、ジョブのneeds設定は、ルール内のneedsで完全に置き換えられます。
キーワードのタイプ: ジョブ固有。ジョブの一部としてのみ使用できます。
サポートされている値:
- ジョブ名(文字列)の配列。
- ジョブ名と、必要に応じて追加の属性を含めたハッシュ。
- 特定の条件が満たされた場合に、ジョブのneedsをnoneに設定するための空の配列(
[])。
rules:needsの例:
build-dev:
stage: build
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
script: echo "Feature branch, so building dev version..."
build-prod:
stage: build
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
script: echo "Default branch, so building prod version..."
tests:
stage: test
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
needs: ['build-dev']
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
needs: ['build-prod']
script: echo "Running dev specs by default, or prod specs when default branch..."この例では:
- パイプラインがデフォルトブランチではないブランチで実行され、その結果ルールが最初の条件に一致した場合、
specsジョブにはbuild-devジョブが必要です。 - パイプラインがデフォルトブランチで実行され、その結果ルールが2番目の条件に一致した場合、
specsジョブにはbuild-prodジョブが必要です。
補足情報:
- ルール内の
needsは、ジョブレベルで定義されているneedsをオーバーライドします。オーバーライドされた場合の動作は、ジョブレベルのneedsと同じです。 - ルール内の
needsは、artifactsとoptionalを受け入れます。
rules:variables
rulesでvariablesを使用して、特定の条件に応じて変数を定義します。
キーワードのタイプ: ジョブ固有。ジョブの一部としてのみ使用できます。
サポートされている値:
VARIABLE-NAME: value形式の変数のハッシュ。
rules:variablesの例:
job:
variables:
DEPLOY_VARIABLE: "default-deploy"
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
variables: # Override DEPLOY_VARIABLE defined
DEPLOY_VARIABLE: "deploy-production" # at the job level.
- if: $CI_COMMIT_REF_NAME =~ /feature/
variables:
IS_A_FEATURE: "true" # Define a new variable.
script:
- echo "Run script with $DEPLOY_VARIABLE as an argument"
- echo "Run another script if $IS_A_FEATURE exists"rules:interruptible
ルールでinterruptibleを使用して、特定の条件に応じてジョブのinterruptible値を更新します。
キーワードのタイプ: ジョブ固有。ジョブの一部としてのみ使用できます。
サポートされている値:
trueまたはfalse。
rules:interruptibleの例:
job:
script: echo "Hello, Rules!"
interruptible: true
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
interruptible: false # Override interruptible defined at the job level.
- when: on_success補足情報:
- ルールレベルの
rules:interruptibleはジョブレベルのinterruptibleをオーバーライドし、特定のルールがジョブをトリガーする場合にのみ適用されます。
run
- ステータス: 実験的機能
runを使用して、ジョブ内で実行する一連のステップを定義します。各ステップは、スクリプトまたは定義済みステップのいずれかになります。
オプションで環境変数と入力を指定することもできます。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- ハッシュの配列。各ハッシュは次のキーを指定したステップを表します。
name: ステップの名前を表す文字列。script: 実行するシェルコマンドを含む文字列。step: 実行する定義済みステップを識別する文字列。env: オプション。このステップに固有の環境変数のハッシュ。inputs: オプション。定義済みステップの入力パラメータのハッシュ。
各配列のエントリにnameは必須であり、scriptまたはstepのいずれか一方(両方は不可)を指定する必要があります。
runの例:
job:
run:
- name: 'hello_steps'
script: 'echo "hello from step1"'
- name: 'bye_steps'
step: gitlab.com/gitlab-org/ci-cd/runner-tools/echo-step@main
inputs:
echo: 'bye steps!'
env:
var1: 'value 1'この例では、ジョブには次の2つのステップがあります。
hello_stepsが、Shellコマンドechoを実行します。bye_stepsが、環境変数とインプットパラメータを指定した定義済みステップを使用します。
補足情報:
- ステップには
scriptかstepキーのいずれか一方を指定できます。両方を指定することはできません。 runの設定を、既存のキーワードscript、after_script、before_scriptと一緒に使用することはできません。- 複数行のスクリプトは、YAMLブロックスカラー構文を使用して定義できます。
script
scriptを使用して、Runnerが実行するコマンドを指定します。
トリガージョブを除くすべてのジョブでは、scriptキーワードが必須です。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値: 次の内容を含む配列。
CI/CD変数がサポートされています。
scriptの例:
job1:
script: "bundle exec rspec"
job2:
script:
- uname -a
- bundle exec rspec補足情報:
script内で特殊文字を使用する場合は、単一引用符(')または二重引用符(")を使用する必要があります。
関連トピック:
- ゼロ以外の終了コードを無視できます。
scriptでカラーコードを使用すると、ジョブログのレビューが容易になります。- カスタムの折りたたみ可能なセクションを作成して、ジョブログ出力をシンプルにできます。
secrets
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
secretsを使用して、次のようなCI/CDシークレットを指定します。
secrets:vault
secrets:vaultを使用して、HashiCorp Vaultによって提供されるシークレットを指定します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
engine:name: シークレットエンジンの名前。kv-v2(デフォルト)、kv-v1、またはgenericのいずれか。engine:path: シークレットエンジンのパス。path: シークレットのパス。field: パスワードが格納されているフィールドの名前。
secrets:vaultの例:
すべての詳細を明示的に指定し、KV-V2シークレットエンジンを使用するには、次のようにします。
job:
secrets:
DATABASE_PASSWORD: # Store the path to the secret in this CI/CD variable
vault: # Translates to secret: `ops/data/production/db`, field: `password`
engine:
name: kv-v2
path: ops
path: production/db
field: passwordこの構文は短縮できます。短縮構文では、engine:nameとengine:pathがどちらもデフォルトでkv-v2になります。
job:
secrets:
DATABASE_PASSWORD: # Store the path to the secret in this CI/CD variable
vault: production/db/password # Translates to secret: `kv-v2/data/production/db`, field: `password`短縮構文でカスタムシークレットエンジンのパスを指定するには、@で始まるサフィックスを追加します。
job:
secrets:
DATABASE_PASSWORD: # Store the path to the secret in this CI/CD variable
vault: production/db/password@ops # Translates to secret: `ops/data/production/db`, field: `password`secrets:gcp_secret_manager
secrets:gcp_secret_managerを使用して、GCP Secret Managerによって提供されるシークレットを指定します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
name: シークレットの名前。version: シークレットのバージョン。
secrets:gcp_secret_managerの例:
job:
secrets:
DATABASE_PASSWORD:
gcp_secret_manager:
name: 'test'
version: 2関連トピック:
secrets:azure_key_vault
secrets:azure_key_vaultを使用して、Azure Key Vaultによって提供されるシークレットを指定します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
name: シークレットの名前。version: シークレットのバージョン。
secrets:azure_key_vaultの例:
job:
secrets:
DATABASE_PASSWORD:
azure_key_vault:
name: 'test'
version: 'test'関連トピック:
secrets:file
secrets:fileを使用して、シークレットをfileまたはvariableタイプのCI/CD変数として格納するよう設定します。
デフォルトでは、シークレットはfileタイプのCI/CD変数としてジョブに渡されます。シークレットの値がファイルに保存され、変数にはそのファイルのパスが格納されます。
ソフトウェアでfileタイプのCI/CD変数を使用できない場合は、file: falseを設定して、シークレットの値を変数に直接保存してください。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
true(デフォルト)またはfalse。
secrets:fileの例:
job:
secrets:
DATABASE_PASSWORD:
vault: production/db/password@ops
file: false補足情報:
fileキーワードはCI/CD変数の設定であり、vaultセクションではなくCI/CD変数名の下にネストする必要があります。
secrets:token
secrets:tokenを使用して、トークンのCI/CD変数を参照することにより、外部シークレットプロバイダーで認証する際に使用するトークンを明示的に選択します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- IDトークンの名前。
secrets:tokenの例:
job:
id_tokens:
AWS_TOKEN:
aud: https://aws.example.com
VAULT_TOKEN:
aud: https://vault.example.com
secrets:
DB_PASSWORD:
vault: gitlab/production/db
token: $VAULT_TOKEN補足情報:
tokenキーワードが設定されておらず、トークンが1つしか定義されていない場合、定義されたトークンが自動的に使用されます。- 複数のトークンが定義されている場合は、
tokenキーワードを設定して、使用するトークンを指定する必要があります。使用するトークンを指定しない場合、ジョブの実行ごとにどのトークンが使用されるかを予測することはできません。
services
servicesを使用して、スクリプトの正常な実行に必要な追加のDockerイメージを指定します。servicesイメージは、imageキーワードで指定されたイメージにリンクされます。
ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインにdefault:servicesが定義されていて、ジョブにもservicesがある場合、ジョブの設定が優先され、デフォルト設定は使用されません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値: サービスイメージの名前(必要に応じてレジストリパスを含む)。次のいずれかの形式で指定します。
<image-name>(<image-name>にlatestタグを付けた場合と同じ)<image-name>:<tag><image-name>@<digest>
CI/CD変数がサポートされていますが、aliasには使用できません。
servicesの例:
default:
image:
name: ruby:2.6
entrypoint: ["/bin/bash"]
services:
- name: my-postgres:11.7
alias: db-postgres
entrypoint: ["/usr/local/bin/db-postgres"]
command: ["start"]
before_script:
- bundle install
test:
script:
- bundle exec rake specこの例では、GitLabはジョブ用に以下の2つのコンテナを起動します。
scriptコマンドを実行するRubyコンテナ。- PostgreSQLコンテナ。Rubyコンテナの
scriptコマンドは、ホスト名にdb-postgresを指定してPostgreSQLデータベースに接続できます。
補足情報:
- トップレベルで
servicesを使用しても、defaultセクションでは使用しない場合、非推奨になります。
関連トピック:
servicesで使用可能な設定。.gitlab-ci.ymlファイルでservicesを定義する。- DockerコンテナでCI/CDジョブを実行する。
- Dockerを使用してDockerイメージをビルドする。
services:name
サービスに使用するイメージの完全名。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値: 必要に応じてレジストリパスを含むサービスイメージの名前を、次のいずれかの形式で指定します:
<image-name>(<image-name>にlatestタグを付けた場合と同じ)<image-name>:<tag><image-name>@<digest>
CI/CD変数がサポートされています。
services:nameの例:
services:
- name: postgres:11.7
- name: registry.example.com/my-org/custom-service:latest補足情報:
- 複数の同一のサービスイメージを使用する場合、またはサービスイメージ名が長い場合は、
aliasを使用して一意の名前エイリアスを定義します。 entrypoint、command、variablesなどの他のサービスオプションで使用する場合、nameキーワードが必要です。- 詳細については、サービスへのアクセスを参照してください。
services:alias
ジョブのコンテナからサービスにアクセスするための追加エイリアス。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値: スペースまたはコンマで区切られた1つ以上のエイリアスを含む文字列。
services:aliasの例:
services:
- name: postgres:11.7
alias: db,postgres,pg
- name: mysql:latest
alias: mysql-1補足情報:
- 複数のエイリアスは、スペースまたはカンマで区切って指定できます。
- 詳細については、サービスへのアクセスおよびKubernetes executorのサービスコンテナ名としてエイリアスを使用するを参照してください。
services:docker
services:dockerを使用して、GitLab RunnerのDocker executorにオプションを渡します。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
Docker executorのオプションを定義するハッシュ。以下を含めることができます。
platform: プルするイメージのアーキテクチャを選択します。指定しない場合、デフォルトはホストRunnerと同じプラットフォームです。user: コンテナの実行時に使用するユーザー名またはUIDを指定します。
services:dockerの例:
arm-sql-job:
script: echo "Run sql tests in service container"
image: ruby:2.6
services:
- name: super/sql:experimental
docker:
platform: arm64/v8
user: dave補足情報:
services:docker:platformは、docker pull --platformオプションにマップされます。services:docker:userは、docker run --userオプションにマップされます。
services:kubernetes
services:kubernetesを使用して、GitLab Runner Kubernetes executorにオプションを渡します。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
Kubernetes executorのオプションを定義するハッシュ。以下を含めることができます。
user: コンテナの実行時に使用するユーザー名またはUIDを指定します。UID:GID形式を使用して、GIDを設定することもできます。
UIDのみを使用したservices:kubernetesの例:
arm-sql-job:
script: echo "Run sql tests"
image: ruby:2.6
services:
- name: super/sql:experimental
kubernetes:
user: "1001"UIDとGIDの両方を使用したservices:kubernetesの例:
arm-sql-job:
script: echo "Run sql tests"
image: ruby:2.6
services:
- name: super/sql:experimental
kubernetes:
user: "1001:1001"services:entrypoint
コンテナのエントリポイントとして実行するコマンドまたはスクリプト。
Dockerコンテナの作成時に、entrypointはDockerの--entrypointオプションに変換されます。構文はDockerfileのENTRYPOINTディレクティブに似ており、各Shellトークンは配列内の個別の文字列です。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値: エントリポイントコマンドを表す文字列の配列。
services:entrypointの例:
services:
- name: my-postgres:11.7
entrypoint: ["/usr/local/bin/db-postgres"]services:command
コンテナのコマンドとして使用されるコマンドまたはスクリプト。
イメージ名の後に続く引数として解釈され、Dockerに渡されます。構文はDockerfile CMDディレクティブに似ており、各シェルトークンは配列内の個別の文字列です。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値: コマンドを表す文字列の配列。
services:commandの例:
services:
- name: super/sql:latest
command: ["/usr/bin/super-sql", "run"]services:variables
サービスのみに渡される追加の環境変数。サービス変数は、サービスコンテナにのみ渡され、ジョブコンテナでは使用できません。
構文はジョブ変数と同じです。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値: 環境変数名と値のハッシュ。
services:variablesの例:
services:
- name: postgres:11.7
alias: db
variables:
POSTGRES_DB: "my_custom_db"
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "example"
PGDATA: "/var/lib/postgresql/data"補足情報:
- サービス変数はそれ自体を参照できず、変数の展開または補間をサポートしていません。
- ジョブまたはパイプラインレベルで定義された変数は、自動的にサービスに渡されます。詳細については、サービスへのCI/CD変数の引き渡しを参照してください。
- サービス変数は、定義されている特定のサービスでのみ使用できます。
services:pull_policy
RunnerがDockerイメージをフェッチするために使用するプルポリシー。GitLab Runner 15.1以降が必要です。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- 1つのプルポリシー、または配列で指定する複数のプルポリシー。
always、if-not-present、neverのいずれかを指定できます。
services:pull_policyの例:
job1:
script: echo "A single pull policy."
services:
- name: postgres:11.6
pull_policy: if-not-present
job2:
script: echo "Multiple pull policies."
services:
- name: postgres:11.6
pull_policy: [always, if-not-present]補足情報:
- 定義済みのプルポリシーをRunnerがサポートしていない場合、ジョブは次のようなエラーで失敗します:
ERROR: Job failed (system failure): the configured PullPolicies ([always]) are not allowed by AllowedPullPolicies ([never])。
関連トピック:
stage
stageを使用して、ジョブを実行するステージを定義します。同じstage内のジョブは、並列実行できます(補足情報を参照)。
stageが定義されていない場合、ジョブはデフォルトでtestステージを使用します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値: 次のいずれかの文字列。
- デフォルトステージ。
- ユーザー定義ステージ。
stageの例:
stages:
- build
- test
- deploy
job1:
stage: build
script:
- echo "This job compiles code."
job2:
stage: test
script:
- echo "This job tests the compiled code. It runs when the build stage completes."
job3:
script:
- echo "This job also runs in the test stage."
job4:
stage: deploy
script:
- echo "This job deploys the code. It runs when the test stage completes."
environment: production補足情報:
- ステージ名は255文字以下でなければなりません。
- ジョブが異なる複数のRunnerで実行される場合、並列実行が可能です。
- Runnerが1つしかない場合でも、そのRunnerの
concurrent設定が1より大きければ、ジョブを並列実行できます。
stage: .pre
.preステージを使用して、パイプラインの開始時にジョブを実行します。デフォルトでは、.preはパイプラインの最初のステージです。ユーザー定義ステージは、.preの後に実行されます。stages内で.preを定義する必要はありません。
パイプラインに.preステージまたは.postステージのジョブしか含まれていない場合、そのパイプラインは実行されません。これら以外のステージに少なくとも1つのジョブが必要です。
キーワードのタイプ: ジョブのstageキーワードと組み合わせる場合にのみ使用できます。
stage: .preの例:
stages:
- build
- test
job1:
stage: build
script:
- echo "This job runs in the build stage."
first-job:
stage: .pre
script:
- echo "This job runs in the .pre stage, before all other stages."
job2:
stage: test
script:
- echo "This job runs in the test stage."補足情報:
- パイプラインに
needs: []を指定したジョブと.preステージのジョブがある場合、それらはすべてパイプラインの作成直後に開始されます。needs: []を指定したジョブは、ステージ設定を無視してすぐに開始されます。 - パイプライン実行ポリシーで、
.preの前に実行される.pipeline-policy-preステージを定義できます。
stage: .post
.postステージを使用して、パイプラインの最後にジョブを実行します。デフォルトでは、.postはパイプラインの最後のステージです。ユーザー定義ステージは、.postの前に実行されます。stages内で.postを定義する必要はありません。
パイプラインに.preステージまたは.postステージのジョブしか含まれていない場合、そのパイプラインは実行されません。これら以外のステージに少なくとも1つのジョブが必要です。
キーワードのタイプ: ジョブのstageキーワードと組み合わせる場合にのみ使用できます。
stage: .postの例:
stages:
- build
- test
job1:
stage: build
script:
- echo "This job runs in the build stage."
last-job:
stage: .post
script:
- echo "This job runs in the .post stage, after all other stages."
job2:
stage: test
script:
- echo "This job runs in the test stage."補足情報:
- パイプライン実行ポリシーで、
.postの後に実行される.pipeline-policy-postステージを定義できます。
tags
tagsを使用して、プロジェクトで使用可能なすべてのRunnerのリストから特定のRunnerを選択します。
Runnerを登録する際に、Runnerのタグ(ruby、postgres、developmentなど)を指定できます。ジョブを取得して実行するには、ジョブにリストされているすべてのタグがRunnerに割り当てられている必要があります。
ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインにdefault:tagsが定義されていて、ジョブにもtagsがある場合、ジョブの設定が優先され、デフォルト設定は使用されません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値:
- タグ名の配列(大文字と小文字が区別されます)。
- CI/CD変数がサポートされています。
tagsの例:
job:
tags:
- ruby
- postgresこの例では、ジョブを実行できるのは、rubyタグとpostgresタグの両方が指定されたRunnerのみです。
補足情報:
- タグの数は
50未満でなければなりません。
関連トピック:
- タグを使用してRunnerが実行できるジョブを制御する
- 並列マトリックスジョブごとに異なるRunnerタグを選択する
- ホストRunnerのRunnerタグ:
timeout
timeoutを使用して、特定のジョブのタイムアウトを設定します。ジョブがタイムアウトより長く実行されると、ジョブは失敗します。
ジョブレベルのタイムアウトは、プロジェクトレベルのタイムアウトよりも長くすることができますが、Runnerのタイムアウトよりも長くすることはできません。
キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。
サポートされている値: 自然言語で記述された期間。たとえば、以下の表記はすべて同等です。
3600 seconds60 minutesone hour
timeoutの例:
build:
script: build.sh
timeout: 3 hours 30 minutes
test:
script: rspec
timeout: 3h 30mtrigger
triggerを使用して、ジョブが次のいずれかのダウンストリームパイプラインを開始する「トリガージョブ」であることを宣言します。
トリガージョブで使用できるGitLab CI/CD設定キーワードは限られています。トリガージョブで使用できるキーワードは次のとおりです。
allow_failure。extends。needs。ただし、needs:projectは除きます。onlyとexcept。parallel。rules。stage。trigger。variables。when(値がon_success、on_failure、alwaysの場合のみ)。resource_group。environment。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- マルチプロジェクトパイプラインの場合、ダウンストリームプロジェクトのパス。GitLab 15.3以降はCI/CD変数がサポートされています。ただし、ジョブ専用変数はサポートされていません。代わりに、
trigger:projectを使用してください。 - 子パイプラインの場合は、
trigger:includeを使用します。
triggerの例:
trigger-multi-project-pipeline:
trigger: my-group/my-project補足情報:
triggerと同じジョブでwhen:manualを使用できますが、APIを使用してwhen:manualのトリガージョブを開始することはできません。詳細については、イシュー284086を参照してください。- 手動トリガージョブを実行する前に、CI/CD変数を手動で指定することはできません。
- トップレベルの
variablesセクション(グローバル)またはトリガージョブ内で定義されたCI/CD変数は、トリガー変数としてダウンストリームパイプラインに転送されます。 - パイプライン変数は、デフォルトではダウンストリームパイプラインに渡されません。これらの変数をダウンストリームパイプラインに転送するには、
trigger:forwardを使用します。 - ジョブ専用変数は、トリガージョブでは使用できません。
- Runnerの
config.tomlで定義された環境変数は、トリガージョブでは使用できず、ダウンストリームパイプラインに渡されません。 - トリガージョブでは
needs:pipeline:jobを使用できません。
関連トピック:
- マルチプロジェクトパイプライン設定の例。
- 特定のブランチ、タグ、またはコミットのパイプラインを実行するには、トリガートークンを使用してパイプライントリガーAPIに対して認証を行えます。トリガートークンは、
triggerキーワードとは異なります。
trigger:inputs
ダウンストリームパイプライン設定でspec:inputsを使用している場合、trigger:inputsを使用して、マルチプロジェクトパイプラインのインプットを設定します。
trigger:inputsの例:
trigger:
- project: 'my-group/my-project'
inputs:
website: "My website"trigger:include
trigger:includeを使用して、ジョブが子パイプラインを開始する「トリガージョブ」であることを宣言します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- 子パイプラインの設定ファイルのパス。
trigger:includeの例:
trigger-child-pipeline:
trigger:
include: path/to/child-pipeline.gitlab-ci.yml補足情報:
使用方法:
trigger:include:artifactを使用して、動的子パイプラインをトリガーします。ダウンストリームパイプライン設定で
spec:inputsを使用している場合、trigger:include:inputsを使用してインプットを設定します。以下の場合の、子パイプライン構成ファイルへのパスの
trigger:include:local:複数の子パイプライン構成ファイルの組み合わせ。
trigger:include:inputsと組み合わせて、入力を子パイプラインに渡します。例:staging-job: trigger: include: - local: path/to/child-pipeline.yml inputs: environment: staging
trigger:include:projectを使用して、別のプロジェクト内の構成ファイルを使用して子パイプラインをトリガーします。ファイルに他のincludeエントリが含まれている場合、GitLabはファイルをホストしているプロジェクトではなく、パイプラインを実行しているプロジェクト内のファイルを検索します。trigger:include:templateを使用して、CI/CDテンプレートで子パイプラインをトリガーします。
関連トピック:
trigger:include:inputs
ダウンストリームパイプライン設定でspec:inputsを使用している場合、trigger:include:inputsを使用して、子パイプラインのインプットを設定します。
trigger:inputsの例:
trigger-job:
trigger:
include:
- local: path/to/child-pipeline.yml
inputs:
website: "My website"trigger:project
trigger:projectを使用して、ジョブがマルチプロジェクトパイプラインを開始する「トリガージョブ」であることを宣言します。
デフォルトでは、マルチプロジェクトパイプラインはデフォルトブランチに対してトリガーされます。別のブランチを指定するには、trigger:branchを使用します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- ダウンストリームプロジェクトのパス。GitLab 15.3以降はCI/CD変数がサポートされています。ただし、ジョブ専用変数はサポートされていません。
trigger:projectの例:
trigger-multi-project-pipeline:
trigger:
project: my-group/my-project別のブランチに対するtrigger:projectの例:
trigger-multi-project-pipeline:
trigger:
project: my-group/my-project
branch: development関連トピック:
- マルチプロジェクトパイプライン設定の例。
- 特定のブランチ、タグ、またはコミットのパイプラインを実行するには、トリガートークンを使用してパイプライントリガーAPIに対して認証することもできます。トリガートークンは、
triggerキーワードとは異なります。
trigger:strategy
trigger:strategyを使用して、ダウンストリームパイプラインが完了するまではtriggerジョブが成功とマークされないように制御します。
この動作はデフォルトとは異なります。デフォルトでは、ダウンストリームパイプラインが作成されるとすぐに、triggerジョブは成功とマークされます。
この設定により、パイプラインは並列ではなく直列で実行されます。
サポートされている値:
mirror: ダウンストリームパイプラインのステータスを正確にミラーリングします。depend: 推奨されません。mirrorを代わりに使用してください。トリガージョブステータスは、ダウンストリームパイプラインのステータスに応じて、失敗、成功、または実行中を示します。補足情報を参照してください。
trigger:strategyの例:
trigger_job:
trigger:
include: path/to/child-pipeline.yml
strategy: mirrorこの例では、後続ステージのジョブは、トリガーされたパイプラインが正常に完了するまで開始されません。
補足情報:
- ダウンストリームパイプラインのオプションの手動ジョブは、ダウンストリームパイプラインまたはアップストリームのトリガージョブのステータスに影響を与えません。ダウンストリームパイプラインは、オプションの手動ジョブを実行しなくても正常に完了できます。
- デフォルトでは、後続ステージのジョブは、トリガージョブが完了するまで開始されません。
- ダウンストリームパイプラインのブロック手動ジョブは、トリガージョブが成功または失敗としてマークされる前に実行する必要があります。
strategy:dependを使用する場合(もはや推奨されていません。strategy:mirrorを代わりに使用してください):- 手動ジョブが原因でダウンストリームパイプラインのステータスが手動アクション待ち( )になっている場合、トリガージョブは実行中( )と表示されます。
- ダウンストリームパイプラインに失敗したジョブがあっても、そのジョブで
allow_failure: trueを使用している場合、ダウンストリームパイプラインは成功と見なされ、トリガージョブは成功と表示されます。
trigger:forward
trigger:forwardを使用して、ダウンストリームパイプラインに転送する内容を指定します。親子パイプラインとマルチプロジェクトパイプラインの両方に転送する内容を制御できます。
デフォルトでは、ネストされたダウンストリームパイプラインでは、転送された変数が再度転送されることはありません。再度転送するには、ネストされたダウンストリームのトリガージョブでもtrigger:forwardを使用する必要があります。
サポートされている値:
yaml_variables:true(デフォルト)、またはfalse。trueの場合、トリガージョブで定義されている変数がダウンストリームパイプラインに渡されます。pipeline_variables:trueまたはfalse(デフォルト)。trueの場合、パイプライン変数がダウンストリームパイプラインに渡されます。
trigger:forwardの例:
CI/CD変数MYVAR = my valueを指定して、このパイプラインを手動で実行します。
variables: # default variables for each job
VAR: value
---
# Default behavior:
---
# - VAR is passed to the child
---
# - MYVAR is not passed to the child
child1:
trigger:
include: .child-pipeline.yml
---
# Forward pipeline variables:
---
# - VAR is passed to the child
---
# - MYVAR is passed to the child
child2:
trigger:
include: .child-pipeline.yml
forward:
pipeline_variables: true
---
# Do not forward YAML variables:
---
# - VAR is not passed to the child
---
# - MYVAR is not passed to the child
child3:
trigger:
include: .child-pipeline.yml
forward:
yaml_variables: false補足情報:
trigger:forwardでダウンストリームパイプラインに転送されるCI/CD変数は、優先順位の高いパイプライン変数です。ダウンストリームパイプラインで同じ名前の変数が定義されている場合、その変数は通常、転送された変数によって上書きされます。
when
whenを使用して、ジョブの実行条件を設定します。ジョブで定義されていない場合、デフォルト値はwhen: on_successです。
キーワードのタイプ: ジョブキーワード。ジョブの一部として使用できます。when: alwaysとwhen: neverは、workflow:rulesでも使用できます。
サポートされている値:
on_success(デフォルト): 前のステージでジョブが失敗しなかった場合にのみ、ジョブを実行します。on_failure: 前のステージで少なくとも1つのジョブが失敗した場合にのみ、ジョブを実行します。never: 前のステージのジョブのステータスに関係なく、ジョブを実行しません。rulesセクションまたはworkflow: rulesでのみ使用できます。always: 前のステージのジョブのステータスに関係なく、ジョブを実行します。manual: ジョブを手動ジョブとしてパイプラインに追加します。delayed: ジョブを遅延ジョブとしてパイプラインに追加します。
whenの例:
stages:
- build
- cleanup_build
- test
- deploy
- cleanup
build_job:
stage: build
script:
- make build
cleanup_build_job:
stage: cleanup_build
script:
- cleanup build when failed
when: on_failure
test_job:
stage: test
script:
- make test
deploy_job:
stage: deploy
script:
- make deploy
when: manual
environment: production
cleanup_job:
stage: cleanup
script:
- cleanup after jobs
when: alwaysこの例では、スクリプトは次のように動作します。
build_jobが失敗した場合にのみ、cleanup_build_jobを実行します。- 成功か失敗かに関係なく、常にパイプラインの最後のステップとして
cleanup_jobを実行します。 - GitLab UIで手動で実行した場合、
deploy_jobを実行します。
補足情報:
on_successとon_failureの条件でジョブのステータスを評価する場合:- 前のステージで
allow_failure: trueが設定されているジョブは、失敗しても成功したと見なされます。 - 前のステージでスキップされたジョブ(開始されていない手動ジョブなど)は、成功したと見なされます。
- 前のステージで
when: manualの場合、allow_failureのデフォルト値はtrueです。rules:when: manualの場合、デフォルト値はfalseに変わります。
関連トピック:
manual_confirmation
manual_confirmationとwhen: manualを組み合わせて使用し、手動ジョブのカスタム確認メッセージを定義します。when: manualで手動ジョブが定義されていない場合、このキーワードは効果がありません。
手動確認は、environment:action: stopを使用する環境停止ジョブを含む、すべての手動ジョブで機能します。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
サポートされている値:
- 確認メッセージの文字列。
manual_confirmationの例:
delete_job:
stage: post-deployment
script:
- make delete
when: manual
manual_confirmation: 'Are you sure you want to delete this environment?'
stop_production:
stage: cleanup
script:
- echo "Stopping production environment"
environment:
name: production
action: stop
when: manual
manual_confirmation: "Are you sure you want to stop the production environment?"start_in
start_inを使用して、ジョブの作成後、指定された期間、ジョブの実行を遅らせます。ジョブにwhen: delayedを設定する必要があります。
キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。
Possible inputs: 秒、分、または時間単位の時間。1週間以下である必要があります。有効な値の例:
'5'(5秒)'10 seconds''30 minutes''1 hour''1 day'
start_inの例:
deploy_production:
stage: deploy
script:
- echo "Deploying to production"
when: delayed
start_in: 30 minutesこの例では、deploy_productionジョブは、前のステージが完了してから30分後に開始されます。
補足情報:
- タイマーは、前のジョブが終了したときではなく、ジョブのステージが開始されたときに開始されます。
- 遅延ジョブを手動ですぐに開始するには、パイプラインビューでPlay( )を選択します。
- 最小遅延期間は1秒、最大遅延期間は1週間です。
start_inは、whenがdelayedに設定されている場合にのみ機能します。whenに他の値を使用すると、構成が無効になります。ジョブがrulesを使用している場合、start_inおよびwhenは、ジョブレベルではなく、rulesで定義する必要があります。そうでない場合は、検証エラー(config key may not be used with 'rules': start_in)が表示されます。start_inはworkflow:rulesではサポートされていませんが、構文違反は発生しません。
関連トピック:
variables
variablesを使用して、CI/CD変数を定義します。
変数は、CI/CDジョブ内で定義するか、またはすべてのジョブに対するデフォルトCI/CD変数を定義するトップレベル(グローバル)キーワードとして定義できます。
補足情報:
- YAMLで定義されたすべての変数は、リンクされているDockerサービスコンテナにも設定されます。
- YAMLで定義された変数は、機密性の低いプロジェクトの設定を目的としています。機密情報は、保護された変数またはCI/CDシークレットに保存してください。
- 手動パイプライン変数とスケジュールされたパイプライン変数は、デフォルトではダウンストリームパイプラインに渡されません。これらの変数をダウンストリームパイプラインに転送するには、
trigger:forwardを使用します。
関連トピック:
- 定義済み変数は、Runnerが自動的に作成し、ジョブで使用できるようにする変数です。
- 変数でRunnerの動作を設定できます。
ジョブvariables
ジョブ変数は、ジョブのscript、before_script、after_scriptセクション内のコマンド、および一部のジョブキーワードで使用できます。各ジョブキーワードが変数をサポートしているかについては、それぞれのサポートされている値セクションを確認してください。
ジョブ変数を、includeなどのグローバルキーワードの値として使用することはできません。
サポートされている値: 変数名と値のペア:
- 名前には数字、英字、アンダースコア(
_)のみを使用できます。一部のShellでは、最初の文字が英字でなければなりません。 - 値は文字列でなければなりません。
CI/CD変数がサポートされています。
ジョブvariablesの例:
review_job:
variables:
DEPLOY_SITE: "https://dev.example.com/"
REVIEW_PATH: "/review"
script:
- deploy-review-script --url $DEPLOY_SITE --path $REVIEW_PATHこの例では:
review_jobでは、DEPLOY_SITEとREVIEW_PATHのジョブ変数が定義されています。これらのジョブ変数は、どちらもscriptセクションで使用できます。
デフォルトvariables
トップレベルのvariablesセクションで定義されている変数は、すべてのジョブに対するデフォルト変数として機能します。
各デフォルト変数は、パイプライン内のあらゆるジョブで使用できます。ただし、ジョブで同じ名前の変数がすでに定義されている場合を除きます。ジョブ内で定義された変数が優先されるため、同じ名前のデフォルト変数の値はジョブ内で使用できません。
ジョブ変数と同様に、includeなどの他のグローバルキーワードの値としてデフォルト変数を使用することはできません。
サポートされている値: 変数名と値のペア:
- 名前には数字、英字、アンダースコア(
_)のみを使用できます。一部のShellでは、最初の文字が英字でなければなりません。 - 値は文字列でなければなりません。
CI/CD変数がサポートされています。
variablesの例:
variables:
DEPLOY_SITE: "https://example.com/"
deploy_job:
stage: deploy
script:
- deploy-script --url $DEPLOY_SITE --path "/"
environment: production
deploy_review_job:
stage: deploy
variables:
DEPLOY_SITE: "https://dev.example.com/"
REVIEW_PATH: "/review"
script:
- deploy-review-script --url $DEPLOY_SITE --path $REVIEW_PATH
environment: productionこの例では:
deploy_jobには変数が定義されていません。デフォルトのDEPLOY_SITE変数がジョブにコピーされ、それをscriptセクションで使用できます。deploy_review_jobにはすでにDEPLOY_SITE変数が定義されているため、デフォルトのDEPLOY_SITEはジョブにコピーされません。このジョブには、REVIEW_PATHジョブ変数も定義されています。これらのジョブ変数は、どちらもscriptセクションで使用できます。
variables:description
descriptionキーワードを使用して、デフォルト変数の説明を定義します。この説明は、パイプラインを手動で実行する際に、事前に入力された変数名とともに表示されます。
キーワードのタイプ: このキーワードはデフォルトvariablesでのみ使用可能です。ジョブvariablesでは使用できません。
サポートされている値:
- 文字列。Markdownを使用できます。
variables:descriptionの例:
variables:
DEPLOY_NOTE:
description: "The deployment note. Explain the reason for this deployment."補足情報:
valueを指定せずに使用した場合、手動でトリガーされなかったパイプラインに変数が存在し、そのデフォルト値は空文字列('')になります。
variables:value
valueキーワードを使用して、パイプラインレベル(デフォルト)の変数の値を定義します。variables: descriptionと組み合わせて使用すると、変数の値は、パイプラインを手動で実行したときに事前に入力されます。
キーワードのタイプ: このキーワードはデフォルトvariablesでのみ使用可能です。ジョブvariablesでは使用できません。
サポートされている値:
- 文字列。
variables:valueの例:
variables:
DEPLOY_ENVIRONMENT:
value: "staging"
description: "The deployment target. Change this variable to 'canary' or 'production' if needed."補足情報:
variables: descriptionなしで使用した場合、variablesと同じ動作になります。
variables:options
variables:optionsを使用して、パイプラインを手動で実行する際にUIで選択できる値の配列を定義します。
variables: valueと組み合わせて使用する必要があります。valueに指定する文字列の条件は次のとおりです。
options配列内の文字列のいずれかを指定する必要があります。- デフォルトの選択肢として使用されます。
descriptionがない場合、このキーワードは効果がありません。
キーワードのタイプ: このキーワードはデフォルトvariablesでのみ使用可能です。ジョブvariablesでは使用できません。
サポートされている値:
- 文字列の配列。
variables:optionsの例:
variables:
DEPLOY_ENVIRONMENT:
value: "staging"
options:
- "production"
- "staging"
- "canary"
description: "The deployment target. Set to 'staging' by default."variables:expand
expandキーワードを使用して、変数を展開可能にするかどうかを設定します。
キーワードのタイプ: このキーワードは、デフォルトとジョブの両方のvariablesで使用できます。
サポートされている値:
true(デフォルト): 変数は展開可能です。false: 変数は展開できません。
variables:expandの例:
variables:
VAR1: value1
VAR2: value2 $VAR1
VAR3:
value: value3 $VAR1
expand: falseVAR2の結果はvalue2 value1です。VAR3の結果はvalue3 $VAR1です。
補足情報:
expandキーワードは、デフォルトおよびジョブvariablesキーワードでのみ使用できます。rules:variablesやworkflow:rules:variablesでは使用できません。