簡體   English   中英

在從 Jenkins Pipeline 腳本執行階段之前,如何鎖定 jenkins 中的特定節點?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM