Tło :
Stworzyłem aplikację o nazwie myapp
with Spring-boot
. Składa się z wykonalnego słoika i jest kompatybilny z usługami systemowymi. Teraz próbuję zintegrować go z Jenkins.
Czego chcę:
Chcę, żeby Jenkins mógł:
- zatrzymać usługę.
- wymienić słoik.
- uruchom ponownie usługę.
Problem:
Do tej pory tylko osoby sudoerskie mogły uruchamiać / zatrzymywać usługi. Nie chcę, żeby Jenkins był sudoerem (wydaje się bałagan).
Obecna struktura:
Mam użytkownika, myapp
który ma /home/myapp
folder. Wygenerowany słoik jest wywoływany myapp
i umieszczany pod adresem /home/myapp
. Użytkownik myapp
jest właścicielem wygenerowanego słoika:
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
Umieściłem klucz ssh, aby Jenkins mógł się zalogować jako myapp@myserver
.
Podobnie myapp
jak właściciel słoika, myślę, że może istnieć opcja, która pozwala użytkownikowi myapp
zadzwonić systemctl start/stop myapp
. Właściwie mogę dzwonić, systemctl status myapp
ale nie mogę start/stop
(wymagane jest hasło roota).
Jakieś sugestie?
sudo
bałagan, jest to na ogół sposób, w jaki powinieneś wdrożyć coś takiego. Utwórz grupę, przypisz do niej swojego użytkownika Jenkins i zavisudo
pomocą ograniczonego zestawu poleceń do zarządzania tą usługąmyapp
na dzwonieniesudo systemctl
tylko dla własnej usługi?Odpowiedzi:
sudo
jest droga. Utwórz nową grupę (appadmin
na przykład), umieśćjenkins
w niej użytkownika i za pomocąvisudo
dodaj nowy wpis z ograniczoną listą poleceń, na przykład:Jeśli chcesz, aby
appadmin
grupa mogła obsługiwać usługę bez uprzedniego podania hasła (przydatne, jeśli użytkownik jest uwierzytelniany tylko na przykład za pomocą klucza SSH),źródło