savoirfairelinux.nexus3-oss

Ansible Rolle: Nexus 3 OSS

Diese Rolle installiert und konfiguriert den Nexus Repository Manager OSS der Version 3.x auf CentOS/RHEL.

Alle Konfigurationen können durch erneutes Ausführen der Rolle aktualisiert werden, mit Ausnahme der Einstellungen zu Blobstores, die in Nexus unveränderlich sind.

Anforderungen

  • Diese Rolle wurde nur auf CentOS 7 und Ubuntu 16.04 (Xenial) getestet.
  • Oracle Java 8 (notwendig)
  • Apache HTTPD (optional, wird für die Einrichtung eines SSL-Umkehrproxies verwendet)

(Siehe Abschnitt Abhängigkeiten unten für passende Rollen auf Galaxy)

Rollenvariablen

Ansible-Variablen mit den Standardwerten (siehe default/main.yml):

nexus_version: '3.1.0-04'
nexus_timezone: 'UTC'
nexus_package: "nexus-{{ nexus_version }}-unix.tar.gz"

Die Nexus-Version und das zu installierende Paket. Verfügbare Versionen finden Sie unter https://www.sonatype.com/download-oss-sonatype. nexus_timezone ist der Java-Zeitzonename und kann in Kombination mit den unten angegebenen nexus_scheduled_tasks-Cron-Ausdrücken nützlich sein.

nexus_download_dir: '/tmp'

Verzeichnis auf dem Zielserver, in das das Nexus-Paket heruntergeladen wird.

nexus_default_port: 8081
nexus_default_context_path: '/'

Port und Kontextpfad des Java Nexus-Prozesses. Der nexus_default_context_path muss den abschließenden Schrägstrich haben, wenn er gesetzt wird, z.B.: nexus_default_context_path: '/nexus/'.

nexus_os_group: 'nexus'
nexus_os_user: 'nexus'

Benutzer und Gruppe, die zum Besitz der Nexus-Dateien und zum Ausführen des Dienstes verwendet werden. Diese werden von der Rolle erstellt, wenn sie nicht vorhanden sind.

nexus_installation_dir: '/opt'
nexus_data_dir: '/var/nexus'
nexus_tmp_dir: '/tmp/nexus'

Nexus-Verzeichnisse. Das nexus_installation_dir enthält die installierten ausführbaren Dateien, nexus_data_dir enthält alle Konfigurationen, Repositories und hochgeladenen Artefakte. Hinweis: Benutzerdefinierte Blobstore-Pfade außerhalb von nexus_data_dir können konfiguriert werden, siehe nexus_blobstores unten.

nexus_admin_password: 'changeme'

Das Passwort für das 'admin'-Konto, das eingerichtet werden soll. Hinweis: Eine Änderung des Administratorkennworts nach der Erstinstallation ist von dieser Rolle noch nicht implementiert.

nexus_anonymous_access: false

Anonymen Zugriff auf Nexus erlauben.

public_hostname: 'nexus.vm'

Der vollständig qualifizierte Domainname, unter dem die Nexus-Instanz für ihre Clients zugänglich ist.

nexus_branding_header: ""
nexus_branding_footer: "Zuletzt bereitgestellt am {{ ansible_date_time.iso8601 }}"

Header und Footer Branding, diese können HTML enthalten.

httpd_setup_enable: false
httpd_ssl_certificate_file: 'files/nexus.vm.crt'
httpd_ssl_certificate_key_file: 'files/nexus.vm.key'

Ein SSL-Umkehrproxy einrichten. Dies erfordert die Installation von httpd. Hinweis: Wenn httpd_setup_enable auf true gesetzt ist, bindet Nexus an 127.0.0.1:8081 und ist somit nicht direkt über den HTTP-Port 8081 von einer externen IP aus zugänglich.

ldap_connections: []

LDAP-Verbindung(en) einrichten. Jeder Eintrag sieht wie folgt aus:

  - ldap_name: 'Mein Firmen-LDAP' # wird als Schlüssel verwendet, um die LDAP-Konfiguration zu aktualisieren
    ldap_protocol: 'ldaps' # ldap oder ldaps
    ldap_hostname: 'ldap.meinefirma.com'
    ldap_port: 636
    ldap_search_base: 'dc=meinefirma,dc=net'
    ldap_auth: 'none' # oder simple
    ldap_auth_username: 'benutzername' # falls auth = simple
    ldap_auth_password: 'passwort' # falls auth = simple
    ldap_user_base_dn: 'ou=benutzer'
    ldap_user_filter: '(cn=*)' # (optional)
    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=gruppen'
    ldap_group_object_class: 'posixGroup'
    ldap_group_id_attribute: 'cn'
    ldap_group_member_attribute: 'memberUid'
    ldap_group_member_format: '${benutzername}'
    ldap_group_subtree: false

