Installation und Konfiguration von Nexus Sonatype mithilfe des Ansatzes Infrastructure as Code

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

Warum benötigt man Sonatype Nexus?

  • Zum Speichern privater Artefakte;
  • Zum Caching 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 Community unterstützte Artefakte:

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

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

Anforderungen

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

Beispiel für ein ansible-playbook zur Installation von Nexus ohne LDAP mit Maven-Repositorys (Java), Docker, Python, Ruby, NPM, Bower, RPM und gitlfs.

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

  vars:
    nexus_timezone: 'Asia/Omsk'
    nexus_admin_password: "admin123"
    nexus_public_hostname: 'apatsev-nexus-playbook'
    httpd_setup_enable: false
    nexus_privileges:
      - name: all-repos-read
        description: 'Lesen & Stöbern in allen Repos'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Deployment für company-project'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # mappt zur 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 verwendet zum Aktualisieren
        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 }
    # Nur Debian/Ubuntu
    # - { role: geerlingguy.apache, apache_create_vhosts: no, apache_mods_enabled: ["proxy_http.load", "headers.load"], apache_remove_default_vhost: true, tags: ["geerlingguy.apache"] }
    # Nur RedHat/CentOS
    - { 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 mithilfe des Ansatzes Infrastructure as Code

Installation und Konfiguration von Nexus Sonatype mithilfe des Ansatzes Infrastructure as Code

Variablen der Rolle

Rollenvariablen

Standardwerte der Variablen (siehe default/main.yml):

Allgemeine Variablen

    nexus_version: ''
    nexus_timezone: 'UTC'

Standardmäßig setzt die Rolle die neueste verfügbare Version von Nexus. Sie können die Version anpassen, indem Sie die Variable nexus_versionändern. Überprüfen Sie die verfügbaren Versionen bei 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. ist das Hosting von Yum-Repositories nur für Nexus-Versionen ab 3.8.0 und Git LFS-Repositories für Nexus-Versionen ab 3.3.0 verfügbar usw.)

nexus timezone ist der Name der Zeitzone in Java, die in Kombination mit den folgenden Cron-Ausdrücken für nexus_scheduled tasks nützlich sein kann.

Nexus-Port 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 eingestellt ist, z. B.: nexus_default_context_path: '/nexus/'.

Nutzer und Gruppe für das Betriebssystem von Nexus

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Der Benutzer und die Gruppe, die für den Besitz von Nexus-Dateien und für den Start des Dienstes verwendet werden, werden von der Rolle erstellt, falls sie nicht vorhanden sind.

    nexus_os_user_home_dir: '/home/nexus'

Erlauben Sie die Änderung des Standard-Home-Verzeichnisses für den Benutzer nexus

Nexus-Instanzverzeichnisse

    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 die installierten ausführbaren Dateien
  • nexus_data_dir enthält alle Konfigurationen, Repositories und heruntergeladenen Artefakte. Benutzerdefinierte Blobstore-Pfade nexus_data_dir können konfiguriert werden, siehe unten nexus_blobstores.
  • nexus_tmp_dir enthält alle temporären Dateien. Der Standardpfad für RedHat wurde verschoben, um /tmp potenzielle Probleme mit automatischen Bereinigungsverfahren zu vermeiden. Siehe #168.

Konfiguration des Speichergebrauchs der Nexus-JVM

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

Dies sind die Standardwerte für Nexus. Bitte ändern Sie diese Werte nicht Wenn Sie nicht gelesen haben den Abschnitt über die Systemanforderungen des Nexus-Speichers und nicht verstehen, was sie bewirken.

Als zweite Warnung, hier ist ein Auszug aus dem oben 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 Belastung des Betriebssystems führen.

Administratorpasswort

    nexus_admin_password: 'changeme'

Das Passwort für das Administratorkonto zur Konfiguration. Dies funktioniert nur bei der ersten Installation im Standard.. Bitte beachten Sie [Ändern Sie das Administratorpasswort nach der ersten Installation](# change-admin-password-after-first-install), wenn Sie es später mit einer Rolle ändern möchten.

Es wird dringend empfohlen, Ihr Passwort nicht im Klartext im Playbook zu speichern, sondern [Ansible-Vault-Verschlüsselung] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (entweder eingebaut oder in einer separaten Datei, die beispielsweise mit include_vars geladen wird)

Anonymer Zugriff standardmäßig

    nexus_anonymous_access: false

Der anonyme Zugriff ist standardmäßig 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), unter dem die Nexus-Instanz für ihre Kunden verfügbar sein wird.

API-Zugang 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 sich mit der Nexus API verbindet.
Nur für fortgeschrittene Benutzer. Wahrscheinlich möchten Sie diese Standardeinstellungen nicht ändern.

Einen Reverse-Proxy einrichten

    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-Proxy-Server.
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, wodurch nicht es direkt über den HTTP-Port 8081 mit einer externen IP-Adresse zugänglich ist.

