用于外部仓库的 GitLab CI/CD

GitLab CI/CD 可以与 GitHub、Bitbucket Cloud 或任何其它 Git 服务器一起使用。

您可以连接外部仓库就可以获得 GitLab CI/CD 的优势,而不用将整个项目移动到极狐GitLab。

连接外部仓库会设置仓库镜像 并创建一个轻量级项目,其中禁用了议题、合并请求、wiki 和代码片段。这些功能可以后续重新启用。

连接到外部仓库

要连接到外部仓库:

  1. 在顶部栏上,选择 菜单 > 项目 > 创建新项目
  2. 选择 为外部仓库运行 CI/CD
  3. 选择 GitHub从 URL 导入仓库
  4. 填写字段。

外部拉取请求流水线

将 GitLab CI/CD 与 GitHub 上的外部仓库一起使用时,可以在拉取请求的上下文中运行流水线。

当您将更改推送到 GitHub 中的远程分支时,GitLab CI/CD 可以为该分支运行流水线。但是,当您打开或更新该分支的拉取请求时,您可能希望:

  • 运行额外的作业。
  • 不运行特定的作业。

例如:

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 订阅 webhook 获取 pushpull_request 事件。一旦收到 pull_request 事件,Pull Request 数据就会被存储并作为参考。如果刚刚创建了拉取请求,极狐GitLab 会立即为外部拉取请求创建流水线。

如果将更改推送到拉取请求引用的分支,并且拉取请求仍处于开放状态,则会为外部拉取请求创建流水线。

在这种情况下,GitLab CI/CD 创建了 2 个流水线。一个用于分支推送,一个用于外部拉取请求。

拉取请求关闭后,即使新的更改被推送到同一个分支,也不会为外部拉取请求创建流水线。

其它预定义变量

通过对外部拉取请求使用流水线,极狐GitLab 向流水线作业暴露了额外的预定义变量

变量名称以 CI_EXTERNAL_PULL_REQUEST_ 为前缀。

限制

此功能目前不支持来自派生仓库的拉取请求。来自派生仓库的任何拉取请求都将被忽略。

Given that GitLab creates 2 pipelines, if changes are pushed to a remote branch that references an open Pull Request, both contribute to the status of the Pull Request via GitHub integration. If you want to exclusively run pipelines on external pull requests and not on branches you can add except: [branches] to the job specs.

鉴于系统创建了 2 个流水线,如果将更改推送到引用开放的拉取请求的远端分支,两者都会通过 GitHub 集成影响拉取请求的状态。如果您想在外部拉取请求上而不是在分支上专门运行流水线,您可以在作业 specs 中添加 except: [branches]