GitLab CI では、マージリクエストのターゲットブランチの変数はありますか? 質問する

GitLab CI では、マージリクエストのターゲットブランチの変数はありますか? 質問する

私のパイプラインでは、マージ リクエストのターゲット ブランチが特定のブランチ (たとえば、マスターまたはリリース) である場合にのみジョブを実行するようにしたいと考えています。

これは可能ですか?

読み終えた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 pipelineshttps://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#基本のみを除く

  1. onlyジョブが実行されるブランチとタグの名前を定義します。
  2. 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オプションについて: -Lcurl が HTTP リダイレクトを認識するようにします。curl-sSを silent( -s) にし、-Sエラーを表示します( )。GitLab -HAPI にアクセスする権限情報を指定します。

使用されたAPIは次の場所にありますhttps://docs.gitlab.com/ce/api/merge_requests.html#list-project-merge-requests属性を使用して、source_branchどの MR の現在のパイプラインが実行されているかを判断します。したがって、ソース ブランチに異なるターゲット ブランチへの複数の MR がある場合は、後の部分を変更して|独自のロジックを実行する必要があります。

についてjqhttps://stedolan.github.io/jq/) は、JSON の内容 (GitLab API が返すもの) を処理するためのシンプルな CLI ユーティリティです。node -pまたは任意の方法を使用できます。

おすすめ記事