Sfondo :
Ho creato un'app chiamata myapp
con Spring-boot
. È costituito da un vaso auto-eseguibile ed è compatibile con i servizi di sistema. Ora sto cercando di integrarlo con jenkins.
Quello che voglio:
Voglio che jenkins sia in grado di:
- interrompere il servizio.
- sostituire il barattolo.
- riavviare il servizio.
Problema:
Fino ad ora, solo i sudoer possono avviare / interrompere i servizi. Non voglio che Jenkins sia un sudoer (sembra disordinato).
Struttura attuale:
Ho un utente myapp
che ha una /home/myapp
cartella. Il jar generato viene chiamato myapp
ed è posizionato in /home/myapp
. L'utente myapp
è il proprietario del vaso generato:
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
Ho inserito una chiave ssh in modo che jenkins possa accedere come myapp@myserver
.
Come myapp
è il proprietario del vaso, penso che potrebbe esserci un'opzione che consente all'utente myapp
di chiamare systemctl start/stop myapp
. In realtà, posso chiamare systemctl status myapp
ma non start/stop
(viene richiesta la password di root).
Eventuali suggerimenti?
myapp
di chiamare sudo systemctl
solo per il proprio servizio?
sudo
disordinato, è generalmente il modo in cui dovresti implementare qualcosa del genere. Crea un gruppo, assegna il tuo utente jenkins ad esso e usandovisudo
fornire un set di comandi limitato a quel gruppo per la gestione del servizio