我的Jenkins管道随机地在主机器和代理(从)机器上交替运行。
整个流水线只有一个agent
语句,因此:
pipeline {
agent any
字符串
我怎样才能让生成在负载平衡的代理中运行,而不需要master?
- 也许可以用
agent { label 'some-label' }
来实现。是否存在指定代理而非主服务器的预定义标签?还是要我自己给所有探员贴标签? - This和this显示了如何选择一个 * 特定 * 代理,但我希望在代理机器之间进行随机平衡。
- This question讨论了
agent any
和agent none
,但这两个都没有阻止主机的使用。 - This page建议将所有内容 Package 在
node
节中,但这似乎强制构建在主节点或指定节点上运行,这同样不允许平衡代理。
2条答案
按热度按时间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。rdlzhqv92#
在Jenkins Web界面中为自由式作业配置基于标签的节点限制时,可以使用表达式
!master
执行此操作。还支持布尔运算符||
和&&
。我不确定管道配置是否支持相同的表达式语法,但值得一试。