У меня есть два экземпляра Дженкинса. Я хочу, чтобы задание в 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