Der Standard-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.

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

Wenn Sie vorhandene Zertifikate auf dem Server verwenden möchten, aktivieren Sie httpd_copy_ssl_files: false und geben Sie die folgenden Variablen an:

    # 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 nicht eingerichtet werden, wenn Sie die Kette nicht konfigurieren möchten.

    httpd_default_admin_email: "admin@example.com"

Standard-Administratoren-E-Mail-Adresse festlegen

LDAP-Konfiguration

LDAP-Verbindungen und Sicherheitsbereich standardmäßig deaktiviert

    nexus_ldap_realm: false
    ldap_connections: []

LDAP-Verbindungen, wobei jedes Element wie folgt aussieht:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Mein Unternehmens-LDAP' # verwendet als Schlüssel zur Aktualisierung der LDAP-Konfiguration
        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
        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 die „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 des DSA-Kontos):

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP-Konfiguration mit DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.meinfirma.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'einfach'
        ldap_auth_username: 'cn=meinnexus,ou=dsa,dc=meinfirma,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # besser, Passwörter in einem Ansible Vault zu speichern
        ldap_search_base: 'dc=meinfirma,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 einer LDAP-Konfiguration für einfache Authentifizierung (unter Verwendung des DSA-Kontos) + Gruppen, die als Rollen zugeordnet sind:

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

Beispielkonfiguration für LDAP zur einfachen Authentifizierung (unter Verwendung eines 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.meinefirma.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=meinefirma,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # Passwörter besser 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_map_groups_as_roles_type: 'dynamic'
        ldap_user_memberof_attribute: 'memberOf'

Berechtigungen

    nexus_privileges:
      - name: all-repos-read # wird als Schlüssel verwendet, um eine Berechtigung zu aktualisieren
        # type: 
        description: 'Lese- & Durchsichtsrechte für alle Repos'
        repository: '*'
        actions: # können hinzugefügt, durchgesehen, erstellt, gelöscht, bearbeitet, gelesen oder * (alle) sein
          - read
          - browse
        # pattern: Muster
        # domain: Domäne
        # script_name: Name

Liste Berechtigungen zur Konfiguration. Bitte sehen Sie sich die Dokumentation und die grafische Benutzeroberfläche an, um zu überprüfen, welche Variablen je nach Art der Berechtigung gesetzt werden müssen.

Diese Elemente werden mit den folgenden Standardwerten kombiniert:

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

Rollen (gemeint innerhalb von Nexus)

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

Liste Rollen zur Konfiguration.

Benutzer

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

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

Liste der lokalen (nicht-LDAP) Benutzer/Konten zur Erstellung in Nexus.

      nexus_ldap_users: []
      # - username: j.doe
      #   state: present
      #   roles:
      #     - "nx-admin"

Mapping von LDAP-Benutzern/Rollen. Status absent entfernt Rollen von einem bestehenden Benutzer, sofern dieser bereits existiert.
LDAP-Benutzer werden nicht entfernt. Der Versuch, eine Rolle für einen nicht existierenden Benutzer zuzuweisen, führt zu einem Fehler.

Content-Selector

  nexus_content_selectors:
  - name: docker-login
    description: Selektor für Docker-Login-Berechtigung
    search_expression: format=="docker" and path=~"/v2/"

Für weitere Informationen über den Content-Selector siehe Dokumentation.

Um den Inhaltselektionator zu verwenden, fügen Sie ein neues Privileg mit type: repository-content-selector und dem entsprechendencontentSelector

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Login zum 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).

Das Löschen 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 das 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) ein explizites blob_store: custom. Dieser Schritt wird nur bei der Erstinstallation ausgeführt (wenn nexus_data_dir als leer erkannt wurde).

