Fundo :
Eu criei um aplicativo chamado myapp
with Spring-boot
. Ele consiste em um jar auto-executável e é compatível com os serviços systemd. Agora, estou tentando integrá-lo ao jenkins.
O que eu quero:
Quero que Jenkins seja capaz de:
- pare o serviço.
- substitua o frasco.
- reinicie o serviço.
Problema:
Até agora, apenas os sudoers podem iniciar / parar serviços. Eu 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 o jenkins possa registrar como myapp@myserver
.
Como myapp
é o proprietário do jar, acho que pode haver uma opção que permita ao usuário myapp
ligar systemctl start/stop myapp
. Na verdade, eu posso ligar, systemctl status myapp
mas não start/stop
(a senha root é solicitada).
Alguma sugestão?
sudo
bagunçado; geralmente é assim que você deve implementar algo assim. Crie um grupo, atribua seu usuário jenkins a ele e usevisudo
fornecer um conjunto de comandos limitado para esse grupo para gerenciar o serviçomyapp
ligarsudo systemctl
apenas para seu próprio serviço?Respostas:
sudo
é o caminho a percorrer. Crie um novo grupo (appadmin
por exemplo), coloque seujenkins
usuário nele e, usandovisudo
adicionar 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),fonte