Назад | Перейти на главную страницу

jenkins cli build через ssh отключается через 10 минут

У меня есть два экземпляра Дженкинса. Я хочу, чтобы задание в 1-м экземпляре вызывало задание во 2-м экземпляре, дождалось его завершения и выполняло некоторые действия (с использованием артефактов, созданных job @ 2nd)

Я придумал это решение - используя команды Jenkins CLI через SSH

ssh -p 2222 second-jenkins build second-job -s -v <further options>

Но этот сеанс отключается через 10 минут с сообщением:

Получено отключение от 192.168.147.102: 2: Время ожидания пользователя истекло через 600000 мс.

я нашел опция клиента ssh с именем ServerAliveInterval

ssh -o ServerAliveInterval=30 -p 2222 second-jenkins build second-job -s -v <...>

В документации по этой опции говорится

ServerAliveInterval

Устанавливает интервал тайм-аута в секундах, после которого если данные с сервера не поступали, ssh (1) отправит сообщение через зашифрованный канал, чтобы запросить ответ от сервера. Значение по умолчанию - 0, что означает, что эти сообщения не будут отправлены на сервер. Эта опция применима только к версии протокола 2.

Это работает, но только в том случае, если сервер неактивен не менее чем на 30 секунд каждые 10 минут. Конечно, я могу использовать 1 секунду вместо 30, но это не будет работать для заданий с непрерывным выводом на консоль (например, сборки maven).

Есть ли решение, которое поддерживает соединение даже для тяжелых задач вывода на консоль?

Вы должны взглянуть на screen или tmux. Установите один из них на удаленный хост и запустите свою команду внутри этого сеанса. ssh имеет -t возможность выделить tty, поэтому вы должны сделать что-то подобное для screen:

$ ssh -t user@host screen 'your_command'

Добавьте это в запуск Jenkins, чтобы отключить тайм-аут SSHD:

-Dorg.jenkinsci.main.modules.sshd.SSHD.idle-timeout=0

Смотрите также https://medium.com/@alaoui.rda/jenkins-cli-ssh-timeout-38386c943c22