如何在Jenkins管道中选择两个代理以实现高可用性

uyto3xhc  于 2023-11-17  发布在  Jenkins
关注(0)|答案(1)|浏览(179)

我在Jenkins中配置了几个代理。
对于我的一个管道作业执行,我希望在两个代理之间选择,即MYHOST11-ANSIBLE-AGENTMYHOST22-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,所以我的管道会失败。

8i9zcol2

8i9zcol21#

我觉得你的命名策略有点偏颇...
假设您有两个节点,分别名为“HOST11“和“HOST22“。这两个节点安装了ansible。其他节点(例如“HOST33“)没有安装。这些是节点的名称,反映了代理运行的服务器。
您希望根据节点的特性为节点(/computer/<NodeName>/configure)配置**“标签”,在本例中为“ansible”,从而创建一个类似配置的“节点池”**。
x1c 0d1x的数据
然后使用特征的标签(“ansible“)将作业分配给具有相应标签(和特征)的服务器池。通过assigning labels to nodes,您可以指定要用于特定作业的资源,并为作业设置优雅队列。
例如:

agent { 
    node {
        label 'ansible' 
    }

字符串
然后Jenkins会选择第一个可用的节点与匹配的标签,并在那里运行,除非该节点不可用。然后它会尝试下一个。如果没有可用的,作业将保持排队。
如果您选择使用主机名(实际上也只是一个“标签”,那么您只能在该节点上运行)。
另一个区别:Jenkins中的“Available Node”意味着在线。如果所有执行程序都很忙碌,它仍然是“可用的”。Jenkins作业是“粘性的”,它会等待,直到它以前运行的节点有可用的执行程序。这也可能导致第一个节点过载。如果这是一个问题,请安装"Least Load" plugin,它将使用各种标准作为负载均衡器。
这篇文章进一步constrain jobs using multiple labels
ps:如果您的节点相似但不完全相同,您可以使用“节点属性”或"Slave Setup"插件使它们透明地兼容您的作业(例如:将VAR设置为不同的值/路径)。

相关问题