マージ結果のパイプライン

マージ結果パイプラインは マージリクエストパイプラインの一種です。ソースブランチとターゲットブランチをマージした結果に対して実行するパイプラインです。

GitLab はマージ結果を内部コミットとして作成し、パイプラインはそれに対して実行できるようにします。このコミットはどちらのブランチにも存在しませんが、パイプラインの詳細で見ることができます。内部コミットの作成者は、常にマージリクエストを作成したユーザーです。

パイプラインは、パイプラインを実行した時点で存在するターゲットブランチに対して実行されます。時間の経過とともに、ソースブランチで作業している間にターゲットブランチが変更される可能性があります。マージ結果が正確であることを確認したい場合は、いつでもパイプラインを再実行してください。

マージ結果のパイプラインは、ターゲットブランチの変更がソースブランチの変更と衝突している場合は実行できません。

このような場合、パイプラインはマージリクエストパイプラインとして実行され、merge requestと表示されます。

前提条件

マージ結果のパイプラインを使用するため:

マージ結果のパイプラインの有効化

プロジェクトでマージ結果パイプラインを有効にするには、少なくともメンテナーのロールが必要です:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. 設定 > マージリクエストを選択します。
  3. マージオプション] セクションで、[マージ結果のパイプラインを有効にする] を選択します。
  4. 変更を保存を選択します。
caution
チェックボックスを選択したが、マージリクエストパイプラインを使用するようにパイプラインを設定していない場合、マージリクエストが未解決の状態で立ち往生したり、パイプラインが削除されたりすることがあります。

トラブルシューティング

マージ結果のパイプラインが作成されない

GitLab 13.7以前では、機能フラグが無効になっているためにマージ結果のパイプラインが作成されないことがありました。この機能フラグはGitLab 13.8で削除されました。13.8以降にアップグレードするか、GitLabインスタンスで:merge_ref_auto_sync 機能フラグが有効になっていることを確認してください。

fatal: reference is not a tree: エラーでパイプラインが断続的に失敗します。

マージ結果のパイプラインはマージリクエスト (refs/merge-requests/<iid>/merge) のマージリファレンスで実行されるため、予期しないタイミングで Git リファレンスが上書きされる可能性があります。

たとえば、ソースブランチやターゲットブランチがアドバンスされると、パイプラインはfatal: reference is not a tree: エラーで失敗します。これは checkout-SHA がマージリファレンスに見つからないことを示しています。

この動作は、GitLab 12.4で永続的なパイプライン参照を導入することで改善されました。この問題を解決するには、GitLab 12.4以降にアップグレードしてください。

マージに成功した結果のパイプラインは、失敗したブランチパイプラインを上書きします。

パイプラインを成功させなければならない設定がアクティビティになっている場合、失敗したブランチパイプラインが無視されることがあります。この問題を追跡するためにイシュー385841が開かれています。