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

GitLab Premium10.6から導入されました

GitLab CI/CDは、次のような場合に使用できます:

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

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

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

  1. GitLab ダッシュボードから、Newproject をクリックします。
  2. 外部リポジトリのCI/CDタブに切り替えます。
  3. URLでGitHubまたはRepoを選択します。
  4. 次のステップはインポートの流れと同様です。

CI/CD for external repository project creation

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

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_requestpull_requestイベントを受信pull_request すると pull_request、Pull Requestのデータが保存され、参照として保持されます。 Pull Requestが作成されたばかりの場合、GitLabは直ちに外部Pull Request用のパイプラインを作成します。

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

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

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

追加された定義済み変数

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

変数名の先頭にはCI_EXTERNAL_PULL_REQUEST_を付けます。

制限事項

この機能は現在フォークリポジトリからのPull Requestをサポートしていません。 フォークリポジトリからのPull Requestは無視されます。続きを読む

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