Installation und Konfiguration von Nexus Sonatype unter Verwendung des Ansatzes Infrastructure as Code

Sonatype Nexus – eine integrierte Plattform, mit der Entwickler Java-Abhängigkeiten (Maven), Docker-Images, Python, Ruby, NPM, Bower, RPM-Pakete, gitlfs, Apt, Go, Nuget proxy, speichern und verwalten sowie ihre Software verteilen können.

Warum ist Sonatype Nexus notwendig?

  • Zum Speichern privater Artefakte;
  • Zum Cachen von Artefakten, die aus dem Internet heruntergeladen werden;

Artefakte, die in der Basisversion von Sonatype Nexus unterstützt werden:

  • Java, Maven (jar)
  • Docker
  • Python (pip)
  • Ruby (gem)
  • NPM
  • Bower
  • Yum (rpm)
  • gitlfs
  • Raw
  • Apt (deb)
  • Go
  • Nuget

Von der Gemeinschaft unterstützte Artefakte:

  • Composer
  • Conan
  • CPAN
  • ELPA
  • Helm
  • P2
  • R

Installation von Sonatype Nexus unter Verwendung von https://github.com/ansible-ThoTeam/nexus3-oss

Anforderungen

  • Lesen Sie online über die Verwendung von Ansible.
  • Installieren Sie Ansible pip install ansible auf der Arbeitsstation, auf der das Playbook ausgeführt wird.
  • Installieren Sie geerlingguy.java auf der Arbeitsstation, auf der das Playbook ausgeführt wird.
  • Installieren Sie geerlingguy.apache auf der Arbeitsstation, auf der das Playbook ausgeführt wird.
  • Dieses Rollenspiel wurde auf CentOS 7, Ubuntu Xenial (16.04) und Bionic (18.04), Debian Jessie und Stretch getestet.
  • jmespath Die Bibliothek muss auf der Arbeitsstation installiert werden, auf der das Playbook ausgeführt wird. Um sie zu installieren, führen Sie aus sudo pip install -r requirements.txt
  • Speichern Sie die Datei Playbook (Beispiel unten) in der Datei nexus.yml
  • Starten Sie die Installation von Nexus ansible-playbook -i host nexus.yml

Beispiel eines Ansible-Playbooks zur Installation von Nexus ohne LDAP mit Maven (Java), Docker, Python, Ruby, NPM, Bower, RPM und gitlfs-Repositories.

