Hintergrund :
Ich habe eine App namens myapp
mit Spring-boot
. Es besteht aus einer selbstausführbaren JAR-Datei und ist mit systemd-Diensten kompatibel. Jetzt versuche ich, es mit jenkins zu integrieren.
Was ich will:
Ich möchte, dass Jenkins in der Lage sind:
- Beenden Sie den Dienst.
- Tauschen Sie das Glas aus.
- Starten Sie den Dienst neu.
Problem:
Bisher können nur Sudoer Dienste starten / stoppen. Ich möchte nicht, dass Jenkins ein Sudoer ist (es scheint chaotisch).
Aktuelle Struktur:
Ich habe einen Benutzer, myapp
der einen /home/myapp
Ordner hat. Das generierte Glas wird aufgerufen myapp
und bei platziert /home/myapp
. Der Benutzer myapp
ist der Eigentümer des generierten JAR:
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
Ich habe einen SSH-Schlüssel platziert, damit sich Jenkins anmelden kann myapp@myserver
.
Wie myapp
der Besitzer des Glases glaube ich, dass es eine Option geben könnte, mit der der Benutzer myapp
anrufen kann systemctl start/stop myapp
. Eigentlich kann ich systemctl status myapp
aber nicht anrufen start/stop
(root Passwort wird abgefragt).
Irgendwelche Vorschläge?
sudo
chaotisch zu betrachten . Es ist im Allgemeinen die Art und Weise, wie Sie so etwas implementieren sollten. Erstellen Sie eine Gruppe, weisen Sie ihr Ihren jenkins-Benutzer zu, undvisudo
geben Sie für diese Gruppe einen eingeschränkten Befehlssatz zum Verwalten des Dienstes anmyapp
anrufen zu dürfensudo systemctl
?Antworten:
sudo
ist der Weg zu gehen. Erstellen Sie eine neue Gruppe (appadmin
zum Beispiel), fügenjenkins
Sie Ihren Benutzer hinzu undvisudo
fügen Sie einen neuen Eintrag mit einer begrenzten Liste von Befehlen hinzu, zum Beispiel:Wenn Sie möchten, dass die
appadmin
Gruppe den Dienst ohne Eingabe eines Kennworts ausführen kann (nützlich, wenn der Benutzer beispielsweise nur durch einen SSH-Schlüssel authentifiziert wird),quelle