我在Jenkins中配置了几个代理。
对于我的一个管道作业执行,我希望在两个代理之间选择,即MYHOST11-ANSIBLE-AGENT
和MYHOST22-ANSIBLE-AGENT
,无论哪个可用。因此,如果MYHOST11-ANSIBLE-AGENT
不可用,我的Jenkins管道作业应该切换到使用MYHOST22-ANSIBLE-AGENT
你能建议我在下面的管道代码中需要做什么修改吗?
pipeline {
agent {
node {
label 'MYHOST11-ANSIBLE-AGENT'
}
}
stages {
stage('Precheck') {
steps {
sh "echo Im from Jenkins>/tmp/jenkinsmoht.txt"
字符串
注意事项:我希望我的管道只在我提到的两个代理中选择,因为只有他们有ansible,其他代理没有ansible,所以我的管道会失败。
1条答案
按热度按时间8i9zcol21#
我觉得你的命名策略有点偏颇...
假设您有两个节点,分别名为“
HOST11
“和“HOST22
“。这两个节点安装了ansible。其他节点(例如“HOST33
“)没有安装。这些是节点的名称,反映了代理运行的服务器。您希望根据节点的特性为节点(
/computer/<NodeName>/configure
)配置**“标签”,在本例中为“ansible”,从而创建一个类似配置的“节点池”**。x1c 0d1x的数据
然后使用特征的标签(“
ansible
“)将作业分配给具有相应标签(和特征)的服务器池。通过assigning labels to nodes,您可以指定要用于特定作业的资源,并为作业设置优雅队列。例如:
字符串
然后Jenkins会选择第一个可用的节点与匹配的标签,并在那里运行,除非该节点不可用。然后它会尝试下一个。如果没有可用的,作业将保持排队。
如果您选择使用主机名(实际上也只是一个“标签”,那么您只能在该节点上运行)。
另一个区别:Jenkins中的“Available Node”意味着在线。如果所有执行程序都很忙碌,它仍然是“可用的”。Jenkins作业是“粘性的”,它会等待,直到它以前运行的节点有可用的执行程序。这也可能导致第一个节点过载。如果这是一个问题,请安装"Least Load" plugin,它将使用各种标准作为负载均衡器。
这篇文章进一步constrain jobs using multiple labels。
ps:如果您的节点相似但不完全相同,您可以使用“节点属性”或"Slave Setup"插件使它们透明地兼容您的作业(例如:将VAR设置为不同的值/路径)。