我如何让Jenkins管道在(任何)代理机器上运行,但永远不会成为master?

sxpgvts3  于 2023-08-03  发布在  Jenkins
关注(0)|答案(2)|浏览(102)

我的Jenkins管道随机地在主机器和代理(从)机器上交替运行。
整个流水线只有一个agent语句,因此:

pipeline {
  agent any

字符串
我怎样才能让生成在负载平衡的代理中运行,而不需要master?

  • 也许可以用agent { label 'some-label' }来实现。是否存在指定代理而非主服务器的预定义标签?还是要我自己给所有探员贴标签?
  • Thisthis显示了如何选择一个 * 特定 * 代理,但我希望在代理机器之间进行随机平衡。
  • This question讨论了agent anyagent none,但这两个都没有阻止主机的使用。
  • This page建议将所有内容 Package 在node节中,但这似乎强制构建在主节点或指定节点上运行,这同样不允许平衡代理。
rm5edbpk

rm5edbpk1#

您可以使用node('!master') {...}agent { label '!master' }语法。查看更多详情。
Jenkins Best Practices页面中还有一个解决方案,用于设置主节点本身的限制:
如果你有一个更复杂的安全设置,允许一些用户只配置作业,但不管理Jenkins,你需要阻止他们在主节点上运行构建,否则他们可以不受限制地访问JENKINS_HOME目录。您可以通过将执行器计数设置为零来完成此操作。相反,请确保所有作业都在代理上运行。这确保了jenkins master可以扩展以支持更多的作业,并且还保护构建不会意外/恶意地修改$JENKINS_HOME上的潜在敏感数据。如果您需要在主服务器上运行一些作业(例如Jenkins本身的备份),使用Job Restrictions Plugin来限制可以在那里执行的作业。

UPDATE:正如@Moshisho提到的,内置节点在Jenkins 2.307和Jenkins 2.319.1中从“master node”重命名为“built-in node”。

所以,现在应该是agent { label '!built-in' }。查看详情here

rdlzhqv9

rdlzhqv92#

在Jenkins Web界面中为自由式作业配置基于标签的节点限制时,可以使用表达式!master执行此操作。还支持布尔运算符||&&
我不确定管道配置是否支持相同的表达式语法,但值得一试。

相关问题