Как использовать sudo в build script для gitlab ci?

Когда я хотел бы сделать что-то, что требует sudo privelegies, процесс сборки stucks и когда ps aux для этой команды, он висит в списке, но ничего не делает.

например:.

в buildscript:

# stop nginx
echo "INFO: stopping nginx. pid [$(cat /opt/nginx/logs/nginx.pid)]"
sudo kill $(cat /opt/nginx/logs/nginx.pid)

в консоли вывода gitlab ci:

INFO: stopping nginx. pid [2741]

kill $(cat /opt/nginx/logs/nginx.pid) # with a spinning wheel

в bash:

> ps aux | grep nginx

root      6698  0.0  0.1  37628  1264 ?        Ss   19:25   0:00 nginx: master process /opt/nginx/sbin/nginx
nobody    6700  0.3  0.3  41776  3832 ?        S    19:25   0:00 nginx: worker process
kai   7015  0.0  0.0   4176   580 pts/0    S+   19:27   0:00 sh -c sudo kill $(cat /opt/nginx/logs/nginx.pid)
kai   7039  0.0  0.0   7828   844 pts/2    S+   19:27   0:00 grep nginx

Итак:

  • не выполняется sudo kill $(cat /opt/nginx/logs/nginx.pid), но sh -c sudo kill $(cat /opt/nginx/logs/nginx.pid)
  • он висит, без ответа (звучит для меня, как будто он запрашивает пароль в интерактивном режиме)

Ответы

Ответ 1

Существует несколько способов решить эту проблему.

Разрешения sudo на грант

Вы можете предоставить разрешения sudo для пользователя gitlab-runner, так как это тот, кто выполняет сборку script.

$ sudo usermod -a -G sudo gitlab-runner

Теперь вам нужно удалить ограничение пароля для sudo для пользователя gitlab-runner.

Запустите редактор sudo с помощью

$ sudo visudo

Теперь добавьте следующее в конец файла

gitlab-runner ALL=(ALL) NOPASSWD: ALL

Не делайте этого для бегунов gitlab, которые могут быть выполнены ненадежными пользователями.

SSH Runner

Вы можете настроить gitlab-ci-runner для подключения к удаленному хосту с помощью SSH. Вы настраиваете это, чтобы использовать пользователя удаленно, у которого есть разрешения sudo, и выполнить сборку с использованием этого пользователя. Удаленным хостом может быть тот же самый компьютер, на котором выполняется бегун gitlab, или может быть другим хостом.

У этой учетной записи пользователя сборки все равно должны быть разрешения sudo и passless. Следуйте инструкциям ниже, за исключением замены gitlab-runner на пользователя сборки.