Beispiel für eine LDAP-Konfiguration für anonyme Authentifizierung (anonyme Bindung), dies ist auch die „minimal“ Konfiguration:

  - ldap_name: 'Einfachste LDAP-Konfiguration'
    ldap_protocol: 'ldaps'
    ldap_hostname: 'annuaire.meinefirma.com'
    ldap_search_base: 'dc=meinefirma,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'

Beispiel für eine LDAP-Konfiguration für einfache Authentifizierung (mit einem DSA-Konto):

  - ldap_name: 'LDAP-Konfiguration mit DSA'
    ldap_protocol: 'ldaps'
    ldap_hostname: 'annuaire.meinefirma.com'
    ldap_port: 636
    ldap_auth: 'simple'
    ldap_auth_username: 'cn=mynexus,ou=dsa,dc=meinefirma,dc=net'
    ldap_auth_password: "{{ vault_ldap_dsa_password }}" # besser Passwörter in einem Ansible-Vault aufbewahren
    ldap_search_base: 'dc=meinefirma,dc=net'
    ldap_user_base_dn: 'ou=benutzer'
    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

Beispiel für eine LDAP-Konfiguration für einfache Authentifizierung (mit einem DSA-Konto) + Gruppen, die als Rollen zugeordnet sind:

  - ldap_name: 'LDAP-Konfiguration mit DSA'
    ldap_protocol: 'ldaps'
    ldap_hostname: 'annuaire.meinefirma.com'
    ldap_port: 636
    ldap_auth: 'simple'
    ldap_auth_username: 'cn=mynexus,ou=dsa,dc=meinefirma,dc=net'
    ldap_auth_password: "{{ vault_ldap_dsa_password }}" # besser Passwörter in einem Ansible-Vault aufbewahren
    ldap_search_base: 'dc=meinefirma,dc=net'
    ldap_user_base_dn: 'ou=benutzer'
    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=gruppen'
    ldap_group_object_class: 'groupOfNames'
    ldap_group_id_attribute: 'cn'
    ldap_group_member_attribute: 'member'
    ldap_group_member_format: 'uid=${benutzername},ou=benutzer,dc=meinefirma,dc=net'
    ldap_group_subtree: false
nexus_privileges:
  - name: all-repos-read # wird als Schlüssel verwendet, um eine Berechtigung zu aktualisieren
    description: 'Lese- und Durchsuchzugriff auf alle Repos'
    repository: '*'
    actions: # können add, browse, create, delete, edit, read oder * (alle) sein
      - read
      - browse

Liste der Berechtigungen, die eingerichtet werden sollen. Diese Elemente werden mit den folgenden Standardwerten kombiniert:

    _nexus_privilege_defaults:
      type: repository-view
      format: maven2
      actions:
        - read
    nexus_roles:
      - id: Entwickler # kann einer LDAP-Gruppen-ID zugeordnet werden, wird auch als Schlüssel verwendet, um eine Rolle zu aktualisieren
        name: entwickler
        description: Alle Entwickler
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # Verweise auf andere Rollennamen

Liste der Rollen, die eingerichtet werden sollen.

nexus_local_users: []

Lokale (nicht LDAP) Benutzer/Konten, die in Nexus erstellt werden sollen. Die Einträge sehen wie folgt aus:

  - username: jenkins # wird als Schlüssel verwendet, um zu aktualisieren
    first_name: Jenkins
    last_name: CI
    email: [email protected]
    password: "s3cr3t"
    roles:
      - entwickler # Rollen-ID
nexus_delete_default_repos: false

Löschen der Repositories aus der ursprünglichen Standardkonfiguration der Nexus-Installation. Dieser Schritt wird nur bei der Erstinstallation durchgeführt (wenn nexus_data_dir als leer erkannt wird).

nexus_delete_default_blobstore: false

Löschen des Standard-Blobstores aus der ursprünglichen Standardkonfiguration der Nexus-Installation. Dies kann nur erfolgen, wenn nexus_delete_default_repos: true und alle konfigurierten Repositories (siehe unten) einen expliziten blob_store: custom haben. Dieser Schritt wird nur bei der Erstinstallation durchgeführt (wenn nexus_data_dir als leer erkannt wird).

nexus_blobstores: []
# Beispiel für ein Blobstore-Element:
# - name: separate-storage
#   path: /mnt/custom/path

