GitLab CI/CD for external repositories

原文:https://docs.gitlab.com/ee/ci/ci_cd_for_external_repos/

GitLab CI/CD for external repositories

Introduced in GitLab Premium 10.6.

GitLab CI / CD 可用于:

无需将整个项目移至 GitLab,您可以连接外部存储库以获得 GitLab CI / CD 的好处.

连接外部存储库将建立存储库镜像并创建一个轻型项目,其中禁用了问题,合并请求,Wiki 和代码片段. 这些功能可以稍后重新启用 .

要连接到外部存储库:

  1. 在您的 GitLab 仪表板上,点击新建项目 .
  2. 切换到CI / CD 的外部回购标签.
  3. Choose GitHub or 通过 URL 回购.
  4. 后续步骤类似于导入流程 .

CI/CD for external repository project creation

Pipelines for external pull requests

Introduced in GitLab Premium 12.3.

当将 GitLab CI / CD 与GitHub 上外部存储库一起使用时 ,可以在 Pull Request 上下文中运行管道.

当您将更改推送到 GitHub 中的远程分支时,GitLab CI / CD 可以为该分支运行管道. 但是,当您打开或更新该分支的”拉取请求”时,您可能需要:

  • 运行额外的工作.
  • 不运行特定作业.

例如:

  1. always-run:
  2. script: echo 'this should always run'
  3. on-pull-requests:
  4. script: echo 'this should run on pull requests'
  5. only:
  6. - external_pull_requests
  7. except-pull-requests:
  8. script: echo 'this should not run on pull requests'
  9. except:
  10. - external_pull_requests

How it works

从 GitHub 导入存储库时,GitLab 会订阅 webhooks 的pushpull_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]到作业规范. 阅读更多 .