GitLab:是否可以在特定的 运行 上 运行 管道?

GitLab: Is it possible to run pipeline on a specific runner?

是否可以在特定 运行 网络上 运行 管道? (不使用标签)

是否可以使用environments,甚至gitlab runner exec


场景:

现有项目已经附加了多个 运行ners(用于注册 运行ners 的特定项目令牌)并且有自己的关联标签(因此也无法更改这些).

我正在添加一个新的 运行ner,但需要先对其进行测试以确保其正常工作,但我需要强制管道在此机器上构建,而不更改任何标签或特定项目运行ner.

如果您不想使用标签,另一种选择是将运行器分配给您的特定项目。这个选项或者tag alternative是Gitlab的设计方式。

目前没有在 GitLab 中构建特定运行器的解决方案,但是 Sticky Runners 有一个未解决的问题,希望根据里程碑在接下来的 3-6 个月内解决!


到目前为止,我为在特定运行器上构建项目所做的工作是使用 GitLab Runner API,以一种相当 hacky 的方式,沿着:

  • 获取所有项目运行者
  • 据我所知,我已经部署了最新的跑步者,它将拥有最高的跑步者 "number"
  • 暂停与相关项目关联的所有其他运行程序
  • 触发管道在最新的运行器上构建
  • 轮询 GitLab API 以获取管道的状态
  • 一旦成功,恢复所有其他跑步者!
  • 如果流水线失败,记得恢复暂停的运行器...

您可以通过两种机制来尝试隔离新的运行程序以进行测试:

  1. 使用标签和私人跑步者附件(已调用)
  2. 直接在 runner 上使用 gitlab-runner exec 动词
  3. canary the runner 仅用于单个构建

选项 1

使用标签和私人跑步者附件(已调用)。

为了进一步扩展这一点...即使在您无法更改标签和诸如此类的严酷设置中 — 您始终可以 FORK 项目。

在你的新私有分支中,你可以转到设置 >> CI/CD 并在通用管道设置下的自定义 CI 配置路径中覆盖 .gitlab-ci.yml 文件.这使您可以 git cp .gitlab-ci.yml .mycustomgitlab-ci.yml 然后只需 git add/git commit/git push 就可以了。

意见:如果你不能使用现有的机制来调整有问题的运行器上的标签并隔离一个新的分叉项目,这不是技术问题,而是政治问题。

选项 2

Gitlab-runner exec....

假设您使用的是 shell gitlab runner...

  1. SSH 到您要测试的有问题的 gitlab runner box
  2. 克隆相关项目的存储库以...说.../tmp/myrepo
  3. 执行 Gitlab-Runner:/path/to/gitlab-runner exec shell {.gitlab-ci.yml target}

https://docs.gitlab.com/runner/commands/#gitlab-runner-exec and a blog about it at https://substrakt.com/how-to-debug-gitlab-ci-builds-locally/

选项 3

Canary 用于单个构建的 gitlab-runner。

您可以启动 gitlab-runner 进程进行 N 次构建,然后离线返回。参见:https://docs.gitlab.com/runner/commands/#gitlab-runner-run-single

...这不是零影响,但肯定会限制任何问题的爆炸半径。