savoirfairelinux.nexus3-oss
Rola Ansible: Nexus 3 OSS
Ta rola instaluje i konfiguruje Nexus Repository Manager OSS w wersji 3.x na CentOS/RHEL.
Wszystkie ustawienia konfiguracyjne można zmieniać poprzez wielokrotne uruchamianie roli, z wyjątkiem ustawień związanych z blobstores, które są niezmienne w Nexus.
Wymagania
- Testowano tylko na CentOS 7 i Ubuntu 16.04 (Xenial)
- Oracle Java 8 (wymagane)
- Apache HTTPD (opcjonalnie, używane do konfiguracji SSL reverse-proxy)
(zobacz sekcję Zależności poniżej, aby znaleźć pasujące role w galaxy)
Zmienne roli
Zmienne Ansible wraz z wartościami domyślnymi (zobacz default/main.yml
):
nexus_version: '3.1.0-04'
nexus_timezone: 'UTC'
nexus_package: "nexus-{{ nexus_version }}-unix.tar.gz"
Wersja Nexus oraz pakiet do zainstalowania, dostępne wersje można znaleźć pod adresem https://www.sonatype.com/download-oss-sonatype. nexus_timezone
to nazwa strefy czasowej Java, która może być użyteczna w połączeniu z wyrażeniami cron nexus_scheduled_tasks
.
nexus_download_dir: '/tmp'
Katalog docelowy, w którym pakiet Nexus zostanie pobrany.
nexus_default_port: 8081
nexus_default_context_path: '/'
Port i ścieżka kontekstowa procesu Java Nexus. nexus_default_context_path
musi zawierać końcowy slash, np.: nexus_default_context_path: '/nexus/'
.
nexus_os_group: 'nexus'
nexus_os_user: 'nexus'
Użytkownik i grupa, które będą właścicielami plików Nexus i uruchomią usługę; zostaną stworzeni przez rolę, jeśli nie istnieją.
nexus_installation_dir: '/opt'
nexus_data_dir: '/var/nexus'
nexus_tmp_dir: '/tmp/nexus'
Katalogi Nexus, nexus_installation_dir
zawiera zainstalowane pliki wykonywalne, nexus_data_dir
zawiera wszystkie konfiguracje, repozytoria i przesłane artefakty. Uwaga: niestandardowe ścieżki blobstores poza nexus_data_dir
można skonfigurować, zobacz nexus_blobstores
poniżej.
nexus_admin_password: 'changeme'
Hasło do konta 'admin'. Uwaga: zmiana hasła administratora po pierwszej instalacji jeszcze nie jest zaimplementowana w tej roli.
nexus_anonymous_access: false
Zezwól na anonimowy dostęp do Nexus.
public_hostname: 'nexus.vm'
W pełni kwalifikowana nazwa domeny, pod którą instancja Nexus będzie dostępna dla klientów.
nexus_branding_header: ""
nexus_branding_footer: "Ostatnie dostarczenie {{ ansible_date_time.iso8601 }}"
Nagłówki i stopki marki, mogą zawierać HTML.
httpd_setup_enable: false
httpd_ssl_certificate_file: 'files/nexus.vm.crt'
httpd_ssl_certificate_key_file: 'files/nexus.vm.key'
Skonfiguruj SSL Reverse-proxy; wymaga zainstalowanego httpd. Uwaga: gdy httpd_setup_enable
jest ustawione na true
, Nexus łączy się na 127.0.0.1:8081, więc nie jest bezpośrednio dostępny na porcie HTTP 8081 z zewnętrznego IP.
ldap_connections: []
Konfiguracja połączeń LDAP, każdy element wygląda następująco:
- ldap_name: 'My Company LDAP' # używane jako klucz do aktualizacji konfiguracji ldap
ldap_protocol: 'ldaps' # ldap lub ldaps
ldap_hostname: 'ldap.mycompany.com'
ldap_port: 636
ldap_search_base: 'dc=mycompany,dc=net'
ldap_auth: 'none' # lub simple
ldap_auth_username: 'username' # jeśli auth = simple
ldap_auth_password: 'password' # jeśli auth = simple
ldap_user_base_dn: 'ou=users'
ldap_user_filter: '(cn=*)' # (opcjonalnie)
ldap_user_object_class: 'inetOrgPerson'
ldap_user_id_attribute: 'uid'
ldap_user_real_name_attribute: 'cn'
ldap_user_email_attribute: 'mail'
ldap_user_subtree: false
ldap_map_groups_as_roles: false
ldap_group_base_dn: 'ou=groups'
ldap_group_object_class: 'posixGroup'
ldap_group_id_attribute: 'cn'
ldap_group_member_attribute: 'memberUid'
ldap_group_member_format: '${username}'
ldap_group_subtree: false
Przykład konfiguracji LDAP dla anonimowej autoryzacji (anonimowe połączenie), jest to także najwyższa minimalna konfiguracja:
- ldap_name: 'Najprostsza konfiguracja LDAP'
ldap_protocol: 'ldaps'
ldap_hostname: 'annuaire.mycompany.com'
ldap_search_base: 'dc=mycompany,dc=net'
ldap_port: 636
ldap_user_id_attribute: 'uid'
ldap_user_real_name_attribute: 'cn'
ldap_user_email_attribute: 'mail'
ldap_user_object_class: 'inetOrgPerson'
Przykład konfiguracji LDAP dla prostej autoryzacji (używając konta DSA):
- ldap_name: 'Konfiguracja LDAP z DSA'
ldap_protocol: 'ldaps'
ldap_hostname: 'annuaire.mycompany.com'
ldap_port: 636
ldap_auth: 'simple'
ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
ldap_auth_password: "{{ vault_ldap_dsa_password }}" # lepiej przechowywać hasła w skarbczyku Ansible
ldap_search_base: 'dc=mycompany,dc=net'
ldap_user_base_dn: 'ou=users'
ldap_user_object_class: 'inetOrgPerson'
ldap_user_id_attribute: 'uid'
ldap_user_real_name_attribute: 'cn'
ldap_user_email_attribute: 'mail'
ldap_user_subtree: false
Przykład konfiguracji LDAP dla prostej autoryzacji (używając konta DSA) + mapowanie grup jako role:
- ldap_name: 'Konfiguracja LDAP z DSA'
ldap_protocol: 'ldaps'
ldap_hostname: 'annuaire.mycompany.com'
ldap_port: 636
ldap_auth: 'simple'
ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
ldap_auth_password: "{{ vault_ldap_dsa_password }}" # lepiej przechowywać hasła w skarbczyku Ansible
ldap_search_base: 'dc=mycompany,dc=net'
ldap_user_base_dn: 'ou=users'
ldap_user_object_class: 'inetOrgPerson'
ldap_user_id_attribute: 'uid'
ldap_user_real_name_attribute: 'cn'
ldap_user_email_attribute: 'mail'
ldap_map_groups_as_roles: true
ldap_group_base_dn: 'ou=groups'
ldap_group_object_class: 'groupOfNames'
ldap_group_id_attribute: 'cn'
ldap_group_member_attribute: 'member'
ldap_group_member_format: 'uid=${username},ou=users,dc=mycompany,dc=net'
ldap_group_subtree: false
nexus_privileges:
- name: all-repos-read # używane jako klucz do aktualizacji uprawnienia
description: 'Dostęp do odczytu i przeglądania wszystkich repozytoriów'
repository: '*'
actions: # można dodać, przeglądać, tworzyć, usuwać, edytować, odczytywać lub * (wszystkie)
- read
- browse
Lista uprawnień do skonfigurowania. Te elementy są łączone z następującymi wartościami domyślnymi:
_nexus_privilege_defaults:
type: repository-view
format: maven2
actions:
- read
nexus_roles:
- id: Developpers # może być mapowane do identyfikatora grupy LDAP, także używane jako klucz do aktualizacji roli
name: developers
description: Wszyscy programiści
privileges:
- nx-search-read
- all-repos-read
roles: [] # referencje do innych nazw ról
Lista ról do skonfigurowania.
nexus_local_users: []
Lokalni (nie-ldap) użytkownicy/konta do utworzenia w Nexus, elementy wyglądają następująco:
- username: jenkins # używane jako klucz do aktualizacji
first_name: Jenkins
last_name: CI
email: [email protected]
password: "s3cr3t"
roles:
- developers # identyfikator roli
nexus_delete_default_repos: false
Usuwa repozytoria z początkowej domyślnej konfiguracji instalacji Nexus. Ten krok jest wykonywany tylko przy pierwszej instalacji (gdy nexus_data_dir
zostało wykryte jako puste).
nexus_delete_default_blobstore: false
Usuwa domyślny blobstore z początkowej domyślnej konfiguracji instalacji Nexus. Może to być zrobione tylko wtedy, gdy nexus_delete_default_repos: true
i wszystkie skonfigurowane repozytoria (zobacz poniżej) mają explicite ustawione blob_store: custom
. Ten krok jest wykonywany tylko przy pierwszej instalacji (gdy nexus_data_dir
zostało wykryte jako puste).
nexus_blobstores: []
# przykład elementu blobstore :
# - name: separate-storage
# path: /mnt/custom/path
Blobstores do utworzenia. Ścieżka blobstore i repozytorium blobstore nie mogą być aktualizowane po początkowym utworzeniu (wszelkie aktualizacje tutaj będą ignorowane przy ponownym wdrożeniu).
nexus_scheduled_tasks: []
# przykładowe zadanie do kompresji blobstore :
# - name: compact-blobstore
# cron: '0 0 22 * * ?'
# typeId: blobstore.compact
# taskProperties:
# blobstoreName: 'default' # wszystkie atrybuty zadań są przechowywane jako ciągi przez nexus wewnętrznie
Zadania zaplanowane do skonfigurowania. typeId
oraz specyficzne dla zadania taskProperties
można odgadnąć z hierarchii typów Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
lub z obserwowania żądań AJAX przeglądarki podczas ręcznej konfiguracji zadania.
nexus_repos_maven_proxy:
- name: central
remote_url: 'https://repo1.maven.org/maven2/'
layout_policy: permissive
- name: jboss
remote_url: 'https://repository.jboss.org/nexus/content/groups/public-jboss/'
# przykład z loginem/hasłem :
# - name: secret-remote-repo
# remote_url: 'https://company.com/repo/secure/private/go/away'
# remote_username: 'username'
# remote_password: 'secret'
Konfiguracja repozytoriów proxy Maven.
nexus_repos_maven_hosted:
- name: private-release
version_policy: release
write_policy: allow_once
Konfiguracja repozytoriów hostowanych Maven.
nexus_repos_maven_group:
- name: public
member_repos:
- central
- jboss
Konfiguracja grup repozytoriów Maven group repositories.
Wszystkie trzy typy repozytoriów są łączone z następującymi wartościami domyślnymi:
_nexus_repos_maven_defaults:
blob_store: default # Uwaga: nie można aktualizować po utworzeniu repozytorium
strict_content_validation: true
version_policy: release # release, snapshot lub mixed
layout_policy: strict # strict lub permissive
write_policy: allow_once # allow_once lub allow
Typy repozytoriów Docker, Pypi, Raw, Rubygems, Bower, NPM i Git-LFS:
zobacz defaults/main.yml
dla tych opcji:
nexus_config_pypi: false
nexus_config_docker: false
nexus_config_raw: false
nexus_config_rubygems: false
nexus_config_bower: false
nexus_config_npm: false
nexus_config_gitlfs: false
Wszystkie są domyślnie ustawione na false, chyba że je nadpiszesz w playbooku / group_var / cli; wszystkie wykorzystują ten sam mechanizm co Maven.
Zależności
Ta rola wymaga Ansible 2.1 lub nowszego.
Wymagania dotyczące Javy i httpd /mogą/ być spełnione przy użyciu następujących ról galaxy:
Przykładowy Playbook
---
- name: Nexus
hosts: nexus
become: yes
vars:
nexus_version: '3.1.0-04'
nexus_timezone: 'Canada/Eastern'
nexus_admin_password: "{{ vault_nexus_admin_password }}"
httpd_server_name: 'nexus.vm'
httpd_setup_enable: true
httpd_ssl_certificate_file: "{{ vault_httpd_ssl_certificate_file }}"
httpd_ssl_certificate_key_file: "{{ vault_httpd_ssl_certificate_key_file }}"
ldap_connections:
- ldap_name: 'Company LDAP'
ldap_protocol: 'ldaps'
ldap_hostname: 'ldap.company.com'
ldap_port: 636
ldap_search_base: 'dc=company,dc=net'
ldap_user_base_dn: 'ou=users'
ldap_user_object_class: 'inetOrgPerson'
ldap_user_id_attribute: 'uid'
ldap_user_real_name_attribute: 'cn'
ldap_user_email_attribute: 'mail'
ldap_group_base_dn: 'ou=groups'
ldap_group_object_class: 'posixGroup'
ldap_group_id_attribute: 'cn'
ldap_group_member_attribute: 'memberUid'
ldap_group_member_format: '${username}'
nexus_privileges:
- name: all-repos-read
description: 'Dostęp do odczytu i przeglądania wszystkich repozytoriów'
repository: '*'
actions:
- read
- browse
- name: company-project-deploy
description: 'Wdrażanie do projektu firmy'
repository: company-project
actions:
- add
- edit
nexus_roles:
- id: Developpers # mapuje się na grupę LDAP
name: developers
description: Wszyscy programiści
privileges:
- nx-search-read
- all-repos-read
- company-project-deploy
roles: []
nexus_local_users:
- username: jenkins # używane jako klucz do aktualizacji
first_name: Jenkins
last_name: CI
email: [email protected]
password: "s3cr3t"
roles:
- Developpers # identyfikator roli tutaj
nexus_blobstores:
- name: company-artifacts
path: /var/nexus/blobs/company-artifacts
nexus_scheduled_tasks:
- name: compact-blobstore
cron: '0 0 22 * * ?'
typeId: blobstore.compact
taskProperties:
blobstoreName: 'company-artifacts'
nexus_repos_maven_proxy:
- name: central
remote_url: 'https://repo1.maven.org/maven2/'
layout_policy: permissive
- name: alfresco
remote_url: 'https://artifacts.alfresco.com/nexus/content/groups/private/'
remote_username: 'secret-username'
remote_password: "{{ vault_alfresco_private_password }}"
- name: jboss
remote_url: 'https://repository.jboss.org/nexus/content/groups/public-jboss/'
- name: vaadin-addons
remote_url: 'https://maven.vaadin.com/vaadin-addons/'
- name: jaspersoft
remote_url: 'https://jaspersoft.artifactoryonline.com/jaspersoft/jaspersoft-repo/'
version_policy: mixed
nexus_repos_maven_hosted:
- name: company-project
version_policy: mixed
write_policy: allow
blob_store: company-artifacts
nexus_repos_maven_group:
- name: public
member_repos:
- central
- jboss
- vaadin-addons
- jaspersoft
roles:
- role: ansiblebit.oracle-java
oracle_java_set_as_default: yes
- role: geerlingguy.apache
apache_create_vhosts: no
- role: savoirfairelinux.nexus3-oss
Licencja
GNU GPLv3
Informacje o autorze
Zobacz https://github.com/savoirfairelinux/ansible-nexus3-oss
ansible-galaxy install savoirfairelinux.nexus3-oss