[英]How do I lock a specific node in jenkins before executing a stage from Jenkins Pipeline script?
我在 Jenkins 中添加了兩個節點,
- master
- node-1
這是我的管道腳本,我想在“master”上執行任何操作之前鎖定“node-1”上的所有執行程序
node("master") {
stage("stage-1") {
// here lock node-1
//Execute script
}
}
有沒有辦法實現這一目標? (即:鎖定節點 1)
我的策略是在您的buyild 作業捕獲到執行程序后立即將節點標記為離線,然后等待所有其他執行程序完成。 在這個階段,你的 executor 仍然處於活動狀態,但其他 executor 無法獲得新構建,因為它處於離線狀態,所以節點是你自己的。 完成后,您可以再次將節點標記為在線。 這需要對腳本進行一些嚴肅的管理員批准。
例如:
final int sleeptimeSeconds = 10
final String agentname = 'node-1'
echo "Waiting for an executor for ${agentname}..."
node(agentname) {
try {
timeout(time: timeoutminutes, unit: 'MINUTES') {
markAgentOnlineOfOffline(agentname, false)
sleep 5
Computer computer = Jenkins.getInstance().getComputer(agentname)
echo "Waiting for other executors to complete on ${agentname}..."
while (computer.countBusy() > 1) {
sleep sleeptimeSeconds
}
echo "Ready to do work on '${agentname}' in exclusive mode..."
...
}
} catch (e) {
markAgentOnlineOfOffline(agentname, true)
throw e
}
}
def markAgentOnlineOfOffline(String nodeName, boolean online) {
...
}
最后一個函數markAgentOnlineOfOffline
可以在邏輯中實現(例如,我自己使用“離線”標簽,我的工作拒絕了該標簽(即標簽要求包括!offline
)。但是您可以使用 Jenkins api 來真正標記節點離線。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.