Вызовите sudo от Jenkins

У меня есть одна машина сборки, у которой есть пользователь abc который имеет ограниченный доступ к sudo. Когда я проверяю исходный код и запускаю скрипт сборки, он работает нормально. Сценарий сборки содержит запросы sudo для которых он не говорит «sudo: no tty present и no askpass program defined». Но когда я делал то же самое с Дженкинсом на машине сборки, добавленной как подчиненный, она показывает «sudo: no tty present и no askpass program defined».

Я нашел одно решение, говорящее, чтобы прокомментировать Default requiretty в файле /etc/sudoers . Но у меня нет доступа к этому файлу.

Как я могу преодолеть эту проблему?

Есть два варианта, закомментируйте Defaults requiretty значение по Defaults requiretty из / etc / sudoers, как вы упомянули, или используйте аргумент распределения псевдо-tty ( -t ) для ssh .

Попробуйте следующее в сценарии jenkins:

ssh -t 127.0.0.1 "sudo command"

Хотя вам придется иметь предварительно разделенные ключи ssh настроенные для себя, и запускать их один раз вручную, чтобы добавить запись на известные хосты, -o StrictHostKeyChecking=no добавьте в -o StrictHostKeyChecking=no аргумент, чтобы игнорировать это.

Он терпит неудачу, потому что sudo пытается запросить пароль root и нет псевдо-tty.

Вы должны либо войти в систему как root, либо настроить следующие правила в /etc/sudoers (или: sudo visudo ):

 # Members of the admin group may gain root privileges. %admin ALL=(ALL) NOPASSWD:ALL 

Затем убедитесь, что ваш пользователь Jenkins принадлежит группе admin (или wheel ).

В идеале (безопаснее) было бы ограничить права root только конкретными командами, которые могут быть указаны как %admin ALL=(ALL) NOPASSWD:/path/to/program

Если вы выполняете команды через ssh, вам нужно проверить опцию «Exec in pty». введите описание изображения здесь