как исправить исключение JNLPLauncher в конвейере Дженкинса - PullRequest
5 голосов
/ 28 апреля 2019

У нас есть скрипт, который использует vSphere для возврата снимка на компьютер и включения.

И затем мы проверяем, доступен ли агент следующим образом:

    def checkAgentAvalability(agName, tolerance) {
    try {
        int sleepTime = 5
        def jenkinsObj = Jenkins.instance.getNode(agName)
        printLogger("INFO", "checkAgentAvalability()  Agent: " + agName + ", tolerance: " + tolerance)
        handleSlaveMode(agName, false)
        sleep (5000)
        for (int i = 0; i < tolerance; i++) {
            if (jenkinsObj.toComputer().isOnline()) {
                if (jenkinsObj.getRootPath() != null && !jenkinsObj.getComputer().getLog().contains('error'))
                {
                    return true
                } else {
                    sleep (5000)
                }
            }
            sleep (5000)
        }
        return false
    }
    catch (err)
    {
        return false
    }
}

Мы используем эти сценарии для установки 30 машин и подготовки их к тестам.

Мы получаем сбои со случайными машинами с этим исключением:

java.io.NotSerializableException: hudson.slaves.JNLPLauncher

Как можно решить эту проблему? Я не могу найти основную причину в интернете.

Как проверить, работает ли автоматически созданный агент? У нас также иногда бывают разъединения после того, как агент работает

Спасибо

1 Ответ

0 голосов
/ 06 мая 2019

Вы должны использовать аннотацию @NonCPS .В целом, Jenkins предполагает, что все объекты являются сериализуемыми, поскольку он хотел бы приостановить / возобновить работу.Если это не так (например, Computer), им нужны специальные метаданные, чтобы Дженкинс знал об этом.

@NonCPS
def checkAgentAvalability(agName, tolerance) {
    try {
        ...
...