极狐 GitLab

外部仓库的 CI/CD

Tier: 专业版,旗舰版

Offering: JihuLab.com,私有化部署

极狐GitLab CI/CD 可与 GitHubBitbucket Cloud 或任何其他 Git 服务器一起使用。存在一些已知问题

无需将整个项目迁移到极狐GitLab,您只需连接外部仓库即可获得极狐GitLab CI/CD 的收益。

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

连接到外部仓库#

要连接到外部仓库:

  1. 在右上角,选择 新建 () 和 新建项目/仓库
  2. 选择 为外部仓库运行 CI/CD
  3. 选择 GitHub通过 URL 的仓库
  4. 完成字段填写。

如果 为外部仓库运行 CI/CD 选项不可用:

  • 该极狐GitLab 实例可能未配置任何导入源。请让管理员检查导入源配置
  • 项目镜像可能被禁用。如果被禁用,只有管理员可以使用 为外部仓库运行 CI/CD 选项。请让管理员检查项目镜像配置

外部拉取请求的流水线#

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

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

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

例如:

yaml
1always-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 会订阅 pushpull_request 事件的 webhook。一旦收到 pull_request 事件,拉取请求数据将被存储并保留为引用。如果拉取请求刚被创建,极狐GitLab 会立即为外部拉取请求创建一条流水线。

如果对拉取请求引用的分支进行了更改,并且拉取请求仍处于打开状态,则会为外部拉取请求创建一条流水线。

在此情况下,极狐GitLab CI/CD 会创建两条流水线:一条用于分支推送,另一条用于外部拉取请求。

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

额外的预定义变量#

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

变量名称以 CI_EXTERNAL_PULL_REQUEST_ 为前缀。

已知问题#

此功能不支持:

由于极狐GitLab 会创建两条流水线,如果将更改推送到引用了已打开拉取请求的远程分支,这两条流水线都会通过 GitHub 集成影响该拉取请求的状态。如果您希望仅在外部拉取请求上运行流水线,而在分支上不运行,可以在作业规范中添加 except: [branches]了解更多

故障排除#