Differenzierung der Zugriffsrechte in Jenkins

Einmal habe ich viel im Internet gestöbert, aber es wurde keine passende Lösung gefunden. Ich beschloss, ein Lösungsrezept zu teilen.

Aufgabe: Organisieren des Zugriffs auf Jenkins für Teilnehmer verschiedener Entwicklungsteams, sodass Mitglieder eines Teams keinen Zugriff auf Aufgaben oder Arbeitsbereichsaufgaben anderer Teams haben. Das heißt Damit jeder in seinem Projekt tun kann, was Jenkins will, kann er nicht einmal einen Blick auf die Quellcodes des Projekts werfen, die er sich nicht ansehen sollte.

Die Lösung bestand nicht darin, dass es gegoogelt wurde, sondern war von einer vergeblichen Suche nach einer geeigneten Methode inspiriert.

Es wird weiterhin davon ausgegangen, dass Jenkins in einer Linux-Umgebung funktioniert, es wurde jedoch nicht unter Windows getestet.

Es mussten zwei Probleme gelöst werden:

1. In der Standardauslieferung gibt es keine Mittel zum Gruppieren von Aufgaben, und dementsprechend ist es unmöglich, Rechte für eine Gruppe von Aufgaben an eine Gruppe von Benutzern zu verteilen.
2. Auch wenn Sie das erste Problem lösen, bleibt das zweite Problem bestehen - Benutzer können auf Betriebssystemebene auf Arbeitsbereichstasks zugreifen. Beispielsweise können Sie ohne große Schwierigkeiten ein Bash-Skript ausführen, mit dem Sie das gesamte jenkins-Ausgangsverzeichnis archivieren und per E-Mail senden können.

Also eine Beschreibung der Lösung.

  1. Wir setzen Jenkins. Ich habe Fedora, also:
    • dnf installiere jenkins
    • Sudo Service Jenkins starten
    • danach beobachten wir auf localhost : 8080

  2. Jenkins-Benutzer erstellen
    • Wir gehen zum Abschnitt "Configure Global Security" von Jenkins, in dem wir die erforderlichen Häkchen setzen:

      Bild
    • Erteilen Sie vorerst alle Rechte einem anonymen Benutzer.
    • Nach dem Speichern der Einstellungen erscheint der Link "Registrieren" in der Kopfzeile, wir registrieren den Jenkins-Administrator und die erforderlichen Benutzer (Teilnehmer der Entwicklungsteams)
    • Schließlich richten wir globale Benutzerrechte ein, und zwar: Wir gewähren dem Administrator vollständigen Zugriff, normalen Benutzern nur Lesezugriff, und wir verbieten alles für einen anonymen Benutzer:

      Bild

  3. Installieren Sie das Plugin (Plugin Management) "CloudBees Folders Plugin". Mit dem Plugin können Sie Verzeichnisse erstellen - Gruppen von Aufgaben, beliebige Verschachtelung. Verzeichnissen können Rechte für bestimmte Benutzer gewährt werden. Weiter:
    • Erstellen Sie unter dem Administrator eine Aufgabe vom Typ "Ordner", eine Aufgabe vom Typ "Ordner" pro Entwicklungsteam. Beispiel:

      Bild

    • Wir konfigurieren Zugriffsrechte für jedes der Top-Level-Verzeichnisse: Wir gehen in das Verzeichnis und wählen "Konfigurieren" → "Projektbasierte Sicherheit aktivieren".

      Bild
    • Auf globaler Ebene war es Benutzern daher untersagt, Aufgaben zu erstellen bzw. anzuzeigen. Nur der Administrator kann Aufgaben auf oberster Ebene erstellen. Innerhalb von Verzeichnissen sind Benutzer mit den entsprechenden Rechten jedoch nicht durch irgendetwas eingeschränkt. Wir prüfen die Sichtbarkeit von Verzeichnissen, gehen unter einen der Benutzer:

      Bild

      Wir stellen fest, dass nur ein Projekt zur Verfügung steht, für das Rechte vergeben werden. Innerhalb des Katalogs können Sie alles tun, zum Beispiel neue Aufgaben erstellen: Die

      Bild

      halbe Miete ist geschafft.

  4. Als nächstes brauchen wir Benutzer des Betriebssystems, erstellen sie (ich werde hier keine Beispiele geben, Google wird immer erzählen). Jetzt ziehen wir die Installationsoption in Betracht, wenn Jenkins auf derselben Maschine ausgeführt wird, auf der die Baugruppen hergestellt werden. Unsere OS-Benutzer benötigen SSH-Zugang, SSHD sollte funktionieren. So werden Benutzer erstellt: jenkins1 und jenkins2 für jedes Entwicklungsteam.
  5. Die Zugriffskontrolle auf Betriebssystemebene wird über Knoten implementiert, die jeweils unter dem Betriebssystembenutzer funktionieren, der für einen bestimmten Befehl ausgewählt wurde. Wir konfigurieren Notizen.
    • Deaktivieren Sie zunächst master: Jenkins konfigurieren → Build-Umgebungen verwalten → master → Konfigurieren, wobei wir "Anzahl der ausgeführten Prozesse = 0" festlegen.

      Bild
    • Wir erstellen für jedes Projekt zwei neue Knoten (Nodes).

      Bild
    • Hier ist es wichtig, dass wir die Anzahl der Worker, den Stamm des Remote-FS, den Host und die Anmeldeinformationen des Betriebssystembenutzers angeben, mit dem die SSH-Sitzung eingerichtet werden soll. Wir erstellen sie im Systembereich, damit sie nicht für normale Benutzer zugänglich sind.

      Bild
    • So werden die Knoten erstellt und können bearbeitet werden:

      Bild

  6. Wir definieren die Gruppen von Aufgaben, die auf jedem der Knoten ausgeführt werden. Dazu benötigen wir das Plugin „Job Restrictions Plugin“. Nach seiner Installation kann die Klasse der Aufgaben festgelegt werden, die auf einem bestimmten Knoten ausgeführt werden sollen, z. B. durch den regulären Ausdruck:

    Bild

    Eine kleine Nuance in diesem Beispiel sind Aufgaben, die vor der Konfiguration der Knoten erstellt wurden gebunden an den Master-Knoten, um dies zu ändern, müssen Sie eine neue Aufgabe in dem entsprechenden Verzeichnis erstellen, dann geschieht die Magie und die Aufgaben werden auf den erforderlichen Knoten ausgeführt.

Insgesamt haben wir:

1. Zugriffstrennung zwischen Teams auf OS-Ebene.
2. Teilen des Zugriffs zwischen Teams auf der Jenkins-Ebene.
3. Die Möglichkeit, Benutzern Zugriff auf die Arbeitsverzeichnisse der entsprechenden Betriebssystembenutzer zu gewähren, damit sie selbst alles installieren, konfigurieren und kopieren können.
4. Eine Jenkins-Instanz, die Administration und Wartung erheblich vereinfacht.
5. Falls erforderlich, können Sie bei Bedarf ganz einfach weitere Knoten hinzufügen. Die Lösung wird bereits getestet.

Ich hoffe, dieses Rezept wird nützlich sein, danke für Ihre Aufmerksamkeit!

Jetzt auch beliebt: