Как заблокировать указанный узел c в jenkins перед выполнением этапа из сценария Jenkins Pipeline? - PullRequest
1 голос
/ 23 марта 2020

У меня есть два узла, добавленных в Jenkins,

- master
- node-1

Вот мой конвейерный сценарий, я хотел бы заблокировать всех исполнителей на "узле-1" перед выполнением чего-либо на "хозяине"

node("master") {
  stage("stage-1") {
    // here lock node-1 
    //Execute script
  }
}

Есть ли способ достичь этого? (ie: блокировка узла-1)

1 Ответ

1 голос
/ 23 марта 2020

Моя стратегия состоит в том, чтобы отключить узел, как только ваше задание buyild поймает исполнителя, а затем дождаться завершения всех остальных исполнителей. На этом этапе ваш исполнитель все еще активен, но другие исполнители не могут получить новую сборку, так как он находится в автономном режиме, поэтому узел предназначен для вас самих. Когда вы закончите, вы можете снова пометить узел онлайн. Это требует серьезного одобрения администратора для сценария.

Например:

    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") , что мои работы отклоняют (например, требование метки включает !offline). Но вы можете использовать API Jenkins, чтобы отметить узел действительно в автономном режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...