karlmdavis.jenkins2

Build Status

Ansible-Rolle für Jenkins 2+

Diese Ansible Rolle kann verwendet werden, um Jenkins 2 zu installieren und zu verwalten.

Anforderungen

Diese Rolle benötigt Ansible 2.4 oder höher, wobei entweder Ansible-Pipelining verfügbar sein muss oder setfacl auf dem verwalteten System vorhanden sein muss (siehe Becoming an Unprivileged User).

Die Rolle unterstützt derzeit Ubuntu 14.04 (Trusty) und Ubuntu 16.04 (Xenial). Beiträge zur Unterstützung zusätzlicher Plattformen sind willkommen!

Rollenvariablen

Diese Rolle unterstützt die folgenden Variablen, die hier mit ihren Standardwerten aus defaults/main.yml aufgeführt sind:

  • jenkins_release_line: 'weekly'
    • Wenn auf long_term_support gesetzt, installiert die Rolle die LTS-Versionen von Jenkins.
    • Wenn auf weekly gesetzt, installiert die Rolle die wöchentlichen Versionen von Jenkins.
  • jenkins_release_update: true
    • Wenn true, wird das Jenkins-Paket (YUM, APT usw.) auf die neueste Version aktualisiert, wenn diese Rolle ausgeführt wird.
  • jenkins_home: /var/lib/jenkins
    • Das Verzeichnis, in dem (die meisten) Jenkins-Daten gespeichert werden.
    • Aufgrund von Einschränkungen des Jenkins-Installers verwendet das jenkins Dienstkonto dennoch den Standardwert als Home-Verzeichnis. Dies ist nur für SSH-Schlüssel relevant.
  • jenkins_port: 8080
    • Der Port, auf dem Jenkins für HTTP-Anfragen läuft.
    • In den meisten Systemen muss dieser Wert über 1024 liegen, da Jenkins nicht als root läuft.
  • jenkins_context_path: ''
    • Der Kontextpfad, unter dem Jenkins gehostet wird, z. B. /foo in http://localhost:8080/foo. Belassen Sie ihn auf '', um am Wurzelpfad zu hosten.
  • jenkins_url_external: ''
    • Die externe URL, die Benutzer verwenden, um auf Jenkins zuzugreifen. Wird in der Jenkins-Konfiguration festgelegt und in E-Mails, Webhooks usw. verwendet.
    • Wenn dies leer gelassen wird, wird die Konfiguration nicht festgelegt, und Jenkins versucht, dies automatisch zu erkennen (was nicht korrekt funktioniert, wenn es proxy-gesteuert ist).
  • jenkins_admin_username: (undefiniert)
    • Wenn eine von jenkins_admin_username und jenkins_admin_password definiert ist, müssen beide gesetzt werden.
    • Überschreiben Sie diese Variable, um die Jenkins-Administrator-Anmeldeinformationen anzugeben, die für jeden möglichen Sicherheitsbereich verwendet werden sollen.
    • Wenn undefiniert gelassen, wird die Rolle versuchen, anonyme Authentifizierung zu verwenden.
    • Beachten Sie, dass die Rolle automatisch erkennt, ob Jenkins für die Erlaubnis anonymer Authentifizierung eingestellt ist (wie es direkt nach der Installation der Fall ist) und damit korrekt umgeht.
  • jenkins_admin_password: (undefiniert)
    • Wenn eine von jenkins_admin_username und jenkins_admin_password definiert ist, müssen beide gesetzt werden.
    • Überschreiben Sie diese Variable, um die Jenkins-Administrator-Anmeldeinformationen anzugeben.
  • jenkins_session_timeout: 30
    • Die Anzahl der Minuten, bevor Jenkins-Sitzungen ablaufen, d. h. wie lange Anmeldungen gültig sind.
    • Standardmäßig 30 Minuten.
    • Kann auf 0 gesetzt werden, um niemals abzulaufen.
  • jenkins_plugins_extra: []
    • Überschreiben Sie diese Variable, um zusätzliche Jenkins-Plugins zu installieren.
    • Diese wären zusätzlich zu den von Jenkins 2 empfohlenen Plugins, die automatisch von dieser Rolle installiert werden (siehe jenkins_plugins_recommended in defaults/main.yml).
  • jenkins_plugins_timeout: 60
  • jenkins_plugins_update: true
    • Wenn true, werden die Jenkins-Plugins aktualisiert, wenn diese Rolle ausgeführt wird. (Beachten Sie, dass fehlende Plugins immer installiert werden.)
  • jenkins_java_args_extra: ''
    • Zusätzliche Optionen, die den JAVA_ARGS für den Jenkins-Prozess hinzugefügt werden, z. B. die JVM-Speichereinstellungen, z. B. -Xmx4g.
  • jenkins_http_proxy_server, jenkins_http_proxy_port, jenkins_http_proxy_no_proxy_hosts: (alle undefiniert)
    • Diese haben die gleiche Funktion wie die JVM-Eigenschaften http.proxyHost, http.proxyPort und http.nonProxyHosts, wobei die Einstellungen sowohl für HTTP- als auch für HTTPS-Anfragen verwendet werden.
    • Insbesondere werden diese Einstellungen verwendet, um zu konfigurieren:
      • Die Jenkins-JVMs http.proxyHost, http.proxyPort, https.proxyHost, https.proxyPort und http.nonProxyHosts Eigenschaften, wie in Java Networking and Proxies dokumentiert.
      • Die spezifischen Proxy-Einstellungen von Jenkins (die einige Plugins, wie das GitHub-Plugin, benötigen), wie in JenkinsBehindProxy dokumentiert.
      • Der Wert von jenkins_http_proxy_no_proxy_hosts sollte eine Liste sein, z. B. ['localhost', 'example.com'].

