Задний план :
Я создал приложение под названием 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