正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

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

一部のキーワードではグローバルデフォルトを設定できます。各デフォルトキーワードは、まだそのキーワードが定義されていないすべてのジョブにコピーされます。

デフォルト設定はジョブの設定とマージされません。ジョブにキーワードがすでに定義されている場合、そのキーワードのジョブキーワードが優先され、そのキーワードのデフォルト設定は使用されません。

キーワードのタイプ: グローバルキーワード。

サポートされている値: 以下のキーワードにはカスタムデフォルトを設定できます。

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.0retry: 2は、パイプラインのすべてのジョブのデフォルトキーワードです。
  • rspecジョブではimageretryが定義されていないため、デフォルトのimage: ruby:3.0retry: 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を使用します。

キーワードのタイプ: グローバルキーワード。

サポートされている値:

ルートディレクトリ(/)を基準にしたフルパス:

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:projectinclude: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については以下を検討してください。
    • 特定のSHAハッシュを使用する。これはもっとも安定したオプションです。目的のコミットが確実に参照されるように、40文字の完全なSHAハッシュを使用してください。refに短いSHAハッシュを使用すると、あいまいになる可能性があるためです。
    • 他のプロジェクトの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テンプレートをインクルードします。

キーワードのタイプ: グローバルキーワード。

サポートされている値:

CI/CDテンプレート:

  • すべてのテンプレートは、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

rulesincludeを組み合わせて使用すると、他の設定ファイルを条件付きでインクルードできます。

キーワードのタイプ: グローバルキーワード。

サポートされている値: 次のrulesサブキー:

一部のCI/CD変数がサポートされています

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:integrity

integrityinclude: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

この例では:

  1. build内のすべてのジョブは並列実行されます。
  2. build内のすべてのジョブが成功すると、test内のジョブが並列実行されます。
  3. test内のすべてのジョブが成功すると、deploy内のジョブが並列実行されます。
  4. 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は新しいパイプラインを作成し、job1job2が開始されます。
  • ジョブが完了する前に新しいコミットがブランチにプッシュされると、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を使用して、パイプラインの名前を定義できます。

定義された名前はすべてのパイプラインに割り当てられます。名前の先頭または末尾のスペースは削除されます。

サポートされている値:

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と同じキーワードの一部を使用できます。

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_inallow_failureneedsは、workflow:rulesでサポートされていませんが、構文違反にはなりません。効果はありませんが、将来的に構文エラーを引き起こす可能性があるため、workflow:rulesでは使用しないでください。詳細については、イシュー436473を参照してください。

関連トピック:


workflow:rules:variables

workflow:rulesvariablesを使用して、特定のパイプライン条件の変数を定義します。

条件が一致すると変数が作成されます。この変数は、パイプライン内のすべてのジョブで使用できます。すでにその変数がデフォルト変数としてトップレベルで定義されている場合でも、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_VARIABLEjob1-deploy-productionです。
  • job2のDEPLOY_VARIABLEdeploy-productionです。

ブランチがfeatureの場合:

  • job1のDEPLOY_VARIABLEjob1-default-deployであり、IS_A_FEATUREtrueです。
  • job2のDEPLOY_VARIABLEdefault-deployであり、IS_A_FEATUREtrueです。

ブランチがそれ以外の場合:

  • job1のDEPLOY_VARIABLEjob1-default-deployです。
  • job2のDEPLOY_VARIABLEdefault-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機能の動作を設定します。

サポートされている値:

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_commitinterruptibleに設定され、workflow:auto_cancel:on_job_failureallに設定されます。ただし、保護ブランチに対してパイプラインが実行される場合、ルールはデフォルトをon_new_commit: noneon_job_failure: noneでオーバーライドします。たとえば、パイプラインの実行対象によって、動作は次のように変わります。

  • 保護されていないブランチに対して実行される場合、新しいコミットがプッシュされると、test-job1の実行が継続され、test-job2はキャンセルされます。
  • 保護ブランチに対して実行される場合、新しいコミットがプッシュされると、test-job1test-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はオプションです。定義されていない場合、値はありません。

補足情報:

  • インプットが次の条件に該当する場合、パイプラインは検証エラーで失敗します。
    • defaultoptionsの両方を使用しているが、デフォルト値が、リストされているオプションのいずれでもない。
    • defaultregexの両方を使用しているが、デフォルト値が正規表現と一致しない。
    • 値がtypeと一致しない。

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は必須であり、リスト内のいずれかの値で定義する必要があります。

