外部仓库的极狐GitLab CI/CD

  • Tier: 专业版,旗舰版
  • Offering: JihuLab.com,私有化部署

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

您可以将外部代码库连接到极狐GitLab,而不是将整个项目迁移到极狐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]

疑难解答#