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

Rek*_*vni 7 gitlab gitlab-ci gitlab-ci-runner gitlab-api

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

使用可行environments,甚至可行gitlab runner exec


场景:

已有一个已有多个运行器的项目(用于注册运行器的特定项目令牌),并且具有自己的关联标签(因此也不能更改它们)。

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

小智 5

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

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

选项1

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

为了进一步扩展这一点……即使在严酷的设置中,您无法更改标签之类的东西 - 您始终可以分叉该项目。

在新的私有分支中,您可以转到设置 >> CI/CD 并覆盖常规管道设置下自定义 CI 配置路径中的 .gitlab-ci.yml 文件。这使您可以git cp .gitlab-ci.yml .mycustomgitlab-ci.yml简单地git add/ git commit/开始git push做生意。

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

选项2

Gitlab-runner 执行....

假设您使用的是 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以及有关它的博客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

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


Rek*_*vni 4

目前,GitLab 中还没有针对特定运行程序进行构建的解决方案,但Sticky Runners存在一个未解决的问题,根据里程碑,该问题有望在未来 3-6 个月内发布!


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

  • 获取所有项目运行者
  • 据我所知,我已经部署了最新的跑步者,它将具有最高的跑步者“数量”
  • 暂停与相关项目相关的所有其他跑步者
  • 触发管道以在最新的运行器上构建
  • 轮询 GitLab API 以获取管道的状态
  • 一旦成功,恢复所有其他跑步者!
  • 如果管道失败,请记住恢复暂停的运行器......

  • 好像被推迟到2020年2月左右了!(https://gitlab.com/gitlab-org/gitlab-ce/issues/29447) (4认同)
  • 确切地说……2年了,还在等待。;) (4认同)