karlmdavis.jenkins2

Status budowy

Rola Ansible dla Jenkins 2+

Ta rola Ansible może być używana do instalacji i zarządzania Jenkins 2.

Wymagania

Ta rola wymaga Ansible w wersji 2.4 lub nowszej, z dostępnością pipeliningu Ansible lub setfacl na systemie, którym zarządzamy (zgodnie z Zostawanie użytkownikiem bez uprawnień).

Rola obsługuje obecnie systemy Ubuntu 14.04 (Trusty) oraz Ubuntu 16.04 (Xenial), jednak przyjmujemy wkład na wsparcie dodatkowych platform!

Zmienne roli

Ta rola wspiera następujące zmienne, które są tutaj wymienione z ich domyślnymi wartościami z defaults/main.yml:

  • jenkins_release_line: 'weekly'
    • Ustawiając na long_term_support, rola zainstaluje wersje LTS Jenkins.
    • Ustawiając na weekly, rola zainstaluje tygodniowe wersje Jenkins.
  • jenkins_release_update: true
    • Jeśli true, pakiet Jenkins (YUM, APT, itp.) zostanie zaktualizowany do najnowszej wersji podczas uruchamiania tej roli.
  • jenkins_home: /var/lib/jenkins
    • Katalog, w którym będą przechowywane dane Jenkins.
    • Z powodu ograniczeń instalatora Jenkins, konto serwisowe jenkins będzie nadal korzystać z domyślnego katalogu jako katalogu domowego. To powinno dotyczyć tylko kluczy SSH.
  • jenkins_port: 8080
    • Port, na którym będzie działać Jenkins, do zapytań HTTP.
    • Na większości systemów, ta wartość musi być większa niż 1024, ponieważ Jenkins nie działa jako root.
  • jenkins_context_path: ''
    • Ścieżka kontekstu, pod którą będzie hostowany Jenkins, np. /foo w http://localhost:8080/foo. Pozostaw jako '', aby hostować na ścieżce głównej.
  • jenkins_url_external: ''
    • Zewnętrzny URL, z którego użytkownicy będą korzystać, aby uzyskać dostęp do Jenkins. Ustawiane w konfiguracji Jenkins i używane w emailach, webhookach itp.
    • Jeśli to pole zostanie pozostawione puste, konfiguracja nie zostanie ustawiona, a Jenkins spróbuje to automatycznie wykryć (co nie zadziała poprawnie, jeśli jest proxy).
  • jenkins_admin_username: (nieskonfigurowane)
    • Jeśli jedna z jenkins_admin_username i jenkins_admin_password jest zdefiniowana, to obie muszą być.
    • Nadpisz tę zmienną, aby określić dane administratora Jenkins, które będą używane dla każdego możliwego obszaru bezpieczeństwa.
    • Jeśli pozostawione nieskonfigurowane, rola spróbuje używać anonimowej autoryzacji.
    • Rola automatycznie wykryje, czy Jenkins jest skonfigurowany do zezwolenia na anonimową autoryzację (co ma miejsce zaraz po instalacji) i odpowiednio to obsłuży.
  • jenkins_admin_password: (nieskonfigurowane)
    • Jeśli jedna z jenkins_admin_username i jenkins_admin_password jest zdefiniowana, to obie muszą być.
    • Nadpisz tę zmienną, aby określić dane administratora Jenkins.
  • jenkins_session_timeout: 30
    • Liczba minut przed wygaśnięciem sesji Jenkins, tzn. jak długo loginy są ważne.
    • Domyślnie to 30 minut.
    • Może być ustawione na 0, aby nigdy nie wygasało.
  • jenkins_plugins_extra: []
    • Nadpisz tę zmienną, aby zainstalować dodatkowe wtyczki Jenkins.
    • Będą to dodatkowe wtyczki rekomendowane przez nowy kreator ustawień Jenkins 2, które są automatycznie instalowane przez tę rolę (patrz jenkins_plugins_recommended w defaults/main.yml).
  • jenkins_plugins_timeout: 60
  • jenkins_plugins_update: true
    • Jeśli true, wtyczki Jenkins będą aktualizowane podczas uruchamiania tej roli. (Należy pamiętać, że brakujące wtyczki zawsze będą instalowane.)
  • jenkins_java_args_extra: ''
    • Dodatkowe opcje, które będą dodane do JAVA_ARGS dla procesu Jenkins, takie jak ustawienia pamięci JVM, np. -Xmx4g.
  • jenkins_http_proxy_server, jenkins_http_proxy_port, jenkins_http_proxy_no_proxy_hosts: (wszystkie nieskonfigurowane)
    • Te serwery pełnią tę samą funkcję, co właściwości systemowe JVM http.proxyHost, http.proxyPort i http.nonProxyHosts, z wyjątkiem tego, że ustawienia będą używane zarówno dla zapytań HTTP, jak i HTTPS.
    • Konkretne ustawienia będą używane do skonfigurowania:
      • Właściwości systemowe JVM Jenkins http.proxyHost, http.proxyPort, https.proxyHost, https.proxyPort oraz http.nonProxyHosts, jak opisano w Java Networking and Proxies.
      • Ustawienia proxy specyficzne dla Jenkins (które niektóre wtyczki, takie jak GitHub plugin, wymagają), jak opisano w JenkinsBehindProxy.
      • Wartość jenkins_http_proxy_no_proxy_hosts powinna być listą, np. ['localhost', 'example.com'].

