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

GitLab 10.6で導入されました

GitLab CI/CDはGitHubや Bitbucket Cloud、その他のGitサーバーと一緒に使うことができますが、いくつかの制限があります。

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

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

外部リポジトリへの接続

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

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. View all my projects を選択します。
  3. 新規プロジェクトを選択します。
  4. Run CI/CD for external repositoryを選択します。
  5. GitHubまたはRepository by URL を選択します。
  6. 各項目を入力してください。

Run CI/CD for external repositoryオプションが利用できない場合、GitLabインスタンスにインポートソースが設定されていない可能性があります。インスタンスの管理者にインポートソースの設定を確認してもらいましょう。

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

GitLab 12.3 で導入されました

GitHub 上の外部リポジトリで GitLab CI/CD を使用する場合、Pull Request のコンテキストでパイプラインを実行することができます。

GitHubのリモートブランチに変更をプッシュすると、GitLab CI/CDはそのブランチに対してパイプラインを実行することができます。しかし、そのブランチの Pull Request を開いたり更新したりするときに、次のようなことが考えられます:

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

使用例:

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

on-pull-requests:
  script: echo 'this should run on pull requests'
  only:
    - external_pull_requests

except-pull-requests:
  script: echo 'this should not run on pull requests'
  except:
    - external_pull_requests

どのように動作するか

GitHub からリポジトリがインポートされると、GitLab はpush とイベントの Webhook を購読しますpull_requestpull_requestイベントを受信pull_request すると pull_request、Pull Requestのデータが保存され、参照として保持されます。Pull Requestが作成されたばかりの場合、GitLabは直ちに外部Pull Request用のパイプラインを作成します。

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

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

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

追加された定義済み変数

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

変数名の先頭にはCI_EXTERNAL_PULL_REQUEST_ が付きます。

制限事項

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

GitLabが2つのパイプラインを作成することを考えると、変更がオープンなPull Requestを参照するリモートブランチにプッシュされた場合、両方がGitHubインテグレーションを介してPull Requestのステータスに貢献します。ブランチではなく、内部プルリクエストに対してのみパイプラインを実行したい場合は、ジョブの仕様にexcept: [branches] を追加してください。もっと読む

トラブルシューティング