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?
myapp
llamar sudo systemctl
solo para su propio servicio?
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 servicio