我們的專案使用 Jenkins 管道進行自動化測驗和打包。管道在Jenkinsfile具有多個階段的腳本中定義。多個作業(由來自不同開發分支的推送事件觸發)可能并行運行。
現在我們需要針對資源有限的外部系統測驗一個函式。
假設該系統有 10 個資源“槽”用于測驗:#1、#2、...、#10。當每個管道作業想要測驗該功能時,它需要“保留”一個插槽號(一個整數就足夠了),然后測驗程式使用插槽號(如令牌或其他東西)與外部系統對話。作業完成后,它會釋放號碼。
在詹金斯有可能嗎?換句話說,Jenkins 需要為所有并行作業維護一個小的整數陣列。每當一個作業要求一個“槽”號時,它就會在陣列中找到一個空閑號并將其鎖定。
我在谷歌上搜索并找到了一個名為“可鎖定資源插件”的
lock管道代碼中的步驟獲取槽。這里的關鍵是使用quantity: 1引數只獲取一個插槽(默認情況下,它會嘗試獲取與給定標簽匹配的所有資源)。當該lock步驟的代碼塊結束時,它會自動釋放。當所有插槽都在使用中時,該lock步驟將等待下一個插槽可用。pipeline {
agent any
stages {
stage('Stage 1') {
steps {
script {
// Acquire a single slot
lock(label: 'slots', quantity: 1, variable: 'slotName') {
// Extract the slot number from the resource name
def slotNumber = slotName.split('-')[1] as int
// Code that uses the slot
echo "Acquired slot $slotNumber"
// Slot gets released automatically
}
}
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/342366.html
