GitLab CI/CD for external repositories
GitLab CI/CD for external repositories
Introduced in GitLab Premium 10.6.
GitLab CI / CD 可用于:
- GitHub.
- Bitbucket Cloud.
- 任何其他 Git 服务器.
无需将整个项目移至 GitLab,您可以连接外部存储库以获得 GitLab CI / CD 的好处.
连接外部存储库将建立存储库镜像并创建一个轻型项目,其中禁用了问题,合并请求,Wiki 和代码片段. 这些功能可以稍后重新启用 .
要连接到外部存储库:
- 在您的 GitLab 仪表板上,点击新建项目 .
- 切换到CI / CD 的外部回购标签.
- Choose GitHub or 通过 URL 回购.
- 后续步骤类似于导入流程 .
Pipelines for external pull requests
Introduced in GitLab Premium 12.3.
当将 GitLab CI / CD 与GitHub 上的外部存储库一起使用时 ,可以在 Pull Request 上下文中运行管道.
当您将更改推送到 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
How it works
从 GitHub 导入存储库时,GitLab 会订阅 webhooks 的push
和pull_request
事件. 收到pull_request
事件后,将存储请求请求数据并将其保留为参考. 如果刚刚创建了 Pull Request,则 GitLab 会立即为外部 Pull Request 创建管道.
如果将更改推送到”拉取请求”所引用的分支,并且”拉取请求”仍处于打开状态,则会创建用于外部拉取请求的管道.
注意:在这种情况下,GitLab CI / CD 将创建 2 条管道. 一种用于分支推送,另一种用于外部拉取请求.
关闭”拉取请求”后,即使将新的更改推送到同一分支,也不会为外部拉取请求创建任何管道.
Additional predefined variables
通过将管道用于外部拉取请求,GitLab 将其他预定义变量公开给管道作业.
变量名称以CI_EXTERNAL_PULL_REQUEST_
为前缀.
Limitations
此功能当前不支持来自派生存储库的拉取请求. 来自 fork 存储库的任何 Pull Requests 将被忽略. 阅读更多 .
鉴于 GitLab 将创建 2 条管道,如果将更改推送到引用了打开的 Pull Request 的远程分支,则两者都将通过 GitHub 集成促进 Pull Request 的状态. 如果要只在外部请求请求上而不是在分支上运行管道,则可以添加以下内容, except: [branches]
到作业规范. 阅读更多 .