karlmdavis.jenkins2
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.
- Ustawiając na
jenkins_release_update
:true
- Jeśli
true
, pakiet Jenkins (YUM, APT, itp.) zostanie zaktualizowany do najnowszej wersji podczas uruchamiania tej roli.
- Jeśli
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
whttp://localhost:8080/foo
. Pozostaw jako''
, aby hostować na ścieżce głównej.
- Ścieżka kontekstu, pod którą będzie hostowany Jenkins, np.
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
ijenkins_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.
- Jeśli jedna z
jenkins_admin_password
: (nieskonfigurowane)- Jeśli jedna z
jenkins_admin_username
ijenkins_admin_password
jest zdefiniowana, to obie muszą być. - Nadpisz tę zmienną, aby określić dane administratora Jenkins.
- Jeśli jedna z
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
- Czas (w sekundach), po którym instalacja/aktualizacja wtyczki się nie powiedzie. Ta wartość jest przekazywana do parametru timeout w module
jenkins_plugin
. (Szczegóły tutaj: http://docs.ansible.com/ansible/latest/jenkins_plugin_module.html#options.)
- Czas (w sekundach), po którym instalacja/aktualizacja wtyczki się nie powiedzie. Ta wartość jest przekazywana do parametru timeout w module
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.)
- Jeśli
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
.
- Dodatkowe opcje, które będą dodane do
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
ihttp.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
orazhttp.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']
.
- Właściwości systemowe JVM Jenkins
- Te serwery pełnią tę samą funkcję, co właściwości systemowe JVM
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/).
ansible-galaxy install karlmdavis.jenkins2