Zależności

Ta rola nie ma bezpośrednich zależności od innych ról Ansible. Wymaga jednak dostępności JRE Java w ścieżce systemu.

Przykładowy playbook

Rolę można zainstalować w następujący sposób:

$ ansible-galaxy install karlmdavis.jenkins2

Rolę można zastosować w następujący sposób:

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

Uruchamianie skryptów Groovy do konfiguracji Jenkins

Po zainstalowaniu Jenkins, skrypty Groovy mogą być uruchamiane za pomocą Ansible, aby dodatkowo dostosować Jenkins.

Na przykład, oto jak zainstalować Jenkins i następnie skonfigurować go do użycia HudsonPrivateSecurityRealm, dla lokalnych kont Jenkins:

- hosts: some_box
  tasks:

    - import_role:
        name: karlmdavis.ansible-jenkins2
      vars:
        # Nie będzie wymagane przy pierwszym uruchomieniu, ale będzie konieczne przy wcześniejszych uruchomieniach (po
        # włączeniu zabezpieczeń, jak poniżej).
        jenkins_admin_username: test
        jenkins_admin_password: supersecret

    # Upewnij się, że Jenkins został zrestartowany, jeśli to konieczne.
    - meta: flush_handlers

    # Skonfiguruj zabezpieczenia, aby użyć lokalnych kont Jenkins.
    - name: Skonfiguruj zabezpieczenia
      jenkins_script:
        url: "{{ jenkins_url_local }}"
        user: "{{ jenkins_dynamic_admin_username | default(omit) }}"
        password: "{{ jenkins_dynamic_admin_password | default(omit) }}"
        script: |
          // To są podstawowe importy, które interaktywna konsola skryptów Jenkin's automatycznie zawiera.
          import jenkins.*;
          import jenkins.model.*;
          import hudson.*;
          import hudson.model.*;

          // Konfiguruj królestwo zabezpieczeń, które obsługuje autoryzację.
          def securityRealm = new hudson.security.HudsonPrivateSecurityRealm(false)
          if(!securityRealm.equals(Jenkins.instance.getSecurityRealm())) {
            Jenkins.instance.setSecurityRealm(securityRealm)

            // Utwórz użytkownika, aby móc się zalogować. Upewnij się, że użytkownik jest powiązany z
            // kluczem SSH lokalnego użytkownika `jenkins`, aby upewnić się, że to
            // konto może być używane z interfejsem CLI Jenkins.
            def testUser = securityRealm.createAccount("test", "supersecret")
            testUser.addProperty(new hudson.tasks.Mailer.UserProperty("[email protected]"));
            testUser.save()

            Jenkins.instance.save()
            println "Zmieniono autoryzację."
          }

          // Skonfiguruj strategię autoryzacji, która określa, kto może co robić.
          def authorizationStrategy = new hudson.security.FullControlOnceLoggedInAuthorizationStrategy()
          if(!authorizationStrategy.equals(Jenkins.instance.getAuthorizationStrategy())) {
            authorizationStrategy.setAllowAnonymousRead(false)
            Jenkins.instance.setAuthorizationStrategy(authorizationStrategy)
            Jenkins.instance.save()
            println "Zmieniono autoryzację."
          }
      register: shell_jenkins_security
      changed_when: "(shell_jenkins_security | success) and 'Changed' not in shell_jenkins_security.stdout"

Alternatywnie, skrypty Groovy mogą być przechowywane jako osobne pliki i pobierane przy użyciu lookup(...), jak poniżej:

- hosts: some_box
  tasks:

    - import_role:
        name: karlmdavis.ansible-jenkins2
      vars:
        # Nie będzie wymagane przy pierwszym uruchomieniu, ale będzie konieczne przy wcześniejszych uruchomieniach (po
        # włączeniu zabezpieczeń, jak poniżej).
        jenkins_admin_username: test
        jenkins_admin_password: supersecret

    # Upewnij się, że Jenkins został zrestartowany, jeśli to konieczne.
    - meta: flush_handlers

    # Skonfiguruj zabezpieczenia, aby użyć lokalnych kont Jenkins.
    - name: Skonfiguruj zabezpieczenia
      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') }}"

Licencja

Ten projekt jest w ogólnoświatowej domenie publicznej. Zgodnie z zapisem w WNOSZENIE WNIOSKÓW:

Ten projekt jest w domenie publicznej w Stanach Zjednoczonych, a prawa autorskie i związane z nimi prawa w pracy na całym świecie zostały zrzeczone poprzez CC0 1.0 Uniwersalna deklaracja domeny publicznej.

Wszystkie wkłady do tego projektu będą publikowane w ramach dedykacji CC0. Składając wniosek o prace, zgadzasz się na przestrzeganie tej zrzeczenia się praw autorskich.

Informacje o autorze

Ten plugin został stworzony przez Karla M. Davisa (https://justdavis.com/karl/).

O projekcie

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

Zainstaluj
ansible-galaxy install karlmdavis.jenkins2
Licencja
other
Pobrania
888
Właściciel