詹金斯的新人,對于背景關系,我有一個詹金斯設定,它有控制器和其他 4 個節點。每個節點都有自己的標簽(node1-4)。Node3 的標簽為“failover”,node4 的標簽為“failover2”。我想做的是在提交構建時,提交構建的人可以將其設定為在指定的節點 ex 上運行。節點1。然后它應該嘗試在 node1 上運行,如果該節點不可用/忙,則嘗試在 node3 上運行,如果該節點不可用/忙,則嘗試 node4,否則進入佇列并等待指定的節點可用。
不確定這是否可能,但在管道開始之前我有一些類似下面的內容。現在,如果它是任何代理,這似乎幾乎可以起作用,并且似乎隨機選擇一個節點來構建。
import groovy.transform.Field
@Field
def BUILD_NODE = ""
if (params.DEBUG_JOB == 'true') {
BUILD_NODE = "${params.NODE_LABELS}"
} else {
BUILD_NODE = '${params.NODE_LABELS} || Failover || Failover2'
}
pipeline {
agent {label "${BUILD_NODE}"}
uj5u.com熱心網友回復:
像下面這樣的東西怎么樣。這里我檢查每個節點是否有空閑的執行器。如果有空閑的執行器,該getLabels()函式將回傳特定于該節點的標簽。它將繼續迭代,直到找到空閑節點,否則它將在任何節點中調度作業。隨意根據需要改進代碼。
def labelSelected = getLabels()
println("Running on Label:" labelSelected)
pipeline {
agent {
label "${labelSelected}"
}
stages {
stage('Build') {
steps {
echo "Running!!!"
}
}
}
}
def getLabels() {
def labelOrder = ["test", "label2", "label3"]
def whereToSchedule = "test || label2 || label3"
def jenkinsNodes = Jenkins.instance.getNodes()
for(String label : labelOrder) {
for(def node: jenkinsNodes) {
if(node.labelString.contains(label)){
if (!node.getComputer().isOffline()){
if(node.getComputer().countIdle() > 0){
println("The node does have executors")
whereToSchedule = label
break
}
}
}
}
}
return whereToSchedule
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/497291.html
標籤:詹金斯
