如何使Jenkins管道在(任何)代理计算机上运行,​​但永远不会成为主服务器?

时间:2019-01-03 10:46:34

标签: jenkins jenkins-pipeline

我的Jenkins管道在主计算机和代理(从)计算机上运行之间随机交替。

整个管道使用的语句只有一个agent,因此:

pipeline {
  agent any

我如何才能使构建在负载平衡的代理中运行,而又从不掌握?

  • 也许可以使用agent { label 'some-label' }完成。是否有一个预定义标签指定代理而不是主服务器?还是我必须自己给所有代理商贴标签?

  • Thisthis显示了如何选择特定于代理,但是我希望在代理计算机之间进行随机平衡。

  • This question讨论了agent anyagent none,但是这些都不妨碍母版的使用。
  • This page建议将所有内容包装在node节中,但这似乎迫使构建在主节点或指定节点上运行,这又再次导致代理平衡。

2 个答案:

答案 0 :(得分:2)

您可以使用node('!master') {...}agent { label '!master' }语法。查看更多详细信息there

Jenkins Best Practices页面上还有一个解决方案,用于设置主节点本身的限制:

  

如果您具有更复杂的安全设置,使某些用户只能配置作业,而不能管理Jenkins,则需要防止它们在主节点上运行构建,否则他们可以不受限制地访问JENKINS_HOME目录。您可以通过将执行程序计数设置为零来执行此操作。相反,请确保所有作业都在代理上运行。这样可以确保jenkins主服务器可以扩展以支持更多的工作,并且还可以防止构建意外或恶意地修改$ JENKINS_HOME上的潜在敏感数据。如果您需要在主服务器上运行某些作业(例如Jenkins本身的备份),请使用Job Restrictions Plugin来限制可以在那里执行的作业。

答案 1 :(得分:1)

在jenkins Web界面中基于自由样式作业的标签配置节点限制时,可以使用表达式!master进行操作。还支持布尔运算符||&&

我不确定管道配置是否支持相同的表达式语法,但是值得一试。