補足情報:

  • 次の場合、パイプラインは検証エラーで失敗します。
    • インプットでoptionsdefaultの両方を使用しているが、デフォルト値が、リストされているオプションのいずれでもない。
    • いずれかのインプットオプションがtypeと一致していない。optionsを使用する場合はstringまたはnumberを指定する必要があり、booleanは使用できない。

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は、typestringの場合にのみ使用できます。numberまたはbooleanの場合は使用できません。
  • /文字で正規表現を囲まないでください。たとえば、/regex.*/ではなくregex.*を使用します。
  • inputs:regexRE2を使用して正規表現を解析します。
  • 正規表現に対する入力の検証は、変数の展開前に行われます。入力テキストに変数の名前が含まれている場合、検証されるのは変数の値ではなく、入力のraw値(変数の名前)です。

spec:inputs:rules

spec:inputs:rulesを使用して、他の入力の値に基づいて、入力の条件付きのoptionsdefaultの値を定義します。

キーワードのタイプ: ヘッダーキーワード。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"

この例では、environmentdevelopmentの場合、ユーザーはsmallまたはmediumインスタンスのみを選択できます。environmentproductionの場合、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は、設定ファイルの先頭にあるヘッダーセクションで宣言する必要があります。

サポートされている値: インクルード場所の配列。localremote、および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キーのみが含まれている必要があります。他のキーは検証エラーを引き起こします。
  • 最初に外部入力がマージされ、次にインライン入力が適用されます。
  • インライン入力は、同じ名前の外部入力よりも優先されます。
  • 複数の入力ファイルを含める場合、指定された順序でマージされます。
  • localremote 、およびprojectインクルードタイプをサポートします。templatecomponent、または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.01.0を返します(version1.0.2を返す場合があります)
    • @~latest~latestを返します(versionは実際のバージョン番号を返します)
    • @abc123abc123を返します(versionnullを返す場合)

関連トピック:


ジョブキーワード

以降のトピックでは、キーワードを使用して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がタイムアウトになるか失敗した場合、ジョブはコード0Job Succeeded)で終了します。
  • after_scriptCI/CDジョブトークンを使用する場合の既知の問題があります。after_scriptコマンドでの認証にジョブトークンを使用することはできますが、ジョブがキャンセルされるとそのトークンは直ちに無効になります。詳細については、イシューを参照してください。
  • ジョブがタイムアウトした場合:
    • after_scriptコマンドはデフォルトでは実行されません。
    • タイムアウト値を設定することで、after_scriptを確実に実行させることができます。そのためには、ジョブのタイムアウトを超えないように、RUNNER_SCRIPT_TIMEOUTRUNNER_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

詳細については、ジョブ実行フローを参照してください。

関連トピック:


allow_failure

allow_failureを使用して、ジョブが失敗した場合にパイプラインの実行を継続するかどうかを決定します。

  • パイプラインで後続のジョブを継続して実行させるには、allow_failure: trueを使用します。
  • パイプラインで後続のジョブの実行を停止させるには、allow_failure: falseを使用します。

ジョブの失敗が許容されている場合(allow_failure: true)、オレンジ色の警告( status_warning )はジョブが失敗したことを示します。ただしパイプラインは成功し、関連するコミットは警告なしで成功としてマークされます。

このような警告は、次の場合に表示されます。

  • ステージ内の他のすべてのジョブが成功した場合。
  • パイプライン内の他のすべてのジョブが成功した場合。

allow_failureのデフォルト値は次のとおりです。

  • 手動ジョブ: true
  • rules内でwhen: manualを使用しているジョブ: false
  • その他すべてのケース: false

キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。

サポートされている値:

  • 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

この例では、job1job2は並列実行されます。

  • job1が失敗した場合、deployステージのジョブは開始されません。
  • job2が失敗した場合、deployステージのジョブは開始できます。

補足情報:

  • allow_failurerulesのサブキーとして使用できます。
  • 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
      - 255

artifacts

artifactsを使用して、ジョブアーティファクトとして保存するファイルを指定します。ジョブアーティファクトは、ジョブが成功した場合、失敗した場合、または常に、ジョブに添付されるファイルとディレクトリのリストです。

アーティファクトは、ジョブの完了後にGitLabに送信されます。サイズが最大アーティファクトサイズよりも小さい場合、GitLab UIでダウンロードできます。

デフォルトでは、後続ステージのジョブは、前のステージのジョブによって作成されたすべてのアーティファクトを自動的にダウンロードします。dependenciesを使用すると、ジョブにおけるアーティファクトのダウンロード動作を制御できます。

needsキーワードを使用している場合、ジョブはneeds設定で定義されたジョブからのみアーティファクトをダウンロードできます。

デフォルトでは、成功したジョブのジョブアーティファクトのみが収集されます。キャッシュが復元された後に、アーティファクトが復元されます。

ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインにdefault:artifactsが定義されていて、ジョブにもartifactsがある場合、ジョブの設定が優先され、デフォルト設定は使用されません。

アーティファクトの詳細についてはこちらを参照してください


artifacts:paths

パスはプロジェクトディレクトリ($CI_PROJECT_DIR)を基準にした相対パスであり、プロジェクトディレクトリの外部に直接リンクすることはできません。

キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。

サポートされている値:

  • プロジェクトディレクトリを基準にしたファイルパスの配列。
  • globパターンおよびdoublestar.Globパターンを使用するワイルドカードを使用できます。
  • GitLab Pagesジョブの場合:

CI/CD変数がサポートされています

artifacts:pathsの例:

job:
  artifacts:
    paths:
      - binaries/
      - .config

この例では、.configと、binariesディレクトリ内にあるすべてのファイルを含むアーティファクトを作成します。

補足情報:

  • artifacts:nameと組み合わせて使用しない場合、アーティファクトファイルの名前はartifactsになり、ダウンロード時にartifacts.zipになります。

関連トピック:


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 seconds
  • 3 mins 4 sec
  • 2 hrs 20 min
  • 2h20min
  • 6 mos 1 day
  • 47 yrs 6 mos and 4d
  • 3 weeks and 2 days
  • never

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_asdirectory/は機能しますが、directoryは機能しません。
  • artifacts:pathsに単一のファイルのみが含まれている場合、リンクはそのファイルを直接開きます。それ以外の場合はすべて、リンクはアーティファクトブラウザーを開きます。
  • リンクされたファイルはデフォルトでダウンロードされます。GitLab Pagesが有効になっている場合は、ブラウザで一部のアーティファクトのファイル拡張子を直接プレビューできます。詳細については、アーティファクトアーカイブの内容の参照を参照してください。

関連トピック:


artifacts:name

artifacts:nameキーワードを使用して、作成されたアーティファクトアーカイブの名前を定義します。アーカイブごとに一意の名前を指定できます。

定義されていない場合、デフォルトの名前はartifactsであり、ダウンロード時にartifacts.zipになります。

キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。

サポートされている値:

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: false

artifacts:access

artifacts:accessを使用して、GitLab UIまたはAPIからジョブアーティファクトにアクセスできるユーザーを決定します。このオプションを使用しても、アーティファクトをダウンストリームパイプラインに転送できなくなることはありません。

同じジョブ内でartifacts:publicartifacts:accessを併用することはできません。

キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。

サポートされている値:

  • all(デフォルト): 公開パイプラインのジョブのアーティファクトは、匿名ユーザー、ゲストユーザー、レポーターユーザーなど誰でもダウンロードできます。
  • developer: ジョブ内のアーティファクトは、少なくともデベロッパーロールを持つユーザーのみがダウンロードできます。
  • maintainer: ジョブ内のアーティファクトは、少なくともメンテナーロールを持つユーザーのみがダウンロードできます。
  • none: 誰もジョブのアーティファクトをダウンロードできません。

artifacts:accessの例:

job:
  artifacts:
    access: 'developer'

補足情報:


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_scriptdefaultセクションではなくトップレベルで使用することは、非推奨です

関連トピック:


cache

cacheを使用して、ジョブ間でキャッシュするファイルとディレクトリのリストを指定します。ローカルの実行コピーにあるパスのみを使用できます。

キャッシュは次のようになります。

  • パイプラインとジョブ間で共有されます。
  • デフォルトでは、保護ブランチと保護されていないブランチの間では共有されません。
  • アーティファクトの前に復元されます。
  • 最大4つのキャッシュに制限されています。

