Fondo :
Creé una aplicación llamada myapp
con Spring-boot
. Consiste en un jar autoejecutable y es compatible con los servicios systemd. Ahora, estoy tratando de integrarlo con Jenkins.
Lo que quiero:
Quiero que Jenkins pueda:
- detener el servicio
- reemplazar el frasco
- reiniciar el servicio.
Problema:
Hasta ahora, solo los sudoers pueden iniciar / detener servicios. No quiero que Jenkins sea un sudoer (parece desordenado).
Estructura actual:
Tengo un usuario myapp
que tiene una /home/myapp
carpeta. El jar generado se llama myapp
y se coloca en /home/myapp
. El usuario myapp
es el propietario del jar generado:
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
Coloqué una clave ssh para que jenkins pueda iniciar sesión como myapp@myserver
.
Como myapp
es el propietario del jar, creo que puede haber una opción que permita al usuario myapp
llamar systemctl start/stop myapp
. En realidad, puedo llamar systemctl status myapp
pero no start/stop
(se solicita la contraseña de root).
¿Alguna sugerencia?
sudo
desordenado, generalmente es la forma en que debería implementar algo así. Cree un grupo, asígnele su usuario jenkins y usevisudo
un conjunto de comandos limitado para ese grupo para administrar el serviciomyapp
llamarsudo systemctl
solo para su propio servicio?Respuestas:
sudo
Es el camino a seguir. Cree un nuevo grupo (appadmin
por ejemplo), coloque a sujenkins
usuario en él yvisudo
agregue una nueva entrada con una lista limitada de comandos, por ejemplo:Si desea que el
appadmin
grupo pueda operar el servicio sin ingresar una contraseña primero (útil si el usuario solo se autentica con una clave SSH, por ejemplo),fuente