外部仓库的 CI/CD
Tier: 专业版,旗舰版
Offering: JihuLab.com,私有化部署
极狐GitLab CI/CD 可与 GitHub、Bitbucket Cloud 或任何其他 Git 服务器一起使用。存在一些已知问题。
无需将整个项目迁移到极狐GitLab,您只需连接外部仓库即可获得极狐GitLab CI/CD 的收益。
连接外部仓库时会设置仓库镜像,并创建一个轻量级项目,其中议题、合并请求、Wiki 和代码片段默认处于禁用状态。这些功能可以稍后重新启用。
连接到外部仓库
要连接到外部仓库:
- 在右上角,选择 新建 () 和 新建项目/仓库。
- 选择 为外部仓库运行 CI/CD。
- 选择 GitHub 或 通过 URL 的仓库。
- 完成字段填写。
如果 为外部仓库运行 CI/CD 选项不可用:
外部拉取请求的流水线
当极狐GitLab CI/CD 与 GitHub 上的外部仓库结合使用时,可以在拉取请求的上下文中运行流水线。
当您将更改推送到 GitHub 中的远程分支时,极狐GitLab CI/CD 可以为该分支运行流水线。但是,当您为该分支打开或更新拉取请求时,您可能希望:
- 运行额外的作业。
- 不运行特定作业。
例如:
yaml1always-run: 2 script: echo 'this should always run' 3 4on-pull-requests: 5 script: echo 'this should run on pull requests' 6 rules: 7 - if: $CI_PIPELINE_SOURCE == "external_pull_request_event" 8 9except-pull-requests: 10 script: echo 'This should not run for pull requests, but runs in other cases.' 11 rules: 12 - if: $CI_PIPELINE_SOURCE == "external_pull_request_event" 13 when: never 14 - when: on_success
外部拉取请求的流水线执行
当从 GitHub 导入仓库时,极狐GitLab 会订阅 push 和 pull_request 事件的 webhook。一旦收到 pull_request 事件,拉取请求数据将被存储并保留为引用。如果拉取请求刚被创建,极狐GitLab 会立即为外部拉取请求创建一条流水线。
如果对拉取请求引用的分支进行了更改,并且拉取请求仍处于打开状态,则会为外部拉取请求创建一条流水线。
在此情况下,极狐GitLab CI/CD 会创建两条流水线:一条用于分支推送,另一条用于外部拉取请求。
拉取请求关闭后,即使有新的更改推送到同一分支,也不会再为外部拉取请求创建流水线。
额外的预定义变量
通过使用外部拉取请求的流水线,极狐GitLab 会向流水线作业暴露额外的预定义变量。
变量名称以 CI_EXTERNAL_PULL_REQUEST_ 为前缀。
已知问题
此功能不支持:
- GitHub Enterprise 所需的手动连接方式。如果集成是手动连接的,外部拉取请求不会触发流水线。
- 来自 fork 仓库的拉取请求。来自 fork 仓库的拉取请求会被忽略。
由于极狐GitLab 会创建两条流水线,如果将更改推送到引用了已打开拉取请求的远程分支,这两条流水线都会通过 GitHub 集成影响该拉取请求的状态。如果您希望仅在外部拉取请求上运行流水线,而在分支上不运行,可以在作业规范中添加 except: [branches]。了解更多。