Das Löschen von Blobstore (binären Artefakten) ist standardmäßig aus der ursprünglichen Konfiguration deaktiviert. Um das Blobstore (binäre 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 ursprünglichen Erstellung nicht mehr aktualisiert werden (jede Aktualisierung hier wird beim erneuten Bereitstellen ignoriert).

Die Konfiguration des Blobstores auf S3 wird zur Bequemlichkeit bereitgestellt und ist nicht Teil der automatisierten Tests, die wir bei Travis durchführen. Bitte beachten Sie, dass die Speicherung auf S3 nur für Instanzen empfohlen wird, die auf AWS bereitgestellt werden.

Erstellung Blobstores. Der Pfad zum Blobstore und zum Repository kann nach der anfänglichen Erstellung nicht mehr aktualisiert werden (jedes Update hier wird bei der erneuten Bereitstellung ignoriert).

Die Einstellung des BLOB-Objektspeichers auf S3 erfolgt aus praktischen Gründen. Bitte beachten Sie, dass die Speicherung auf S3 nur für auf AWS bereitgestellte Instanzen empfohlen wird.

    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 Login/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 ist 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 Konfiguration des negativen Caches ist optional und verwendet standardmäßig die oben angegebenen Werte, wenn sie weggelassen wird.

Konfiguration gehosteten Repositories Maven. Die Konfiguration des negativen Caches (-1) ist optional und verwendet standardmäßig die oben genannten Werte, wenn nichts angegeben ist.

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

Konfiguration Neue Version 1.2.0 von PyTorch veröffentlicht. 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 Proxies
      maximum_metadata_age: 1440  # Nexus-GUI-Standard. Nur für Proxies
      negative_cache_enabled: true # Nexus-GUI-Standard. Nur für Proxies
      negative_cache_ttl: 1440 # Nexus-GUI-Standard. Nur für Proxies

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

Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS und yum 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. Standardmäßig ist dies falscher.

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

Das Remote User Realm kann ebenfalls aktiviert werden mit

nexus_rut_auth_realm: true

und der Header kann durch die Festlegung von

nexus_rut_auth_header: "CUSTOM_HEADER"

Geplante Aufgaben

    nexus_scheduled_tasks: []
    #  #  Beispielaufgabe zur Komprimierung des Blobstores:
    #  - name: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: alerts@example.org  # optional
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # Alle Aufgabenattribute werden intern von Nexus als Strings gespeichert.
    #  #  Beispielaufgabe zum Bereinigen von Maven-Snapshots
    #  - name: Purge-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: alerts@example.org  # optional
    #    taskProperties:
    #      repositoryName: "*"  # * für alle Repos. Ändern Sie den Namen in den eines spezifischen Repos, wenn Sie nur dieses möchten.
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Beispielaufgabe zum Entfernen ungenutzter Docker-Manifest und Bilder
    #  - name: Purge unused docker manifests and images
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: alerts@example.org  # optional
    #    taskProperties:
    #      repositoryName: "*"  # * für alle Repos. Ändern Sie den Namen in den eines spezifischen Repos, wenn Sie nur dieses möchten.
    #  #  Beispielaufgabe zum Bereinigen unvollständiger Docker-Uploads
    #  - name: Purge incomplete docker uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: alerts@example.org  # optional
    #    taskProperties:
    #      age: "24"

Geplante Aufgaben zur Konfiguration. typeId und spezifisch für die AufgabetaskProperties/booleanTaskProperties kann entweder erraten werden:

  • aus der Hierarchie der Java-Typen org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • indem Sie das HTML-Formular zur Erstellung einer Aufgabe in Ihrem Browser überprüfen
  • von der Ansicht von AJAX-Anfragen im Browser während der manuellen Konfiguration der Aufgabe.

Die Eigenschaften der Aufgabe müssen im richtigen YAML-Block je nach Typ deklariert werden.:

  • taskProperties für alle stringbasierten Eigenschaften (z. B. Namen von Repositories, Speicherorten, Zeitspannen …).
  • booleanTaskProperties für alle booleschen Eigenschaften (z. B. hauptsächlich Checkboxen in der grafischen Benutzeroberfläche der Nexus-Erstellungsaufgabe).

Backups

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Siehe Definition der Cron-Ausdrücke in der Nexus-Erstellungsaufgaben-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-Rotationen behalten (aktuell + die letzten 3)

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

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 nexus_backup_keep_rotations (Standardwert 4) speichern möchten.

Wenn Sie Rotationen verwenden und während des Backup-Prozesses zusätzlichen Speicherplatz sparen möchten,
können Sie nexus_backup_rotate_first: truefestlegen. Dadurch wird eine Vorrotation/Löschung vor dem Backup konfiguriert. Standardmäßig erfolgt die Rotation nach der Erstellung des Backups. Beachten Sie, dass in diesem Fall ältere Backups
löschen werden, bevor das aktuelle Backup erstellt wird.

Wiederherstellungsverfahren

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

Löschen von nexus

Warnung: Dies wird alle aktuellen Daten vollständig löschen. Stellen Sie unbedingt sicher, dass Sie vorher ein Backup erstellen, falls erforderlich.

Verwenden Sie die Variable nexus_purge, wenn Sie von Grund auf neu starten und eine Neuinstallation des Nexus mit der Löschung aller Daten durchführen möchten.

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 mit dem Standardpasswort des Nexus-Administrators bei der Ersteinrichtung gefüllt und gewährleistet, dass wir das Administratorkennwort in nexus_admin_password.

Wenn Sie das Administratorkennwort nach der Ersteinrichtung ändern möchten, können Sie es vorübergehend über das alte Passwort in der Befehlszeile ändern. Nach der Änderung nexus_admin_password in Ihrem Spielbuch können Sie ausführen:

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

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

Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte melden Sie sich an.Sind Sie an Contour interessiert?

Welche Artefakten-Repositories nutzen Sie?

  • Sonatype Nexus kostenlos

  • Sonatype Nexus kostenpflichtig

  • Artifactory kostenlos

  • Artifactory kostenpflichtig

  • Harbor

  • Pulp

9 Nutzer haben abgestimmt. 3 Nutzer haben sich enthalten.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster