外部仓库的极狐GitLab CI/CD
- Tier: 专业版,旗舰版
- Offering: JihuLab.com,私有化部署
极狐GitLab CI/CD 可以与 GitHub、Bitbucket Cloud 或其他任何 Git 服务器一起使用。存在一些已知问题。
您可以将外部代码库连接到极狐GitLab,而不是将整个项目迁移到极狐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 仓库的拉取请求。
考虑到极狐GitLab 创建了两个流水线,如果更改被推送到引用打开的拉取请求的远程分支,两个都通过 GitHub 集成贡献给拉取请求的状态。如果您希望专门在外部拉取请求而不是分支上运行流水线,您可以在作业规范中添加 except: [branches]。