特定のジョブのキャッシュを無効にできます。たとえば、以下をオーバーライドする場合です。

  • defaultで定義されたデフォルトのキャッシュ。
  • includeで追加されたジョブの設定。

ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインに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: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: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.jsonyarn.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:untrackedcache: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: true

cache: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セクションでのみ使用できます。

サポートされている値:

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+)?/'

この例では:

  1. GitLabが、ジョブログに対して正規表現が一致するかどうかをチェックします。Code coverage: 67.89% of lines coveredのような行が一致します。
  2. GitLabは、一致した部分をチェックして、正規表現\d+(?:\.\d+)?と一致する箇所を見つけます。この例の正規表現は、コードカバレッジの値67.89に一致します。

補足情報:

  • 正規表現の例はコードカバレッジに記載されています。
  • ジョブの出力に一致する行が複数ある場合は、最後の行が使用されます(逆方向検索で最初に一致した結果)。
  • 1行内に一致した箇所が複数ある場合は、最後に一致した部分からカバレッジの数値が抽出されます。
  • 一致した部分から複数のカバレッジの数値が見つかった場合は、最初の数値が使用されます。
  • 先頭のゼロは削除されます。
  • 子パイプラインからのカバレッジ出力は、記録または表示されません。詳細については、関連イシューを確認してください。

dast_configuration

  • プラン: Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

dast_configurationキーワードを使用して、CI/CD設定で使用するサイトプロファイルとスキャナープロファイルを指定します。両方のプロファイルが、あらかじめプロジェクトで作成されている必要があります。ジョブのステージはdastである必要があります。

キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。

サポートされている値: site_profilescanner_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を使用する必要があります。同じジョブの中でdependenciesneedsと組み合わせて使用しないでください。

キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。

サポートされている値:

  • アーティファクトのフェッチ元のジョブの名前。
  • 空の配列([])。アーティファクトをダウンロードしないようにジョブを設定します。

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 osxbuild 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

環境の名前を設定します。

一般的な環境名はqastagingproductionですが、任意の名前を使用できます。

キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。

サポートされている値: ジョブのデプロイ先の環境の名前。次のいずれかの形式で指定します。

  • 平文(英字、数字、スペース、および文字-_/${}を含む)。
  • CI/CD変数(定義済みの変数、プロジェクト、グループ、インスタンスの変数、または.gitlab-ci.ymlファイルで定義された変数を含む)。scriptセクションで定義された変数は使用できません。

environment:nameの例:

deploy to production:
  stage: deploy
  script: git push production HEAD:main
  environment:
    name: production

environment: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

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: stop

environment:auto_stop_in

auto_stop_inキーワードは、環境のライフタイムを指定します。環境の有効期限が切れると、GitLabは自動的にその環境を停止します。

キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。

サポートされている値: 自然言語で記述された期間。たとえば、以下の表記はすべて同等です。

  • 168 hours
  • 7 days
  • one week
  • never

CI/CD変数がサポートされています

environment:auto_stop_inの例:

review_app:
  script: deploy-review-app
  environment:
    name: review/$CI_COMMIT_REF_SLUG
    auto_stop_in: 1 day

review_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_pathhelm.toolkit.fluxcd.io/v2/namespaces/flux-system/helmreleases/helm-release-resourceが指定された環境向けに、Kubernetesのダッシュボードを設定します。

補足情報:

  • ダッシュボードを使用するには、Kubernetes向けGitLabエージェントをインストールし、環境のプロジェクトまたはその親グループのuser_accessを設定する必要があります。
  • ジョブを実行するユーザーには、クラスターエージェントへのアクセス権限が必要です。権限がない場合、ダッシュボードはagentnamespaceflux_resource_path属性を無視します。
  • agentのみを設定する場合は、namespaceを設定する必要はなく、flux_resource_pathを設定することはできません。ただし、この設定では、Kubernetesのダッシュボードにクラスター内のすべてのネームスペースが一覧表示されます。

environment:deployment_tier

deployment_tierキーワードを使用して、デプロイメント環境のプランを指定します。

キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。

サポートされている値: 次のいずれか。

  • production
  • staging
  • testing
  • development
  • other
  • 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非表示ジョブですが、通常のジョブから設定を拡張することもできます。

関連トピック:


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:セクションでのみ使用できます。

サポートされている値: 識別子。サポートされているプロバイダーは以下のとおりです。

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: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つのプルポリシー、または配列で指定する複数のプルポリシー。alwaysif-not-presentneverのいずれかを指定できます。

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-1step-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_cancelconservativeに設定されている場合、トリガージョブのinterruptible設定は無効です。
    • workflow:auto_cancelinterruptibleに設定されている場合、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ジョブは、それ以前のすべてのジョブ(lintlinux:buildlinux:rspecmac:buildmac:rspec)の完了後すぐに実行されます。

補足情報:

  • 単一のジョブがneeds配列に指定できるジョブの最大数には、次の制限があります。
    • GitLab.comの場合、上限は50です。詳細については、イシュー350398を参照してください。
    • GitLabセルフマネージドおよびGitLab Dedicatedの場合、デフォルトの制限は50です。この制限は、管理者エリアでCI/CD制限を更新することで変更できます。
  • needsparallelキーワードを使用するジョブを参照している場合、それは1つのジョブだけでなく、並列に作成されるすべてのジョブに依存します。また、デフォルトでは、すべての並列ジョブからアーティファクトをダウンロードします。同じ名前のアーティファクトがある場合、上書きすることになり、最後にダウンロードしたアーティファクトだけが保存されます。
    • needsに(並列ジョブのすべてではなく)並列ジョブの一部のみを参照させるには、needs:parallel:matrixキーワードを使用します。
  • 設定対象のジョブと同じステージのジョブを参照できます。
  • needsonlyexceptrulesの条件によりパイプラインに追加されない可能性があるジョブを参照する場合、パイプラインの作成に失敗する可能性があります。このパイプライン作成の失敗を解決するには、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すべてからアーティファクトをダウンロードします。必要なすべてのジョブで、artifactstrueが指定されているか、またはデフォルトでtrueになっているためです。

補足情報:

  • 同じジョブの中でneedsdependenciesと組み合わせて使用しないでください。

needs:project

  • プラン: Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

needs:projectを使用して、他のパイプライン内の最大5つのジョブからアーティファクトをダウンロードします。アーティファクトは、指定されたref上で最後に成功した指定ジョブからダウンロードされます。複数のジョブを指定するには、needsキーワードの下にそれぞれ個別の配列項目として追加します。

指定されたrefに対して実行中のパイプラインがある場合、needs:projectを使用するジョブはそのパイプラインの完了を待機しません。代わりに、指定されたジョブの最後に成功した実行結果からアーティファクトをダウンロードします。

needs:projectは、jobrefartifactsと一緒に使用する必要があります。

キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。

サポートされている値:

  • 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:projecttriggerは、同じジョブ内で併用できません。
  • needs:projectを使用して別のパイプラインからアーティファクトをダウンロードする場合、ジョブは必要なジョブが完了するのを待機しません。needsを使用してジョブの完了を待機する動作は、同じパイプライン内のジョブに限定されます。そのため、ジョブがアーティファクトをダウンロードしようとする前に、他のパイプライン内の必要なジョブが完了していることを確認してください。
  • parallelで実行されるジョブからアーティファクトをダウンロードすることはできません。
  • projectjobrefではCI/CD変数をサポートしています。

関連トピック:


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がデフォルトです。

rulesonly、または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-jobtest-job1test-job2は、ステージの順に開始します。
  • ブランチがデフォルトブランチの場合、test-job2がパイプラインに追加されるため、次のようになります。
    • deploy-jobは、test-job1test-job2の両方が完了するのを待機します。
    • review-jobは、test-job2が完了するのを待機します。
  • ブランチがデフォルトブランチでない場合、test-job2はパイプラインに追加されないため、次のようになります。
    • deploy-jobtest-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:rspec

linux: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ジョブの一部としてのみ使用できます。

サポートされている値:

指定された値は小文字に変換され、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 seconds
  • 3 mins 4 sec
  • 2 hrs 20 min
  • 2h20min
  • 6 mos 1 day
  • 47 yrs 6 mos and 4d
  • 3 weeks and 2 days
  • never
  • $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 week

parallel

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エラーで失敗します。

関連トピック:


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ジョブが生成され、それぞれPROVIDERSTACKに異なる値が設定されます:

  • deploystacks: [aws, monitoring]
  • deploystacks: [aws, app1]
  • deploystacks: [aws, app2]
  • deploystacks: [gcp, data]
  • deploystacks: [gcp, processing]
  • deploystacks: [vultr, data]
  • deploystacks: [vultr, processing]