---
- name: Nexus
  hosts: nexus
  become: yes

  vars:
    nexus_timezone: 'Asien/Omsk'
    nexus_admin_password: "admin123"
    nexus_public_hostname: 'apatsev-nexus-playbook'
    httpd_setup_enable: false
    nexus_privileges:
      - name: all-repos-read
        description: 'Lese- & Durchsuchen-Zugriff auf alle Repos'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Deployments für company-project'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # entspricht der LDAP-Gruppe
        name: developers
        description: Alle Entwickler
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # wird als Schlüssel zum Aktualisieren verwendet
        first_name: Jenkins
        last_name: CI
        email: support@company.com
        password: "s3cr3t"
        roles:
          - Developpers # Rollen-ID hier
    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: 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

    # Yum. Ändern Sie nexus_config_yum auf true, um ein Yum-Repository zu erstellen
    nexus_config_yum: true
    nexus_repos_yum_hosted:
      - name: private_yum_centos_7
        repodata_depth: 1
    nexus_repos_yum_proxy:
      - name: epel_centos_7_x86_64
        remote_url: http://download.fedoraproject.org/pub/epel/7/x86_64
        maximum_component_age: -1
        maximum_metadata_age: -1
        negative_cache_ttl: 60
      - name: centos-7-os-x86_64
        remote_url: http://mirror.centos.org/centos/7/os/x86_64/
        maximum_component_age: -1
        maximum_metadata_age: -1
        negative_cache_ttl: 60
    nexus_repos_yum_group:
      - name: yum_all
        member_repos:
          - private_yum_centos_7
          - epel_centos_7_x86_64

    # NPM. Ändern Sie nexus_config_npm auf true, um ein NPM-Repository zu erstellen
    nexus_config_npm: true
    nexus_repos_npm_hosted: []
    nexus_repos_npm_group:
      - name: npm-public
        member_repos:
          - npm-registry
    nexus_repos_npm_proxy:
      - name: npm-registry
        remote_url: https://registry.npmjs.org/
        negative_cache_enabled: false

    # Docker. Ändern Sie nexus_config_docker auf true, um ein Docker-Repository zu erstellen
    nexus_config_docker: true
    nexus_repos_docker_hosted:
      - name: docker-hosted
        http_port: "{{ nexus_docker_hosted_port }}"
        v1_enabled: True
    nexus_repos_docker_proxy:
      - name: docker-proxy
        http_port: "{{ nexus_docker_proxy_port }}"
        v1_enabled: True
        index_type: "HUB"
        remote_url: "https://registry-1.docker.io"
        use_nexus_certificates_to_access_index: false
        maximum_component_age: 1440
        maximum_metadata_age: 1440
        negative_cache_enabled: true
        negative_cache_ttl: 1440
    nexus_repos_docker_group:
      - name: docker-group
        http_port: "{{ nexus_docker_group_port }}"
        v1_enabled: True
        member_repos:
          - docker-hosted
          - docker-proxy

    # Bower. Ändern Sie nexus_config_bower auf true, um ein Bower-Repository zu erstellen
    nexus_config_bower: true
    nexus_repos_bower_hosted:
      - name: bower-hosted
    nexus_repos_bower_proxy:
      - name: bower-proxy
        index_type: "proxy"
        remote_url: "https://registry.bower.io"
        use_nexus_certificates_to_access_index: false
        maximum_component_age: 1440
        maximum_metadata_age: 1440
        negative_cache_enabled: true
        negative_cache_ttl: 1440
    nexus_repos_bower_group:
      - name: bower-group
        member_repos:
          - bower-hosted
          - bower-proxy

    # Pypi. Ändern Sie nexus_config_pypi auf true, um ein Pypi-Repository zu erstellen
    nexus_config_pypi: true
    nexus_repos_pypi_hosted:
      - name: pypi-hosted
    nexus_repos_pypi_proxy:
      - name: pypi-proxy
        index_type: "proxy"
        remote_url: "https://pypi.org/"
        use_nexus_certificates_to_access_index: false
        maximum_component_age: 1440
        maximum_metadata_age: 1440
        negative_cache_enabled: true
        negative_cache_ttl: 1440
    nexus_repos_pypi_group:
      - name: pypi-group
        member_repos:
          - pypi-hosted
          - pypi-proxy

    # rubygems. Ändern Sie nexus_config_rubygems auf true, um ein Rubygems-Repository zu erstellen
    nexus_config_rubygems: true
    nexus_repos_rubygems_hosted:
      - name: rubygems-hosted
    nexus_repos_rubygems_proxy:
      - name: rubygems-proxy
        index_type: "proxy"
        remote_url: "https://rubygems.org"
        use_nexus_certificates_to_access_index: false
        maximum_component_age: 1440
        maximum_metadata_age: 1440
        negative_cache_enabled: true
        negative_cache_ttl: 1440
    nexus_repos_rubygems_group:
      - name: rubygems-group
        member_repos:
          - rubygems-hosted
          - rubygems-proxy

    # gitlfs. Ändern Sie nexus_config_gitlfs auf true, um ein GitLFS-Repository zu erstellen
    nexus_config_gitlfs: true
    nexus_repos_gitlfs_hosted:
      - name: gitlfs-hosted

  roles:
    - { role: geerlingguy.java }
    # Debian/Ubuntu nur
    # - { role: geerlingguy.apache, apache_create_vhosts: no, apache_mods_enabled: ["proxy_http.load", "headers.load"], apache_remove_default_vhost: true, tags: ["geerlingguy.apache"] }
    # RedHat/CentOS nur
    - { role: geerlingguy.apache, apache_create_vhosts: no, apache_remove_default_vhost: true, tags: ["geerlingguy.apache"] }
    - { role: ansible-thoteam.nexus3-oss, tags: ['ansible-thoteam.nexus3-oss'] }

