#jenkins #hpc #slurm
Вопрос:
У меня есть доступ к кластеру HPC, который использует SLURM для планирования заданий. Я хотел бы оценить возможность того, чтобы Дженкинс отправлял задания в кластер.
В качестве простого теста можно добавить узел входа HPC в Jenkins и настроить задание Jenkins, которое выполняется srun ... ./myprogram
на узле входа. srun
Команда указывает SLURM назначить вычислительный узел и выполнить ./myprogram
на нем.
Это не идеальное решение. Каждая работа Дженкинса должна быть написана для использования srun
. Сценарии более чем одной команды сложны. На вычислительном узле не запущен агент Дженкинса, поэтому возможности ограничены.
Могу ли я попросить Дженкинса вместо этого создавать новые узлы по требованию всякий раз, когда задание находится в очереди? Затем он может выполняться srun ... jenkins-agent
на узле входа в систему для создания агента Дженкинса на каком-либо вычислительном узле. А затем вычислительный узел снова подключался к Дженкинсу и выполнял задание, поставленное в очередь. Я бы ненадолго показал узел hpc-job-1643
, а затем он исчез бы после завершения задания.
Ответ №1:
Да, вы можете заставить Дженкинса запускать узлы по требованию через Slurm.
- Создайте новый узел. Установите удаленный корневой каталог в положение, доступное для всех узлов вашего кластера Slurm.
- Установите метку, которую ваши задания будут использовать для отображения этого узла.
- Установите для параметра Использование значение «Создавать задания только с выражением метки, соответствующим этому узлу».
- Выберите метод запуска «Запуск агентов через SSH» (я думаю, для этого вам нужен плагин).
- Установите для хоста имя хоста вашего узла управления Slurm.
- Настройте учетные данные и стратегию проверки ключей хоста соответствующим образом.
- Нажмите кнопку «Дополнительно …» для метода запуска SSH.
- Установите для команды «Префикс запуска агента
srun --pty [options for whatever resources and constraints you need] sh -c '
» значение . Обратите внимание на одинарную кавычку в конце. - Установите для команды Суффикс Запустить агент
'
значение . Это единственная цитата. - Для обеспечения доступности выберите «Подключайте этого агента к сети, когда он востребован, и отключайте его, когда он простаивает». Вам нужно будет установить задержку по требованию (я использую 0) и задержку простоя.
Комментарии:
1. Интересно, спасибо, я попробую это сделать. Значит, вы просто устанавливаете количество исполнителей на этом узле как-то очень высоко? Слишком много, и пользовательский интерфейс становится немного нелепым
2. Нет! Установите количество исполнителей, соответствующее количеству заданий, которые вы хотите выполнить на этом узле Slurm. Один из этих узлов Дженкинса идентично является одним узлом Slurm. Вам понадобится несколько исполнителей Jenkins, если вы хотите запускать задания на нескольких узлах Slurm.
3. Я пытаюсь это сделать, но мне любопытно
--pty
. СЛУРМ, похоже, игнорирует это, потому что родитель не является tty. Без этого агент, похоже, пытается связаться через stdout и терпит неудачу из-за какой-то неожиданной байтовой ошибки потока. Я могу пойти на все, чтобы работать под PTY, но затем также возникают ошибки (неожиданный EOF).4. Да, slurm предупреждает меня с опцией —pty и утверждает, что игнорирует ее. Однако агент Дженкинса не будет работать без этого. На самом деле нет необходимости убеждать ssh использовать pty.