補足情報:

  • parallel:matrixジョブは、ジョブを互いに区別するためにジョブ名にマトリックス値を追加しますが、大きな値を使用すると名前が制限を超える可能性があります:

    • ジョブ名は255文字以下でなければなりません。
    • needsを使用する場合、ジョブ名は128文字以下でなければなりません。
  • rules:ifの変数としてマトリックス値を使用することはできません。

  • 同じ値で異なる名前を持つ複数のマトリックス構成を作成することはできません。ジョブ名は名前ではなくマトリックス値から生成されるため、同じ値を持つマトリックスエントリは、互いに上書きされる同じジョブ名を生成します。

    たとえば、次のtest設定では、同一のジョブで構成される2つのシリーズを作成しようとしていますが、OS2バージョンのジョブがOSバージョンのジョブを上書きすることになります。

    test:
      parallel:
        matrix:
          - OS: [ubuntu]
            PROVIDER: [aws, gcp]
          - OS2: [ubuntu]
            PROVIDER: [aws, gcp]

関連トピック:


release

releaseを使用して、リリースを作成します。

リリースジョブは、glab CLIにアクセスできる必要があり、これは$PATHにある必要があります。

Docker executorを使用する場合は、次のGitLabコンテナレジストリにあるDockerイメージを使用できます: registry.gitlab.com/gitlab-org/cli:latest

Shell executorなどを使用する場合は、Runnerが登録されているサーバーにglab CLIをインストールします。

キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。

サポートされている値: releaseサブキー。

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の例:

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' # optional

resource_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と同様に最大再試行回数であり、指定できる値は01、または2です。

キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。

サポートされている値:

  • 単一の失敗タイプ、または1つ以上の失敗タイプの配列。
  • always: あらゆる失敗時に再試行します(デフォルト)。
  • unknown_failure: 失敗の理由が不明な場合に再試行します。
  • script_failure: 次のいずれかの場合に再試行します。
    • スクリプトが失敗した。
    • RunnerがDockerイメージのプルに失敗した。executordockerdocker+machinekubernetesの場合。
  • 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_failure

Runnerのシステムエラー以外の失敗が発生した場合、このジョブは再試行されません。

retry:whenの例(複数の失敗タイプの配列):

test:
  script: rspec
  retry:
    max: 2
    when:
      - runner_system_failure
      - stuck_or_timeout_failure

retry:exit_codes

retry:exit_codesは、retry:maxと組み合わせて使用し、失敗の特定のケースでのみジョブを再試行します。retry:maxは、retryと同様に最大再試行回数であり、指定できる値は01、または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つを含める必要があります。

  • if
  • changes
  • exists
  • when

必要に応じて、以下を組み合わせることもできます。

  • allow_failure
  • needs
  • variables
  • interruptible

複数のキーワードを組み合わせて、複雑なルールを作成することもできます。

ジョブがパイプラインに追加されるのは次の場合です。

  • ifchanges、またはexistsのルールに一致し、かつ、そのルールがwhen: on_success(定義されていない場合のデフォルト)、when: delayed、またはwhen: alwaysにより設定されている場合。
  • when: on_successwhen: delayed、またはwhen: alwaysのみで構成されたルールに到達した場合。

ジョブがパイプラインに追加されないのは次の場合です。

  • どのルールにも一致しなかった場合。
  • ルールに一致し、かつwhen: neverが指定されている場合。

その他の例については、rulesでジョブの実行タイミングを指定するを参照してください。


rules:if

rules:if句を使用して、ジョブをパイプラインに追加する条件を指定します。

  • ifステートメントがtrueの場合、ジョブをパイプラインに追加します。
  • ifステートメントがtrueでも、when: neverと組み合わされている場合、ジョブをパイプラインに追加しません。
  • ifステートメントがfalseの場合、次のrules項目(他に存在する場合)をチェックします。

if句は次のように評価されます。

キーワードのタイプ: ジョブ固有およびパイプライン固有。ジョブの一部として使用してジョブの動作を設定するか、または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

補足情報:

