外部リポジトリのGitLab CI/CD
GitLab Premium10.6から導入されました。
GitLab CI/CDは、次のような場合に使用できます:
- GitHub。
- ビットバケットクラウド
- その他の git サーバー。
プロジェクト全体をGitLabに移行する代わりに、外部リポジトリを接続してGitLab CI/CDのメリットを得ることができます。
外部リポジトリを接続すると、リポジトリのミラーリングが設定され、イシュー、マージリクエスト、wiki、スニペットが無効化された軽量プロジェクトが作成されます。 これらの機能は後で再度有効にすることができます。
外部リポジトリに接続するには
- GitLab ダッシュボードから、Newproject をクリックします。
- 外部リポジトリのCI/CDタブに切り替えます。
- URLでGitHubまたはRepoを選択します。
- 次のステップはインポートの流れと同様です。
外部プルリクエスト用パイプライン
GitLab Premium 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_request
。 pull_request
イベントを受信pull_request
すると pull_request
、Pull Requestのデータが保存され、参照として保持されます。 Pull Requestが作成されたばかりの場合、GitLabは直ちに外部Pull Request用のパイプラインを作成します。
変更がプルリクエストが参照するブランチにプッシュされ、プルリクエストがまだオープンされている場合、外部プルリクエストのパイプラインが作成されます。
プルリクエストがクローズされると、新しい変更が同じブランチにプッシュされても、外部プルリクエストのパイプラインは作成されません。
追加された定義済み変数
外部からのプルリクエストにパイプラインを使うことで、GitLabはパイプラインジョブに追加の定義済み変数を公開します。
変数名の先頭にはCI_EXTERNAL_PULL_REQUEST_
を付けます。
制限事項
この機能は現在フォークリポジトリからのPull Requestをサポートしていません。 フォークリポジトリからのPull Requestは無視されます。続きを読む
GitLabが2つのパイプラインを作成することを考えると、変更がオープンなPull Requestを参照するリモートブランチにプッシュされた場合、両方がGitHubインテグレーションを通じてPull Requestのステータスに貢献します。 ブランチではなく、内部のPull Requestに対してのみパイプラインを実行したい場合は、ジョブの仕様にexcept: [branches]
。続きを読む