私のパイプラインでは、マージ リクエストのターゲット ブランチが特定のブランチ (たとえば、マスターまたはリリース) である場合にのみジョブを実行するようにしたいと考えています。
これは可能ですか?
読み終えたhttps://docs.gitlab.com/ee/ci/variables/何かを見逃していない限り、役立つものは何も見当たりません。
ベストアンサー1
更新日: 2019-03-21
GitLabにはバージョン11.6以降、マージリクエスト情報用の変数があります(https://docs.gitlab.com/ce/ci/variables/変数が で始まることを確認してくださいCI_MERGE_REQUEST_
。しかし、これらの変数は でのみ使用可能ですmerge request pipelines
。(https://docs.gitlab.com/ce/ci/merge_request_pipelines/index.html)
マージ リクエストの CI ジョブを構成するには、以下を設定する必要があります。
only:
- merge_requests
そして、CI_MERGE_REQUEST_*
それらのジョブで変数を使用できるようになります。
ここでの最大の落とし穴はonly: merge_request
通常のパラメータとはまったく異なる動作をしますonly/except
。
通常のonly/except
パラメータ: (https://docs.gitlab.com/ce/ci/yaml/README.html#基本のみを除く)
only
ジョブが実行されるブランチとタグの名前を定義します。except
ジョブが実行されないブランチとタグの名前を定義します。
only: merge_request
: (https://docs.gitlab.com/ce/ci/merge_request_pipelines/index.html#exclude-certain-jobs)
このパラメータの動作
only: merge_requests
により、マージ リクエストのコンテキストではそのパラメータを持つジョブのみが実行さ れ、他のジョブは実行されなくなります。
どのジョブにも存在するジョブを以前と同じように動作するように再編成するのは難しいと感じましたonly: merge_request
。そのため、CI ジョブで MR 情報を取得するために、元の回答のワンライナーを引き続き使用しています。
元の回答:
いいえ。
しかし、GitLab は 2019 年第 2 四半期にこの機能を計画しています。https://gitlab.com/gitlab-org/gitlab-ce/issues/23902#final-assumptions
現在、これを実現するための回避策を使用できます。この方法は、Rekovni の回答で説明されているとおりであり、実際に機能します。
現在のブランチから MR のターゲット ブランチを取得する簡単なワンライナーがあります。
script: # in any script section of gitlab-ci.yml
- 'CI_TARGET_BRANCH_NAME=$(curl -LsS -H "PRIVATE-TOKEN: $AWESOME_GITLAB_API_TOKEN" "https://my.gitlab-instance.com/api/v4/projects/$CI_PROJECT_ID/merge_requests?source_branch=$CI_COMMIT_REF_NAME" | jq --raw-output ".[0].target_branch")'
説明:
CI_TARGET_BRANCH_NAME
解決されたターゲットブランチ名を格納する新しく定義された変数です。さまざまな用途で変数を定義する必要はありません。
AWESOME_GITLAB_API_TOKEN
リポジトリの CI/CD 変数設定で設定された変数です。api
スコープ付きの GitLab 個人アクセス トークン (ユーザー設定で作成) です。
curl
オプションについて: -L
curl が HTTP リダイレクトを認識するようにします。curl-sS
を silent( -s
) にし、-S
エラーを表示します( )。GitLab -H
API にアクセスする権限情報を指定します。
使用されたAPIは次の場所にありますhttps://docs.gitlab.com/ce/api/merge_requests.html#list-project-merge-requests属性を使用して、source_branch
どの MR の現在のパイプラインが実行されているかを判断します。したがって、ソース ブランチに異なるターゲット ブランチへの複数の MR がある場合は、後の部分を変更して|
独自のロジックを実行する必要があります。
についてjq
(https://stedolan.github.io/jq/) は、JSON の内容 (GitLab API が返すもの) を処理するためのシンプルな CLI ユーティリティです。node -p
または任意の方法を使用できます。