Задний план :
Я создал приложение под названием myapp с участием Spring-boot. Он состоит из самоисполняемого jar-файла и совместим со службами systemd. Теперь я пытаюсь интегрировать его с jenkins.
Что я хочу:
Я хочу, чтобы Дженкинс мог:
Проблема:
До сих пор только sudoers могли запускать / останавливать службы. Я не хочу, чтобы Дженкинс был sudoer (это кажется грязным).
Текущая структура:
У меня есть пользователь myapp который имеет /home/myapp папка. Сгенерированный jar называется myapp и находится в /home/myapp. Пользователь myapp является владельцем сгенерированной банки:
myapp@myserver:~/backend$ ll
total 53900
drwxrwxr-x 2 myapp myapp 4096 Apr 25 17:09 ./
drwxr-xr-x 6 myapp myapp 4096 Apr 25 17:08 ../
-rw-rw-r-- 1 myapp myapp 511 Apr 20 16:13 application.properties
-rwxr--r-- 1 myapp myapp 55175294 Apr 20 19:06 backend-1.0-SNAPSHOT.jar*
lrwxrwxrwx 1 myapp myapp 24 Apr 20 19:20 myapp -> backend-1.0-SNAPSHOT.jar*
-rw-r--r-- 1 myapp myapp 179 Apr 20 19:26 myapp.service
Я разместил ключ ssh, чтобы Дженкинс мог войти как myapp@myserver.
Так как myapp является владельцем банки, я думаю, что может быть опция, которая позволяет пользователю myapp звонить systemctl start/stop myapp. На самом деле я могу позвонить systemctl status myapp но нет start/stop (запрашивается пароль root).
Какие-либо предложения?
sudo это путь. Создать новую группу (appadmin например), поставьте jenkins пользователь в нем и используя visudo добавить новую запись с ограниченным списком команд, например:
Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start myapp, /bin/systemctl stop myapp
%appadmin ALL=(ALL) MYAPP_CMNDS
Если вы хотите appadmin группа, чтобы иметь возможность управлять службой без предварительного ввода пароля (полезно, если пользователь аутентифицируется только с помощью ключа SSH, например),
Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start myapp, /bin/systemctl stop myapp
%appadmin ALL=(ALL) NOPASSWD: MYAPP_CMNDS