Screenshots:

Installation und Konfiguration von Nexus Sonatype unter Verwendung des Ansatzes Infrastructure as Code

Installation und Konfiguration von Nexus Sonatype unter Verwendung des Ansatzes Infrastructure as Code

Rollenvariablen

Rollenvariablen

Standardwerte für Variablen (siehe default/main.yml):

Allgemeine Variablen

    nexus_version: ''
    nexus_timezone: 'UTC'

Standardmäßig installiert die Rolle die neueste verfügbare Version von Nexus. Sie können die Version anpassen, indem Sie die Variable nexus_versionändern. Verfügbare Versionen finden Sie unter https://www.sonatype.com/download-oss-sonatype.

Wenn Sie die Version auf eine neuere ändern, wird die Rolle versuchen, Ihr installiertes Nexus zu aktualisieren.

Wenn Sie eine ältere Version von Nexus als die neueste verwenden, müssen Sie sicherstellen, dass Sie keine Funktionen verwenden, die in der installierten Version nicht verfügbar sind (z. B. das Hosting von Yum-Repos ist für Nexus größer als 3.8.0 verfügbar, Git LFS Repo für Nexus größer als 3.3.0 usw.)

nexus timezone ist der Name der Zeitzone von Java, die in Verbindung mit den unten aufgeführten Cron-Ausdrücken für nexus_scheduled tasks nützlich sein kann.

Nexus-Poort und Kontextpfad

    nexus_default_port: 8081
    nexus_default_context_path: '‌/'

Port und Kontextpfad des Java-Verbindungsprozesses. nexus_default_context_path muss einen Schrägstrich enthalten, wenn er gesetzt wird, z. B.: nexus_default_context_path: '‌/nexus/'.

Nexus OS-Benutzer und -Gruppe

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Der Benutzer und die Gruppe, die zum Besitzen von Nexus-Dateien und zum Ausführen des Dienstes verwendet werden, werden von der Rolle erstellt, wenn sie nicht existieren.

    nexus_os_user_home_dir: '‌/home/nexus'

Erlauben Sie das Ändern des Standard-Heimverzeichnisses für den Benutzer nexus

Instanzverzeichnisse von Nexus

    nexus_installation_dir: '‌/opt'
    nexus_data_dir: '‌/var/nexus'
    nexus_tmp_dir: "{{ (ansible_os_family == 'RedHat') | ternary('‌/var/nexus-tmp', '‌/tmp/nexus') }}"

Nexus-Verzeichnisse.

  • nexus_installation_dir enthält installierte ausführbare Dateien
  • nexus_data_dir enthält alle Konfigurationen, Repositories und hochgeladenen Artefakte. Benutzerdefinierte Blobstore-Pfade nexus_data_dir können unten konfiguriert werden nexus_blobstores.
  • nexus_tmp_dir enthält alle temporären Dateien. Der Standardpfad für RedHat wurde geändert, um /tmp potentielle Probleme mit automatischen Aufräumverfahren zu vermeiden. Siehe #168.

Einstellung der Speichernutzung von Nexus JVM

    nexus_min_heap_size: "1200M"
    nexus_max_heap_size: "{{ nexus_min_heap_size }}"
    nexus_max_direct_memory: "2G"

Dies sind die Standardkonfigurationen für Nexus. Bitte ändern Sie diese Werte nicht Wenn Sie nicht gelesen haben den Abschnitt zu den Speicheranforderungen von Nexus und nicht verstehen, was sie bewirken.

Als zweite Warnung hier ein Auszug aus dem genannten Dokument:

Es wird nicht empfohlen, den JVM-Heap-Speicher über die empfohlenen Werte hinaus zu erhöhen, um die Leistung zu steigern. Dies kann tatsächlich den gegenteiligen Effekt haben und zu unnötiger Last auf dem Betriebssystem führen.

Administratorkennwort

    nexus_admin_password: 'changeme'

Das Kennwort für das 'admin'-Konto zur Konfiguration. Dies funktioniert nur bei der Standardinstallation beim ersten Mal. Bitte siehe [Ändern Sie das Administratorkennwort nach der ersten Installation](# change-admin-password-after-first-install), wenn Sie es später mit einer Rolle ändern möchten.

Es wird dringend davon abgeraten, Ihr Passwort im Klartext in einem Playbook zu speichern und [Ansible-Vault-Verschlüsselung] zu verwenden (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (entweder eingebaut oder in einer separaten Datei, die z.B. mit include_vars geladen wird)

Anonymer Zugriff standardmäßig

    nexus_anonymous_access: false

Anonymer Zugriff standardmäßig ist deaktiviert. Weitere Informationen zu anonymem Zugriff.

Öffentlicher Hostname

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Der vollständige Domainname und das Schema (https oder http), über das die Nexus-Instanz für ihre Kunden verfügbar sein wird.

API-Zugriff für diese Rolle

    nexus_api_hostname: localhost
    nexus_api_scheme: http
    nexus_api_validate_certs: "{{ nexus_api_scheme == 'https' }}"
    nexus_api_context_path: "{{ nexus_default_context_path }}"
    nexus_api_port: "{{ nexus_default_port }}"

Diese Variablen steuern, wie die Rolle auf die Nexus-API zugreift, um Bereitstellungen vorzunehmen.
Nur für fortgeschrittene Benutzer. Wahrscheinlich möchten Sie diese Standardeinstellungen nicht ändern

Einstellung eines Reverse-Proxys

    httpd_setup_enable: false
    httpd_server_name: "{{ nexus_public_hostname }}"
    httpd_default_admin_email: "admin@example.com"
    httpd_ssl_certificate_file: 'files/nexus.vm.crt'
    httpd_ssl_certificate_key_file: 'files/nexus.vm.key'
    # httpd_ssl_certificate_chain_file: "{{ httpd_ssl_certificate_file }}"
    httpd_copy_ssl_files: true

Installieren Sie SSL-Reverse-Proxy.
Dafür muss httpd installiert werden. Hinweis: Wenn für httpd_setup_enable der Wert gesetzt isttrue, verbindet sich nexus mit 127.0.0.1:8081, sodass nicht über den HTTP-Port 8081 direkt von einer externen IP erreichbar ist.

Der standardmäßige Hostname ist nexus_public_hostname. Wenn Sie aus irgendeinem Grund unterschiedliche Namen benötigen, können Sie httpd_server_name mit einem anderen Wert festlegen.

C httpd_copy_ssl_files: true (Standardmäßig) sollten die oben genannten Zertifikate in Ihrem Playbook-Verzeichnis vorhanden sein und auf den Server kopiert und in Apache konfiguriert werden.

Wenn Sie vorhandene Zertifikate auf dem Server verwenden möchten, setzen Sie httpd_copy_ssl_files: false und stellen Sie die folgenden Variablen bereit:

    # These specifies to the vhost where to find on the remote server file
    # system the certificate files.
    httpd_ssl_cert_file_location: "/etc/pki/tls/certs/wildcard.vm.crt"
    httpd_ssl_cert_key_location: "/etc/pki/tls/private/wildcard.vm.key"
    # httpd_ssl_cert_chain_file_location: "{{ httpd_ssl_cert_file_location }}"

httpd_ssl_cert_chain_file_location ist optional und sollte unkonfiguriert bleiben, wenn Sie die Kette nicht einrichten möchten

    httpd_default_admin_email: "admin@example.com"

Standardmäßige E-Mail-Adresse des Administrators festlegen

LDAP-Konfiguration

LDAP-Verbindungen und der Sicherheitsbereich sind standardmäßig deaktiviert

    nexus_ldap_realm: false
    ldap_connections: []

LDAP-Verbindungen, jedes Element sieht folgendermaßen aus:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Mein Unternehmens-LDAP' # wird als Schlüssel zum Aktualisieren der LDAP-Konfiguration verwendet
        ldap_protocol: 'ldaps' # ldap oder ldaps
        ldap_hostname: 'ldap.meinunternehmen.com'
        ldap_port: 636
        ldap_use_trust_store: false # Ob Zertifikate im Nexus-Vertrauensspeicher verwendet werden sollen oder nicht
        ldap_search_base: 'dc=meinunternehmen,dc=net'
        ldap_auth: 'none' # oder simple
        ldap_auth_username: 'benutzername' # wenn auth = simple
        ldap_auth_password: 'passwort' # wenn 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 zur anonymen Authentifizierung (anonyme Bindung), dies ist auch eine „minimale“ Konfiguration:

    nexus_ldap_realm: true
    ldap_connection:
      - ldap_name: 'Einfachste LDAP-Konfiguration'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.meinunternehmen.com'
        ldap_search_base: 'dc=meinunternehmen,dc=net'
        ldap_port: 636
        ldap_use_trust_store: false
        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 zur einfachen Authentifizierung (unter Verwendung eines DSA-Kontos):

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP-Konfiguration mit DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.meinunternehmen.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=meinunternehmen,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # besser Passwörter in einem Ansible-Vault aufbewahren
        ldap_search_base: 'dc=meinunternehmen,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 zur einfachen Authentifizierung (unter Verwendung eines DSA-Kontos) + Gruppen, die als Rollen gemappt sind:

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

Beispielkonfiguration für LDAP zur einfachen Authentifizierung (unter Verwendung des DSA-Kontos) + Gruppen, die dynamisch als Rollen zugeordnet sind:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP-Konfiguration mit DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'einfach'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # besser Passwörter in einem Ansible-Vault aufbewahren
        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_map_groups_as_roles_type: 'dynamisch'
        ldap_user_memberof_attribute: 'memberOf'

Berechtigungen

    nexus_privileges:
      - name: all-repos-read # als Schlüssel zur Aktualisierung einer Berechtigung verwendet
        # type: 
        description: 'Lese- & Durchsuchzugriff auf alle Repos'
        repository: '*'
        actions: # kann sein: add, browse, create, delete, edit, read oder * (alle)
          - read
          - browse
        # pattern: Muster
        # domain: Domäne
        # script_name: Name

Eine Liste Berechtigungen zur Konfiguration. Siehe Dokumentation und grafische Oberfläche, um zu überprüfen, welche Variablen je nach Berechtigungstyp gesetzt werden müssen.

Diese Elemente sind mit den folgenden Standardwerten kombiniert:

    _nexus_privilege_defaults:
      type: repository-view
      format: maven2
      actions:
        - read

Rollen (innerhalb von Nexus)

    nexus_roles:
      - id: Developpers # kann einer LDAP-Gruppennummer zugeordnet werden, auch als Schlüssel zur Aktualisierung einer Rolle verwendet
        name: developers
        description: Alle Entwickler
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # Verweise auf andere Rollennamen

Eine Liste Rollen zur Konfiguration.

Benutzer

    nexus_local_users: []
      # - username: jenkins # als Schlüssel zur Aktualisierung verwendet
      #   state: present # Standardwert, falls weggelassen, verwenden Sie 'absent', um den Benutzer zu entfernen
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - developers # Rollen-ID

Liste lokaler (nicht-LDAP) Benutzer/Konten, die in Nexus erstellt werden sollen.

Liste lokaler (nicht LDAP) Benutzer/Konten zur Erstellung in Nexus.

      nexus_ldap_users: []
      # - Benutzername: j.doe
      #   Zustand: vorhanden
      #   Rollen:
      #     - "nx-admin"

Mapping von LDAP-Benutzern/Rollen. Zustand absent entfernt Rollen von einem vorhandenen Benutzer, sofern dieser bereits existiert.
LDAP-Benutzer werden nicht gelöscht. Der Versuch, eine Rolle für einen nicht existierenden Benutzer festzulegen, führt zu einem Fehler.

Inhaltselektionen

  nexus_content_selectors:
  - Name: docker-login
    Beschreibung: Selektor für Docker-Anmeldeberechtigung
    Suchausdruck: format=="docker" und path=~"/v2/"

Für weitere Informationen zum Inhaltselektor siehe. Dokumentation.

Um den Inhaltselektor zu verwenden, fügen Sie eine neue Berechtigung mit type: repository-content-selector und dem entsprechendencontentSelector

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Anmeldung beim Docker-Registry'
  repository: '*'
  actions:
  - read
  - browse

Blobstores und Repositories

    nexus_delete_default_repos: false

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

Entfernen von Repositories aus der ursprünglichen Standardkonfiguration für Nexus. Dieser Schritt wird nur bei der Erstinstallation ausgeführt (wenn nexus_data_dir leer ist).

    nexus_delete_default_blobstore: false

Löschen Sie den Standard-Blobstore aus der ursprünglichen Standardkonfiguration der Nexus-Installation. Dies kann nur erfolgen, wenn nexus_delete_default_repos: true und alle konfigurierten Repositories (siehe unten) eine explizite blob_store: custom. Dieser Schritt wird nur bei der Erstinstallation ausgeführt (wenn nexus_data_dir als leer erkannt wurde).

Das Löschen des Blobstore (binärer Artefakte) ist standardmäßig in der ursprünglichen Konfiguration deaktiviert. Um das Blobstore (binärer Artefakte) zu löschen, deaktivieren Sie nexus_delete_default_repos: true. Dieser Schritt wird nur bei der Erstinstallation ausgeführt (wenn nexus_data_dir leer ist).

    nexus_blobstores: []
    # Beispiel Blobstore-Element:
    # - name: separate-storage
    #   type: file
    #   path: /mnt/custom/path
    # - name: s3-blobstore
    #   type: S3
    #   config:
    #     bucket: s3-blobstore
    #     accessKeyId: "{{ VAULT_ENCRYPTED_KEY_ID }}"
    #     secretAccessKey: "{{ VAULT_ENCRYPTED_ACCESS_KEY }}"

Blobstores zu erstellen. Ein Blobstore-Pfad und ein Repository-Blobstore können nach der erstmaligen Erstellung nicht mehr aktualisiert werden (jede Aktualisierung hier wird bei der Neubereitstellung ignoriert).

Die Konfiguration des Blobstores auf S3 wird als удобство bereitgestellt und ist nicht Teil der automatisierten Tests, die wir auf travis durchführen. Bitte beachten Sie, dass die Speicherung auf S3 nur für Instanzen empfohlen wird, die in AWS bereitgestellt werden.

Erstellung Blobstores. Der Pfad zum Blobstore und zum Repository-Blobstore kann nach der erstmaligen Erstellung nicht mehr aktualisiert werden (jede Aktualisierung hier wird bei der Neubereitstellung ignoriert).

Die Konfiguration des Blobstore für BLOB-Objekte auf S3 wird als удобство bereitgestellt. Bitte beachten Sie, dass die Speicherung auf S3 nur für Instanzen empfohlen wird, die in AWS bereitgestellt werden.

    nexus_repos_maven_proxy:
      - name: central
        remote_url: 'https://repo1.maven.org/maven2/'
        layout_policy: permissive
        # maximum_component_age: -1
        # maximum_metadata_age: 1440
        # negative_cache_enabled: true
        # negative_cache_ttl: 1440
      - name: jboss
        remote_url: 'https://repository.jboss.org/nexus/content/groups/public-jboss/'
        # maximum_component_age: -1
        # maximum_metadata_age: 1440
        # negative_cache_enabled: true
        # negative_cache_ttl: 1440
    # Beispiel mit einer Anmeldung/Passwort :
    # - name: secret-remote-repo
    #   remote_url: 'https://company.com/repo/secure/private/go/away'
    #   remote_username: 'username'
    #   remote_password: 'secret'
    #   # maximum_component_age: -1
    #   # maximum_metadata_age: 1440
    #   # negative_cache_enabled: true
    #   # negative_cache_ttl: 1440

Oben ein Beispiel für die Konfiguration Proxy-Server Maven.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # eine der Optionen "allow", "allow_once" oder "deny"

Maven gehostete Repositories Konfiguration. Die negative Cache-Konfiguration ist optional und verwendet standardmäßig die obigen Werte, wenn sie weggelassen wird.

Konfiguration gehostete Repositories Maven. Die Konfiguration des negativen Caches (-1) ist optional und wird standardmäßig die oben genannten Werte verwenden, wenn sie nicht angegeben ist.

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

Konfiguration Gruppe Maven.

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

    _nexus_repos_maven_defaults:
      blob_store: default # Hinweis: kann nicht aktualisiert werden, nachdem das Repository erstellt wurde
      strict_content_validation: true
      version_policy: release # release, snapshot oder mixed
      layout_policy: strict # strict oder permissive
      write_policy: allow_once # eine der Optionen "allow", "allow_once" oder "deny"
      maximum_component_age: -1  # Nexus GUI Standard. Nur für Proxys
      maximum_metadata_age: 1440  # Nexus GUI Standard. Nur für Proxys
      negative_cache_enabled: true # Nexus GUI Standard. Nur für Proxys
      negative_cache_ttl: 1440 # Nexus GUI Standard. Nur für Proxys

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

Docker-, Pypi-, Raw-, Rubygems-, Bower-, NPM-, Git-LFS- und yum-Repositories sind standardmäßig deaktiviert:
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
      nexus_config_yum: false

Bitte beachten Sie, dass Sie möglicherweise bestimmte Sicherheitsbereiche aktivieren müssen, wenn Sie andere Repository-Typen als Maven verwenden möchten. Dies ist standardmäßig false

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # erforderlich für anonymen Docker-Zugriff

Der Remote User Realm kann ebenfalls aktiviert werden durch

nexus_rut_auth_realm: true

und der Header kann konfiguriert werden, indem man

nexus_rut_auth_header: "CUSTOM_HEADER"

Geplante Aufgaben

    nexus_geplante_aufgaben: []
    #  #  Beispielaufgabe zum Kompaktieren des Blobstores:
    #  - name: kompakt-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.kompakt
    #    aufgaben_alert_email: alerts@example.org  # optional
    #    aufgabenEigenschaften:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # alle Aufgabenattribute werden intern von Nexus als Strings gespeichert
    #  #  Beispielaufgabe zum Bereinigen von Maven-Snapshots
    #  - name: Bereinigen-Maven-Snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    aufgaben_alert_email: alerts@example.org  # optional
    #    aufgabenEigenschaften:
    #      repositoryName: "*"  # * für alle Repos. Ändern Sie den Repository-Namen, wenn Sie nur einen bestimmten möchten
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanAufgabenEigenschaften:
    #      removeIfReleased: true
    #  #  Beispielaufgabe zum Bereinigen nicht verwendeter Docker-Manifeste und -Bilder
    #  - name: Bereinigen nicht verwendeter Docker-Manifeste und -Bilder
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    aufgaben_alert_email: alerts@example.org  # optional
    #    aufgabenEigenschaften:
    #      repositoryName: "*"  # * für alle Repos. Ändern Sie den Repository-Namen, wenn Sie nur einen bestimmten möchten
    #  #  Beispielaufgabe zum Bereinigen unvollständiger Docker-Uploads
    #  - name: Bereinigen unvollständiger Docker-Uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    aufgaben_alert_email: alerts@example.org  # optional
    #    aufgabenEigenschaften:
    #      age: "24"

Geplante Aufgaben zur Konfiguration. typeId und aufgabenspezifischaufgabenEigenschaften/booleanAufgabenEigenschaften kann entweder erraten werden:

  • aus der Hierarchie der Java-Typen org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • indem Sie das HTML-Formular zur Erstellung von Aufgaben in Ihrem Browser überprüfen
  • und die AJAX-Anfragen im Browser bei der manuellen Konfiguration der Aufgabe beobachten.

Aufgabeneigenschaften müssen im richtigen YAML-Bereich je nach ihrem Typ deklariert werden:

  • aufgabenEigenschaften für alle stringbasierten Eigenschaften (d. h. Namen von Repositories, Namen von Blobstores, Zeiträume …).
  • booleanAufgabenEigenschaften für alle logischen Eigenschaften (d. h. in der Regel Kontrollkästchen in der grafischen Benutzeroberfläche der Erstellung von Nexus-Aufgaben).

Backups

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Siehe Cron-Ausdruckdefinition in der Nexus-Task-GUI
      nexus_backup_dir: ' /var/nexus-backup'
      nexus_restore_log: '{{ nexus_backup_dir }}/nexus-restore.log'
      nexus_backup_rotate: false
      nexus_backup_rotate_first: false
      nexus_backup_keep_rotations: 4  # Standardmäßig 4 Backup-Drehungen behalten (aktuell + die letzten 3)

Das Backup wird nicht konfiguriert, solange Sie nicht umschalten auf nexus_backup_configure in true.
In diesem Fall wird die geplante Skriptaufgabe so konfiguriert, dass sie in Nexus ausgeführt wird
in dem Intervall, das in nexus_backup_cron (standardmäßig täglich um 21:00 Uhr).
Siehe [Groovy-Vorlage für diese Aufgabe](templates / backup.groovy.j2) für weitere Informationen.
Diese geplante Aufgabe ist unabhängig von anderen nexus_geplante_aufgaben, die Sie
in Ihrem Playbook deklarieren.

Wenn Sie Backups rotieren/löschen möchten, setzen Sie nexus_backup_rotate: true und legen Sie die Anzahl der Backups fest, die Sie mit Hilfe von nexus_backup_keep_rotations speichern möchten (standardmäßig 4).

Bei der Verwendung von Rotation, wenn Sie während des Backup-Prozesses zusätzlichen Speicherplatz sparen möchten,
können Sie nexus_backup_rotate_first: trueeinrichten. Dadurch wird eine Vorrotation/Löschung vor dem Backup eingerichtet. Standardmäßig erfolgt die Rotation nach der Erstellung des Backups. Beachten Sie, dass in diesem Fall ältere Backups
vor dem aktuellen Backup gelöscht werden.

Wiederherstellungsverfahren

Führen Sie das Playbook mit dem Parameter -e nexus_restore_point=
(zum Beispiel 2017-12-17-21-00-00 für den 17. Dezember 2017 um 21:00)

Löschen von nexus

Warnung: Dadurch werden alle aktuellen Daten vollständig gelöscht. Stellen Sie sicher, dass Sie vorher eine Sicherungskopie erstellen, falls erforderlich.

Verwenden Sie die Variable nexus_purge, wenn Sie von Grund auf neu starten und eine Nexus-Instanz mit Löschung aller Daten neu installieren müssen.

ansible-playbook -i your/inventory.ini your_nexus_playbook.yml -e nexus_purge=true

Ändern Sie das Administratorpasswort nach der ersten Installation

    nexus_default_admin_password: 'admin123'

Dies sollte in Ihrem Playbook nicht geändert werden.Diese Variable wird beim ersten Installationsvorgang mit dem Standardpasswort des Nexus-Administrators gefüllt und stellt sicher, dass wir das Passwort des Administrators auf nexus_admin_password.

ändern können. Wenn Sie das Passwort des Administrators nach der ersten Installation ändern möchten, können Sie es vorübergehend auf das alte Passwort über die Befehlszeile ändern. Nach der Änderung nexus_admin_password können Sie in Ihrem Spielbuch Folgendes ausführen:

ansible-playbook -i your/inventory.ini your_playbook.yml -e nexus_default_admin_password=altePasswort

Telegram-Kanal über Nexus Sonatype: https://t.me/ru_nexus_sonatype

Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte einloggen.

Welche Artifact-Repositories verwenden Sie?

  • Sonatype Nexus kostenlos

  • Sonatype Nexus kostenpflichtig

  • Artifactory kostenlos

  • Artifactory kostenpflichtig

  • Harbor

  • Pulp

9 Benutzer haben abgestimmt. 3 Benutzer haben sich enthalten.

Quelle: habr.com

60GB SSD 8Gb DDR4