Fundo :
Eu criei um aplicativo chamado myapp
com Spring-boot
. Ele consiste em um jar autoexecutável e é compatível com os serviços systemd. Agora, estou tentando integrá-lo com jenkins.
O que eu quero:
Eu quero que Jenkins seja capaz de:
- interromper o serviço.
- substitua a jarra.
- reinicie o serviço.
Problema:
Até agora, apenas sudoers podem iniciar/interromper serviços. Não quero que Jenkins seja um sudoer (parece confuso).
Estrutura atual:
Eu tenho um usuário myapp
que tem uma /home/myapp
pasta. O jar gerado é chamado myapp
e colocado em /home/myapp
. O usuário myapp
é o proprietário do jar gerado:
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
Coloquei uma chave ssh para que jenkins possa logar como myapp@myserver
.
Como myapp
é o dono do jar, acho que pode haver uma opção que permita ao usuário myapp
chamar systemctl start/stop myapp
. Na verdade, posso ligar, systemctl status myapp
mas não start/stop
(a senha do root é solicitada).
Alguma sugestão?
sudo
é o caminho a percorrer. Crie um novo grupo (appadmin
por exemplo), coloque seujenkins
usuário nele e, usando,visudo
adicione uma nova entrada com uma lista limitada de comandos, por exemplo:Se você deseja que o
appadmin
grupo possa operar o serviço sem inserir uma senha primeiro (útil se o usuário for autenticado apenas por uma chave SSH, por exemplo),