Abhängigkeiten

Diese Rolle hat keine direkten Abhängigkeiten von anderen Ansible-Rollen. Sie erfordert jedoch, dass eine Java JRE im Systempfad verfügbar ist.

Beispiel-Playbook

Diese Rolle kann wie folgt installiert werden:

$ ansible-galaxy install karlmdavis.jenkins2

Diese Rolle kann wie folgt angewendet werden:

- hosts: some_box
  tasks:
    - import_role:
        name: karlmdavis.ansible-jenkins2
      vars:
        jenkins_plugins_extra:
          - github-oauth

Ausführen von Groovy-Skripten zur Konfiguration von Jenkins

Nach der Installation von Jenkins können Groovy-Skripte über Ansible ausgeführt werden, um Jenkins weiter anzupassen.

Zum Beispiel, so installieren Sie Jenkins und konfigurieren dann Jenkins zur Verwendung von HudsonPrivateSecurityRealm für lokale Jenkins-Konten:

- hosts: some_box
  tasks:

    - import_role:
        name: karlmdavis.ansible-jenkins2
      vars:
        # Wird beim ersten Durchlauf nicht benötigt, aber bei vorherigen Durchläufen (nachdem
        # die Sicherheit aktiviert wurde, wie unten beschrieben).
        jenkins_admin_username: test
        jenkins_admin_password: supersecret

    # Sicherstellen, dass Jenkins neu gestartet wurde, falls erforderlich.
    - meta: flush_handlers

    # Sicherheit konfigurieren, um lokale Jenkins-Konten zu verwenden.
    - name: Konfigurieren der Sicherheit
      jenkins_script:
        url: "{{ jenkins_url_local }}"
        user: "{{ jenkins_dynamic_admin_username | default(omit) }}"
        password: "{{ jenkins_dynamic_admin_password | default(omit) }}"
        script: |
          // Diese sind die grundlegenden Importe, die Jenkins interaktive Skriptkonsole
          // automatisch einfügt.
          import jenkins.*;
          import jenkins.model.*;
          import hudson.*;
          import hudson.model.*;

          // Sicherheit realm konfigurieren, das die Authentifizierung behandelt.
          def securityRealm = new hudson.security.HudsonPrivateSecurityRealm(false)
          if(!securityRealm.equals(Jenkins.instance.getSecurityRealm())) {
            Jenkins.instance.setSecurityRealm(securityRealm)

            // Einen Benutzer zum Anmelden erstellen. Sicherstellen, dass der Benutzer an den
            // systemlokalen `jenkins` Benutzer-SSH-Schlüssel gebunden ist, damit dieses
            // Konto mit der Jenkins-CLI verwendet werden kann.
            def testUser = securityRealm.createAccount("test", "supersecret")
            testUser.addProperty(new hudson.tasks.Mailer.UserProperty("[email protected]"));
            testUser.save()

            Jenkins.instance.save()
            println "Authentifizierung geändert."
          }

          // Autorisierungsstrategie konfigurieren, die festlegt, wer was tun kann.
          def authorizationStrategy = new hudson.security.FullControlOnceLoggedInAuthorizationStrategy()
          if(!authorizationStrategy.equals(Jenkins.instance.getAuthorizationStrategy())) {
            authorizationStrategy.setAllowAnonymousRead(false)
            Jenkins.instance.setAuthorizationStrategy(authorizationStrategy)
            Jenkins.instance.save()
            println "Autorisierung geändert."
          }
      register: shell_jenkins_security
      changed_when: "(shell_jenkins_security | success) and 'Changed' not in shell_jenkins_security.stdout"

Alternativ können die Groovy-Skripte als separate Dateien gespeichert und über lookup(...) wie folgt eingebunden werden:

- hosts: some_box
  tasks:

    - import_role:
        name: karlmdavis.ansible-jenkins2
      vars:
        # Wird beim ersten Durchlauf nicht benötigt, aber bei vorherigen Durchläufen (nachdem
        # die Sicherheit aktiviert wurde, wie unten beschrieben).
        jenkins_admin_username: test
        jenkins_admin_password: supersecret

    # Sicherstellen, dass Jenkins neu gestartet wurde, falls erforderlich.
    - meta: flush_handlers

    # Sicherheit konfigurieren, um lokale Jenkins-Konten zu verwenden.
    - name: Konfigurieren der Sicherheit
      jenkins_script:
        url: "{{ jenkins_url_local }}"
        user: "{{ jenkins_dynamic_admin_username | default(omit) }}"
        password: "{{ jenkins_dynamic_admin_password | default(omit) }}"
        script: "{{ lookup('template', 'templates/jenkins_security.groovy.j2') }}"

Lizenz

Dieses Projekt ist im weltweiten öffentlichen Bereich. Wie in CONTRIBUTING angegeben:

Dieses Projekt ist im öffentlichen Bereich innerhalb der Vereinigten Staaten, und Urheberrechte und verwandte Rechte am Werk weltweit werden durch die CC0 1.0 Universalübertragung in den öffentlichen Bereich aufgehoben.

Alle Beiträge zu diesem Projekt werden unter der CC0-Übertragung veröffentlicht. Durch das Einreichen eines Pull-Requests erklären Sie sich damit einverstanden, diese Aufhebung des Urheberrechtsinteresses einzuhalten.

Autoreninformation

Dieses Plugin wurde von Karl M. Davis (https://justdavis.com/karl/) verfasst.

Über das Projekt

This Ansible role can be used to install and manage Jenkins 2.

Installieren
ansible-galaxy install karlmdavis.jenkins2
Lizenz
other
Downloads
901
Besitzer