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

外部リポジトリのGitLab CI/CD

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

GitLab CI/CDは、GitHubBitbucket Cloud、またはその他のGitサーバーで使用できます。いくつかの既知の問題があります。

プロジェクト全体をGitLabに移動する代わりに、外部リポジトリを接続してGitLab CI/CDの利点を得ることができます。

外部リポジトリを接続すると、リポジトリのミラーリングが設定され、イシュー、マージリクエスト、Wiki、およびスニペットが無効になっている軽量プロジェクトが作成されます。これらの機能は後で再度有効にできます

外部リポジトリに接続する

外部リポジトリに接続するには、次の手順に従います:

  1. 左側のサイドバーの上部で、新規作成 plus )を選択し、新規プロジェクト/リポジトリを選択します。新しいナビゲーションをオンにした場合、このボタンは右上隅にあります。
  2. 外部リポジトリのCI/CDを実行を選択します。
  3. GitHubまたはリポジトリのURLを選択します。
  4. フィールドに入力します。

外部リポジトリのCI/CDを実行オプションが利用できない場合:

外部プルリクエストのパイプライン

GitHub上の外部リポジトリでGitLab CI/CDプルリクエストのコンテキストでパイプラインを実行できます。

GitHubのリモートブランチに変更をプッシュすると、GitLab CI/CDは、そのブランチのパイプラインを実行できます。ただし、そのブランチのプルリクエストを開くか更新するときは、次のことをお勧めします:

  • 追加のジョブを実行します。
  • 特定のジョブを実行しません。

例:

always-run:
  script: echo 'this should always run'

on-pull-requests:
  script: echo 'this should run on pull requests'
  rules:
    - if: $CI_PIPELINE_SOURCE == "external_pull_request_event"

except-pull-requests:
  script: echo 'This should not run for pull requests, but runs in other cases.'
  rules:
    - if: $CI_PIPELINE_SOURCE == "external_pull_request_event"
      when: never
    - when: on_success

外部プルリクエストのパイプライン実行

リポジトリがGitHubからインポートされると、GitLabはpushイベントとpull_requestイベントのWebhookをサブスクライブします。pull_requestイベントを受信するとすぐに、プルリクエストデータが保存され、参照として保持されます。プルリクエストが作成されたばかりの場合、GitLabはすぐに外部プルリクエストのパイプラインを作成します。

プルリクエストによって参照されるブランチに変更がプッシュされ、プルリクエストがまだ開いている場合、外部プルリクエストのパイプラインが作成されます。

GitLab CI/CDは、この場合2つのパイプラインを作成します。ブランチのプッシュ用と外部プルリクエスト用です。

プルリクエストが閉じられた後、新しい変更が同じブランチにプッシュされても、外部プルリクエストのパイプラインは作成されません。

追加の定義済み変数

外部プルリクエストのパイプラインを使用することにより、GitLabは追加の定義済み変数をパイプラインジョブに公開します。

変数名には、CI_EXTERNAL_PULL_REQUEST_というプレフィックスが付きます。

既知の問題

この機能は、以下をサポートしていません:

GitLabは2つのパイプラインを作成するため、開いているプルリクエストを参照するリモートブランチに変更がプッシュされると、両方ともGitHubインテグレーションを介してプルリクエストのステータスにコントリビュートします。外部プルリクエストでのみパイプラインを実行し、ブランチでは実行しない場合は、ジョブの仕様にexcept: [branches]を追加できます。詳細はこちら

トラブルシューティング