関連トピック:


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パス(例: *.mdpath/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個のパターンまたはファイルパスを定義できます。
  • 一致するファイルのいずれかに変更がある場合、changestrueに解決されます(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と組み合わせる必要があります。

サポートされている値:

  • ブランチ名(例: mainbranch1refs/heads/branch1)。
  • タグ名(例: tag1refs/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ジョブがパイプラインに含まれるのは、Dockerfilerefs/heads/branch1と比較して変更されており、かつパイプラインソースがマージリクエストイベントである場合のみです。

補足情報:

  • 状況によっては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個のパターンまたはファイルパスを定義できます。
  • リスト内のいずれかのファイルが見つかった場合、existstrueに解決されます(OR演算)。
  • ジョブレベルのrules:existsを使用すると、GitLabはパイプラインを実行するプロジェクトとrefでファイルを検索します。includerules: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-projectv1.0.0タグが付けられたコミットにDockerfileが存在する場合のみです。


rules:when

rules:whenを単独で、または別のルールの一部として使用して、ジョブをパイプラインに追加する条件を制御します。rules:whenwhenに似ていますが、インプットオプションが若干異なります。

rules:whenルールがifchanges、または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_successon_failureの条件でジョブのステータスを評価する場合:
  • rules:when: manualを使用して手動ジョブを追加する場合:
    • allow_failureはデフォルトでfalseになります。このデフォルトは、when: manualを使用して手動ジョブを追加する場合の動作とは逆になります。
    • rulesの外部で定義されたwhen: manualと同じ動作を実現するには、rules: allow_failuretrueに設定します。

rules:allow_failure

rulesallow_failure: trueを使用して、ジョブが失敗してもパイプラインが停止しないようにします。

allow_failure: trueは、手動ジョブでも使用できます。パイプラインは、手動ジョブの結果を待たずに実行を継続します。ルールでallow_failure: falsewhen: 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は、artifactsoptionalを受け入れます。

rules:variables

rulesvariablesを使用して、特定の条件に応じて変数を定義します。

キーワードのタイプ: ジョブ固有。ジョブの一部としてのみ使用できます。

サポートされている値:

  • 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が、環境変数とインプットパラメータを指定した定義済みステップを使用します。

補足情報:

  • ステップにはscriptstepキーのいずれか一方を指定できます。両方を指定することはできません。
  • runの設定を、既存のキーワードscriptafter_scriptbefore_scriptと一緒に使用することはできません。
  • 複数行のスクリプトは、YAMLブロックスカラー構文を使用して定義できます。

script

scriptを使用して、Runnerが実行するコマンドを指定します。

トリガージョブを除くすべてのジョブでは、scriptキーワードが必須です。

キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。

サポートされている値: 次の内容を含む配列。

CI/CD変数がサポートされています

scriptの例:

job1:
  script: "bundle exec rspec"

job2:
  script:
    - uname -a
    - bundle exec rspec

補足情報:

  • script内で特殊文字を使用する場合は、単一引用符(')または二重引用符(")を使用する必要があります。

関連トピック:


secrets

  • プラン: Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

secretsを使用して、次のようなCI/CDシークレットを指定します。

  • 外部シークレットプロバイダーから取得する。
  • ジョブ内でCI/CD変数として使用できるようにする(デフォルトではfileタイプ)。

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:nameengine: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: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を使用して一意の名前エイリアスを定義します。
  • entrypointcommandvariablesなどの他のサービスオプションで使用する場合、nameキーワードが必要です。
  • 詳細については、サービスへのアクセスを参照してください。

services:alias

ジョブのコンテナからサービスにアクセスするための追加エイリアス。

キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。

サポートされている値: スペースまたはコンマで区切られた1つ以上のエイリアスを含む文字列。

services:aliasの例:

services:
  - name: postgres:11.7
    alias: db,postgres,pg
  - name: mysql:latest
    alias: mysql-1

補足情報:


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: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つのプルポリシー、または配列で指定する複数のプルポリシー。alwaysif-not-presentneverのいずれかを指定できます。

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."

補足情報:


tags

tagsを使用して、プロジェクトで使用可能なすべてのRunnerのリストから特定のRunnerを選択します。

Runnerを登録する際に、Runnerのタグ(rubypostgresdevelopmentなど)を指定できます。ジョブを取得して実行するには、ジョブにリストされているすべてのタグがRunnerに割り当てられている必要があります。

ジョブの設定とデフォルト設定は一緒にマージされません。パイプラインにdefault:tagsが定義されていて、ジョブにもtagsがある場合、ジョブの設定が優先され、デフォルト設定は使用されません。

キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。

サポートされている値:

tagsの例:

job:
  tags:
    - ruby
    - postgres

この例では、ジョブを実行できるのは、rubyタグとpostgresタグの両方が指定されたRunnerのみです。

補足情報:

  • タグの数は50未満でなければなりません。

関連トピック:


timeout

timeoutを使用して、特定のジョブのタイムアウトを設定します。ジョブがタイムアウトより長く実行されると、ジョブは失敗します。

ジョブレベルのタイムアウトは、プロジェクトレベルのタイムアウトよりも長くすることができますが、Runnerのタイムアウトよりも長くすることはできません。

キーワードのタイプ: ジョブキーワード。ジョブの一部として、またはdefaultセクションでのみ使用できます。

サポートされている値: 自然言語で記述された期間。たとえば、以下の表記はすべて同等です。

  • 3600 seconds
  • 60 minutes
  • one hour

timeoutの例:

build:
  script: build.sh
  timeout: 3 hours 30 minutes

test:
  script: rspec
  timeout: 3h 30m

trigger

triggerを使用して、ジョブが次のいずれかのダウンストリームパイプラインを開始する「トリガージョブ」であることを宣言します。

トリガージョブで使用できるGitLab CI/CD設定キーワードは限られています。トリガージョブで使用できるキーワードは次のとおりです。

キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。

サポートされている値:

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を使用できません。

関連トピック:


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を使用します。

キーワードのタイプ: ジョブキーワード。ジョブの一部としてのみ使用できます。

サポートされている値:

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

関連トピック:


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を代わりに使用してください):
    • 手動ジョブが原因でダウンストリームパイプラインのステータスが手動アクション待ち status_manual )になっている場合、トリガージョブは実行中 status_running )と表示されます。
    • ダウンストリームパイプラインに失敗したジョブがあっても、そのジョブでallow_failure: trueを使用している場合、ダウンストリームパイプラインは成功と見なされ、トリガージョブは成功と表示されます。

trigger:forward

trigger:forwardを使用して、ダウンストリームパイプラインに転送する内容を指定します。親子パイプラインマルチプロジェクトパイプラインの両方に転送する内容を制御できます。

デフォルトでは、ネストされたダウンストリームパイプラインでは、転送された変数が再度転送されることはありません。再度転送するには、ネストされたダウンストリームのトリガージョブでもtrigger:forwardを使用する必要があります。

サポートされている値:

  • yaml_variables: true(デフォルト)、またはfalsetrueの場合、トリガージョブで定義されている変数がダウンストリームパイプラインに渡されます。
  • 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: alwayswhen: 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

この例では、スクリプトは次のように動作します。

  1. build_jobが失敗した場合にのみ、cleanup_build_jobを実行します。
  2. 成功か失敗かに関係なく、常にパイプラインの最後のステップとしてcleanup_jobを実行します。
  3. GitLab UIで手動で実行した場合、deploy_jobを実行します。

補足情報:

  • on_successon_failureの条件でジョブのステータスを評価する場合:
  • when: manualの場合、allow_failureのデフォルト値はtrueです。rules:when: manualの場合、デフォルト値はfalseに変わります。

関連トピック:

  • whenrulesと組み合わせて使用すると、さらに動的にジョブを制御できます。
  • whenworkflowと組み合わせて使用すると、パイプラインの開始条件を制御できます。

manual_confirmation

manual_confirmationwhen: 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 play )を選択します。
  • 最小遅延期間は1秒、最大遅延期間は1週間です。
  • start_inは、whendelayedに設定されている場合にのみ機能します。whenに他の値を使用すると、構成が無効になります。ジョブがrulesを使用している場合、start_inおよびwhenは、ジョブレベルではなく、rulesで定義する必要があります。そうでない場合は、検証エラー(config key may not be used with 'rules': start_in)が表示されます。
  • start_inworkflow:rulesではサポートされていませんが、構文違反は発生しません。

関連トピック:


variables

variablesを使用して、CI/CD変数を定義します。

変数は、CI/CDジョブ内で定義するか、またはすべてのジョブに対するデフォルトCI/CD変数を定義するトップレベル(グローバル)キーワードとして定義できます。

補足情報:

関連トピック:


ジョブvariables

ジョブ変数は、ジョブのscriptbefore_scriptafter_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_SITEREVIEW_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: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: false
  • VAR2の結果はvalue2 value1です。
  • VAR3の結果はvalue3 $VAR1です。

補足情報: