マージ結果パイプライン
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
マージ結果パイプラインは、ソースブランチとターゲットブランチのコードを結合した一時的なマージコミットをテストします。このコミットはどちらのブランチにも存在しませんが、パイプラインの詳細で確認できます。
このアプローチは、最新のターゲットブランチ内のコードで変更が機能することを確認し、マージする前にインテグレーションのイシューを検出し、異なるファイルでの変更が連携して機能することを確認するのに役立ちます。
ターゲットブランチに変更があり、それがソースブランチの変更と競合する場合、マージ結果パイプラインは実行できません。これらのケースでは、GitLabは代わりに標準のマージリクエストパイプラインを実行します。
マージ結果パイプラインを有効にする
前提条件:
- プロジェクトのメンテナーまたはオーナーロールが必要です。
- お使いの
.gitlab-ci.ymlファイルはマージリクエストパイプライン用に設定する必要があります。 - プロジェクトはGitLabでホストされている必要があります(GitHubやBitbucketのような外部リポジトリではありません)。
プロジェクトでマージ結果パイプラインを有効にするには:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 左サイドバーで、設定 > マージリクエストを選択します。
- マージオプションの下で、マージ結果のパイプラインを有効にするを選択します。
- 変更を保存を選択します。
この設定を有効にしても、.gitlab-ci.ymlファイルでマージリクエストパイプラインを設定しない場合、マージリクエストが未解決の状態でスタックするか、パイプラインがドロップされる可能性があります。
トラブルシューティング
マージ結果パイプラインを使用する場合、以下のイシューに遭遇する可能性があります。
rules:changes:compare_toでジョブまたはパイプラインが予期せず実行される
マージリクエストパイプラインでrules:changes:compare_toを使用すると、ジョブまたはパイプラインが予期せず実行されることがあります。
このイシューは、マージ結果パイプラインが一時的なマージコミットを比較のベースとして使用するため発生します。このコミットには、マージリクエストブランチとターゲットブランチの両方からの変更が含まれており、ルールが予期せずトリガーされる可能性があります。
たとえば、マージリクエストがsrc/feature.jsを追加し、ターゲットブランチにsrc/utils.jsが含まれている場合、一時的なマージコミットには両方のファイルが含まれます。rules:changes:compare_to: mainを持つルールは、フィーチャーファイルだけでなく両方の変更を検出し、自身の変更のみで実行されるべきジョブをトリガーする可能性があります。
この問題を解決するには、次の手順に従います:
- デフォルトの比較動作を使用するには、
compare_toパラメータを削除します。 - 変更ルールでは、より具体的なファイルパスパターンを使用してください。
compare_toなしでrules:changesを使用することを検討してください。
成功したマージ結果パイプラインが失敗したブランチパイプラインをオーバーライドする
失敗したブランチパイプラインが、パイプラインが完了している設定がアクティブ化されている場合に無視される状況に遭遇する可能性があります。
このイシューは、パイプラインロジックの優先順位付けが原因で発生します。改善のサポートはイシュー385841で提案されています。