Blobstores zur Erstellung. Ein Blobstore-Pfad und ein Repository-Blobstore können nach der ursprünglichen Erstellung nicht mehr aktualisiert werden (jede Aktualisierung wird bei einer erneuten Bereitstellung ignoriert).

nexus_scheduled_tasks: []
# Beispielaufgabe, um Blobstore zu komprimieren:
# - name: compact-blobstore
#   cron: '0 0 22 * * ?'
#   typeId: blobstore.compact
#   taskProperties:
#     blobstoreName: 'default' # Alle Aufgabeneigenschaften werden intern von Nexus als Zeichenfolgen gespeichert

Geplante Aufgaben zur Einrichtung. typeId und aufgabenspezifische taskProperties können entweder aus der Java-Typ-Hierarchie von org.sonatype.nexus.scheduling.TaskDescriptorSupport geschätzt oder durch Einblick in die AJAX-Anfragen des Browsers während der manuellen Konfiguration einer Aufgabe ermittelt werden.

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/'
# Beispiel mit einem Login/Passwort:
# - name: secret-remote-repo
#   remote_url: 'https://firma.com/repo/secure/private/go/away'
#   remote_username: 'benutzername'
#   remote_password: 'geheim'

Maven Proxy-Repositories Konfiguration.

nexus_repos_maven_hosted:
  - name: private-release
    version_policy: release
    write_policy: allow_once

Maven gehostete Repositories Konfiguration.

nexus_repos_maven_group:
  - name: public
    member_repos:
      - central
      - jboss

Maven Gruppen-Repositories Konfiguration.

Alle drei Repository-Typen werden mit den folgenden Standardwerten kombiniert:

    _nexus_repos_maven_defaults:
      blob_store: default # Hinweis: kann nicht aktualisiert werden, sobald das Repo erstellt wurde
      strict_content_validation: true
      version_policy: release # release, snapshot oder mixed
      layout_policy: strict # strict oder permissive
      write_policy: allow_once # allow_once oder allow

Docker-, Pypi-, Raw-, Rubygems-, Bower-, NPM- und Git-LFS-Repositorytypen: siehe defaults/main.yml für diese Optionen:

  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

Diese sind standardmäßig alle auf false, es sei denn, Sie überschreiben sie im Playbook / group_var / cli; alle verwenden denselben Mechanismus wie Maven.

Abhängigkeiten

Diese Rolle erfordert Ansible 2.1 oder höher.

Die Java- und httpd-Anforderungen können mit den folgenden Galaxy-Rollen erfüllt werden:

Beispiel-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: 'Firmen-LDAP'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'ldap.firma.com'
        ldap_port: 636
        ldap_search_base: 'dc=firma,dc=net'
        ldap_user_base_dn: 'ou=benutzer'
        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=gruppen'
        ldap_group_object_class: 'posixGroup'
        ldap_group_id_attribute: 'cn'
        ldap_group_member_attribute: 'memberUid'
        ldap_group_member_format: '${benutzername}'
    nexus_privileges:
      - name: all-repos-read
        description: 'Lese- und Durchsuchzugriff auf alle Repos'
        repository: '*'
        actions:
          - read
          - browse
      - name: unternehmen-projekt-deploy
        description: 'Bereitstellungen für unternehmen-projekt'
        repository: unternehmen-projekt
        actions:
          - add
          - edit
    nexus_roles:
      - id: Entwickler # zugeordnet zur LDAP-Gruppe
        name: entwickler
        description: Alle Entwickler
        privileges:
          - nx-search-read
          - all-repos-read
          - unternehmen-projekt-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # wird als Schlüssel verwendet, um zu aktualisieren
        first_name: Jenkins
        last_name: CI
        email: [email protected]
        password: "s3cr3t"
        roles:
          - Entwickler # Rollen-ID hier
    nexus_blobstores:
      - name: unternehmens-artifacts
        path: /var/nexus/blobs/unternehmens-artifacts
    nexus_scheduled_tasks:
      - name: compact-blobstore
        cron: '0 0 22 * * ?'
        typeId: blobstore.compact
        taskProperties:
          blobstoreName: 'unternehmens-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: 'geheime-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: unternehmen-projekt
        version_policy: mixed
        write_policy: allow
        blob_store: unternehmens-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

Lizenz

GNU GPLv3

Autoreninformationen

Siehe https://github.com/savoirfairelinux/ansible-nexus3-oss

Über das Projekt

Nexus Repository Manager 3.x for RedHat/CentOS

Installieren
ansible-galaxy install savoirfairelinux.nexus3-oss
Lizenz
gpl-3.0
Downloads
24.2k
Besitzer
Savoir-faire Linux