Instalacja i konfiguracja Nexus Sonatype przy użyciu podejścia infrastructure as code

Sonatype Nexus – zintegrowana platforma, która umożliwia programistom proxy, przechowywanie i zarządzanie zależnościami Java (Maven), obrazami Docker, Pythonem, Ruby, NPM, Bower, pakietami RPM, gitlfs, Apt, Go, Nuget oraz dystrybucję własnego oprogramowania.

Po co potrzebny jest Sonatype Nexus?

  • Do przechowywania prywatnych artefaktów;
  • Do cachowania artefaktów pobieranych z Internetu;

Artefakty obsługiwane w podstawowej wersji Sonatype Nexus:

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

Artefakty wspierane przez społeczność:

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

Instalacja Sonatype Nexus z użyciem https://github.com/ansible-ThoTeam/nexus3-oss

Wymagania

  • Przeczytaj o używaniu ansible w Internecie.
  • Zainstaluj ansible pip install ansible na stacji roboczej, na której uruchamiany jest playbook.
  • Zainstaluj geerlingguy.java na stacji roboczej, na której uruchamiany jest playbook.
  • Zainstaluj geerlingguy.apache na stacji roboczej, na której uruchamiany jest playbook.
  • Ta rola była testowana na CentOS 7, Ubuntu Xenial (16.04) oraz Bionic (18.04), Debian Jessie i Stretch
  • jmespath biblioteka musi być zainstalowana na stacji roboczej, na której uruchamiany jest playbook. Aby to zrobić, wykonaj sudo pip install -r requirements.txt
  • Zapisz plik playbook (przykład poniżej) jako nexus.yml
  • Uruchom instalację nexus ansible-playbook -i host nexus.yml

Przykład ansible-playbook do instalacji nexus bez LDAP z repozytoriami Maven (java), Docker, Python, Ruby, NPM, Bower, RPM i 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: 'Dostęp do odczytu i przeglądania wszystkich repozytoriów'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Wdrożenia do projektu firmowego'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # mapuje do grupy 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: support@company.com
        password: "s3cr3t"
        roles:
          - Developpers # identyfikator roli
    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. Zmień nexus_config_yum na true aby utworzyć repozytorium yum
    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. Zmień nexus_config_npm na true aby utworzyć repozytorium npm
    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. Zmień nexus_config_docker na true aby utworzyć repozytorium docker
    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. Zmień nexus_config_bower na true aby utworzyć repozytorium bower
    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. Zmień nexus_config_pypi na true aby utworzyć repozytorium pypi
    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. Zmień nexus_config_rubygems na true aby utworzyć repozytorium rubygems
    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. Zmień nexus_config_gitlfs na true aby utworzyć repozytorium gitlfs
    nexus_config_gitlfs: true
    nexus_repos_gitlfs_hosted:
      - name: gitlfs-hosted

  roles:
    - { role: geerlingguy.java }
    # Tylko 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"] }
    # Tylko 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'] }

Zrzuty ekranu:

Instalacja i konfiguracja Nexus Sonatype przy użyciu podejścia infrastructure as code

Instalacja i konfiguracja Nexus Sonatype przy użyciu podejścia infrastructure as code

Zmienna roli

Zmienna Roli

Zmienne z wartościami domyślnymi (patrz default/main.yml):

Zmienne ogólne

    nexus_version: ''
    nexus_timezone: 'UTC'

Domyślnie rola zainstaluje najnowszą dostępną wersję Nexus. Możesz poprawić wersję, zmieniając zmienną nexus_version. Zobacz dostępne wersje na https://www.sonatype.com/download-oss-sonatype.

Jeśli zmienisz wersję na nowszą, rola spróbuje zaktualizować zainstalowany Nexus.

Jeżeli używasz starszej wersji Nexus niż najnowsza, musisz upewnić się, że nie korzystasz z funkcji, które nie są dostępne w zainstalowanej wersji (na przykład hostowanie repozytoriów yum jest dostępne dla nexus powyżej 3.8.0, git lfs repo dla nexus powyżej 3.3.0 itd.)

strefa czasowa nexus to nazwa strefy czasowej Java, która może być użyteczna w połączeniu z poniższymi wyrażeniami cron dla zadań zaplanowanych nexus.

Port Nexus i ścieżka kontekstowa

    nexus_default_port: 8081
    nexus_default_context_path: '/ '

Port i ścieżka kontekstowa procesu połączenia Java. nexus_default_context_path musi zawierać ukośnik, gdy jest ustawiony, na przykład: nexus_default_context_path: '/nexus/'.

Użytkownik i grupa systemu operacyjnego Nexus

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Użytkownik i grupa, używane do posiadania plików Nexus i uruchamiania usługi, zostaną utworzone przez rolę, jeśli będą nieobecne.

    nexus_os_user_home_dir: '/home/nexus'

Zezwól na zmianę domyślnego katalogu domowego dla użytkownika nexus

Katalogi instancji Nexus

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

Katalogi Nexus.

  • nexus_installation_dir zawiera zainstalowane pliki wykonywalne
  • nexus_data_dir zawiera całą konfigurację, repozytoria i załadowane artefakty. Dostosowane ścieżki blobstore nexus_data_dir mogą być skonfigurowane, patrz poniżej nexus_blobstores.
  • nexus_tmp_dir zawiera wszystkie pliki tymczasowe. Domyślna ścieżka dla redhat została przeniesiona z /tmp aby uniknąć potencjalnych problemów z automatycznymi procedurami czyszczenia. Zobacz #168.

Konfiguracja użycia pamięci Nexus JVM

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

To są domyślne ustawienia dla Nexus. Proszę nie zmieniać tych wartości Jeśli nie przeczytałeś sekcji pamięci wymagań systemowych nexus i nie rozumiesz, co one robią.

Jako drugie ostrzeżenie, oto fragment z powyższego dokumentu:

Nie zaleca się zwiększania pamięci JVM heap ponad zalecane wartości w celu poprawy wydajności. Może to w rzeczywistości przynieść odwrotny efekt, prowadząc do niepotrzebnej pracy systemu operacyjnego.

Hasło administratora

    nexus_admin_password: 'changeme'

Hasło konta «admin» do konfiguracji. Działa to tylko podczas pierwszej instalacji domyślnej. Proszę zapoznać się z [Zmień hasło administratora po pierwszej instalacji](# change-admin-password-after-first-install), jeśli chcesz zmienić je później za pomocą roli.

Zdecydowanie nie zaleca się przechowywania swojego hasła w postaci otwartego tekstu w playbooku, a zamiast tego używać [szyfrowania ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (lub wbudowanego lub w osobnym pliku załadowanym na przykład za pomocą include_vars)

Domyślny dostęp anonimowy

    nexus_anonymous_access: false

Domyślny dostęp anonimowy jest wyłączony. Więcej informacji o dostępie anonimowym.

Publiczna nazwa hosta

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Pełna nazwa domeny i schemat (https lub http), przez który instancja Nexus będzie dostępna dla swoich klientów.

Dostęp API dla tej roli

    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 }}"

Te zmienne kontrolują, w jaki sposób rola łączy się z API Nexus w celu dostarczenia.
Tylko dla zaawansowanych użytkowników. Najprawdopodobniej nie chcesz zmieniać tych domyślnych ustawień.

Konfiguracja proxy odwrotnego

    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

Zainstaluj Proxy odwrotne SSL.
Wymaga to zainstalowania httpd. Uwaga: gdy dla httpd_setup_enable ustawiono wartośćtrue, nexus łączy się z 127.0.0.1:8081, dzięki czemu nie jest bezpośrednio dostępny przez port HTTP 8081 z zewnętrznego adresu IP.

Domyślnie używana nazwa hosta to nexus_public_hostname. Jeśli potrzebujesz różnych nazw z jakiegokolwiek powodu, możesz ustawić httpd_server_name z inną wartością.

Z httpd_copy_ssl_files: true (domyślnie) wcześniej wspomniane certyfikaty powinny znajdować się w twoim katalogu playbook i będą kopiowane na serwer oraz konfigurowane w apache.

Jeśli chcesz użyć istniejących certyfikatów na serwerze, ustaw httpd_copy_ssl_files: false i podaj następujące zmienne:

    # 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 }}"

lokalizacja_pliku_certyfikatu_ssl_httpd jest opcjonalne i powinno zostać nieokreślone, jeśli nie chcesz konfigurować pliku łańcucha

    httpd_default_admin_email: "admin@example.com"

Ustaw domyślny adres e-mail administratora

Konfiguracja LDAP

Połączenia LDAP i obszar bezpieczeństwa są domyślnie wyłączone

    nexus_ldap_realm: false
    ldap_connections: []

Połączenia LDAP, każdy element wygląda następująco:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Moja firma LDAP' # używane jako klucz do aktualizacji konfiguracji ldap
        ldap_protocol: 'ldaps' # ldap lub ldaps
        ldap_hostname: 'ldap.moja-firma.com'
        ldap_port: 636
        ldap_use_trust_store: false # Czy używać certyfikatów w zaufanym sklepie nexus
        ldap_search_base: 'dc=moja-firma,dc=net'
        ldap_auth: 'none' # lub simple
        ldap_auth_username: 'nazwa_użytkownika' # jeśli auth = simple
        ldap_auth_password: 'hasło' # jeśli auth = simple
        ldap_user_base_dn: 'ou=użytkownicy'
        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=grupy'
        ldap_group_object_class: 'posixGroup'
        ldap_group_id_attribute: 'cn'
        ldap_group_member_attribute: 'memberUid'
        ldap_group_member_format: '${nazwa_użytkownika}'
        ldap_group_subtree: false

Przykład konfiguracji LDAP dla anonimowej autoryzacji (anonimowe powiązanie), jest to także "minimalna" konfiguracja:

    nexus_ldap_realm: true
    ldap_connection:
      - ldap_name: 'Najprostsza konfiguracja LDAP'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.moja-firma.com'
        ldap_search_base: 'dc=moja-firma,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'

Przykład konfiguracji LDAP dla prostej autoryzacji (z użyciem konta DSA):

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Konfiguracja LDAP z DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.moja-firma.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=moja-firma,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # lepiej trzymać hasła w skarbczyku ansible
        ldap_search_base: 'dc=moja-firma,dc=net'
        ldap_user_base_dn: 'ou=użytkownicy'
        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 (z użyciem konta DSA) + grupy mapowane jako role:

    nexus_ldap_realm: true
    ldap_connections
      - ldap_name: 'Konfiguracja LDAP z DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # lepiej trzymać 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

Przykład konfiguracji LDAP dla prostej autoryzacji (z wykorzystaniem konta DSA) + grupy, dynamicznie mapowane jako role:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Konfiguracja LDAP z DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # lepiej trzymać 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_map_groups_as_roles_type: 'dynamic'
        ldap_user_memberof_attribute: 'memberOf'

Uprawnienia

    nexus_privileges:
      - name: all-repos-read # używane jako klucz do aktualizacji uprawnienia
        # type: <jeden z application, repository-admin, repository-content-selector, repository-view, script lub wildcard>
        description: 'Dostęp do odczytu i przeglądania wszystkich repozytoriów'
        repository: '*'
        actions: # mogą to być add, browse, create, delete, edit, read lub * (wszystkie)
          - read
          - browse
        # pattern: wzór
        # domain: domena
        # script_name: nazwa

Lista uprawnień do konfiguracji. Zobacz dokumentację i interfejs graficzny, aby sprawdzić, jakie zmienne powinny być ustawione w zależności od typu uprawnienia.

Te elementy łączą się z następującymi wartościami domyślnymi:

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

Role (w kontekście Nexus)

    nexus_roles:
      - id: Developpers # może mapować na id grupy LDAP, również używane jako klucz do aktualizacji roli
        name: developers
        description: Wszyscy deweloperzy
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # odniesienia do innych nazw ról

Lista ról do konfiguracji.

Użytkownicy

    nexus_local_users: []
      # - username: jenkins # używane jako klucz do aktualizacji
      #   state: present # wartość domyślna, jeśli pominięta, użyj 'absent', aby usunąć użytkownika
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - developers # id roli

Lista lokalnych (non-LDAP) użytkowników/kont do utworzenia w nexus.

Lista lokalnych (nie LDAP) użytkowników/kont do utworzenia w Nexus.

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

Mapowanie użytkowników/ról Ldap. Stan nieobecny usunięcie ról z istniejącego użytkownika, jeśli on już istnieje.
Użytkownicy Ldap nie są usuwani. Próba przydzielenia roli dla nieistniejącego użytkownika spowoduje błąd.

Selektory treści

  nexus_content_selectors:
  - name: docker-login
    description: Selektor dla uprawnień logowania do dockera
    search_expression: format=="docker" and path=~"/v2/"

Aby uzyskać więcej informacji o selektorze treści, zobacz. Dokumentację.

Aby użyć selektora treści, dodaj nową uprawnienie z type: repository-content-selector i odpowiednimcontentSelector

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Logowanie do rejestru Docker'
  repository: '*'
  actions:
  - read
  - browse

Blobstore i repozytoria

    nexus_delete_default_repos: false

Usuń repozytoria z początkowej konfiguracji instalacyjnej nexus. Ten krok jest wykonywany tylko przy pierwszej instalacji (gdy nexus_data_dir został wykryty jako pusty).

Usunięcie repozytoriów z domyślnej konfiguracji dla Nexus. Ten krok jest wykonywany tylko przy pierwszej instalacji (gdy nexus_data_dir jest pusty).

    nexus_delete_default_blobstore: false

Usuń domyślny blobstore z początkowej konfiguracji instalacyjnej nexus. Można to zrobić tylko jeśli nexus_delete_default_repos: true i wszystkie skonfigurowane repozytoria (zobacz poniżej) mają wyraźny blob_store: custom. Ten krok jest wykonywany tylko przy pierwszej instalacji (gdy nexus_data_dir został wykryty jako pusty).

Usunięcie przechowywania blobów (binarne artefakty) jest domyślnie wyłączone w początkowej konfiguracji. Aby usunąć przechowywanie blobów (binarne artefakty), wyłącz nexus_delete_default_repos: true. Ten krok jest wykonywany tylko przy pierwszej instalacji (gdy nexus_data_dir jest pusty).

    nexus_blobstores: []
    # przykład elementu blobstore :
    # - 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 }}"

Blobstore do utworzenia. Ścieżka blobstore i repozytorium blobstore nie mogą być aktualizowane po początkowym utworzeniu (wszystkie aktualizacje tutaj będą ignorowane podczas ponownego udostępniania).

Konfiguracja blobstore na S3 jest udostępniana dla wygody i nie jest częścią zautomatyzowanych testów, które przeprowadzamy na travis. Proszę zwrócić uwagę, że przechowywanie na S3 jest zalecane tylko dla instancji wdrożonych na AWS.

Tworzenie Blobstore. Ścieżka do przechowywania i repozytorium przechowywań nie mogą być aktualizowane po początkowym utworzeniu (wszystkie aktualizacje tutaj będą ignorowane podczas ponownej instalacji).

Konfiguracja przechowywania obiektów BLOB na S3 jest dostarczana dla wygody. Proszę zauważyć, że przechowywanie na S3 jest zalecane tylko dla instancji wdrożonych na AWS.

    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
    # example with a login/password :
    # - 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

Powyższy przykład konfiguracji proxy-serwer Maven.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # jeden z "allow", "allow_once" lub "deny"

Maven repozytoria hostowane konfiguracja. Konfiguracja negatywnego cache jest opcjonalna i domyślnie będzie korzystać z powyższych wartości, jeśli zostanie pominięta.

Konfiguracja repozytoriów hostowanych Maven. Konfiguracja negatywnego cache (-1) jest opcjonalna i domyślnie użyje powyższych wartości, jeśli nie zostanie podana.

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

Konfiguracja grupy Maven.

Wszystkie trzy typy repozytoriów łączą się 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 # jeden z "allow", "allow_once" lub "deny"
      maximum_component_age: -1  # domyślna wartość w GUI Nexus. Tylko dla proxy
      maximum_metadata_age: 1440  # domyślna wartość w GUI Nexus. Tylko dla proxy
      negative_cache_enabled: true # domyślna wartość w GUI Nexus. Tylko dla proxy
      negative_cache_ttl: 1440 # domyślna wartość w GUI Nexus. Tylko dla proxy

Rodzaje repozytoriów Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS i yum:
zobacz defaults/main.yml dla tych opcji:

Repozytoria Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS i yum są domyślnie wyłączone:
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
      nexus_config_yum: false

Uwaga, może być potrzebne włączenie określonych obszarów bezpieczeństwa, jeśli chciałbyś używać innych typów repozytoriów poza maven. Domyślnie jest to false

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # wymagane do anonimowego dostępu do Docker

Zasięg Użytkownika Zdalnego również może być włączony przy użyciu

nexus_rut_auth_realm: true

i nagłówek może być skonfigurowany przez określenie

nexus_rut_auth_header: "CUSTOM_HEADER"

Zadania zaplanowane

    nexus_scheduled_tasks: []
    #  #  Przykładowe zadanie do kompresji blobstore :
    #  - name: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: alerts@example.org  # opcjonalnie
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # wszystkie atrybuty zadania są przechowywane jako ciągi przez nexus wewnętrznie
    #  #  Przykładowe zadanie do usuwania snapshotów maven
    #  - name: Purge-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: alerts@example.org  # opcjonalnie
    #    taskProperties:
    #      repositoryName: "*"  # * dla wszystkich repozytoriów. Zmień na nazwę repozytorium, jeśli chcesz tylko jedno konkretne
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Przykładowe zadanie do usuwania nieużywanych manifestów i obrazów dockera
    #  - name: Purge unused docker manifests and images
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: alerts@example.org  # opcjonalnie
    #    taskProperties:
    #      repositoryName: "*"  # * dla wszystkich repozytoriów. Zmień na nazwę repozytorium, jeśli chcesz tylko jedno konkretne
    #  #  Przykładowe zadanie do usuwania niekompletnych przesyłek docker
    #  - name: Purge incomplete docker uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: alerts@example.org  # opcjonalnie
    #    taskProperties:
    #      age: "24"

Zadania zaplanowane do konfiguracji. typeId i specyficzne dla zadaniataskProperties/booleanTaskProperties można zgadywać lub:

  • z hierarchii typów Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • sprawdzając formularz HTML do tworzenia zadania w swojej przeglądarce
  • z monitorowania żądań AJAX w przeglądarce podczas ręcznego konfigurowania zadania.

Właściwości zadania muszą być zadeklarowane w odpowiednim bloku yaml w zależności od ich typu:

  • taskProperties dla wszystkich właściwości ciągowych (tzn. nazw repozytoriów, nazw magazynów, okresów czasu …).
  • booleanTaskProperties dla wszystkich właściwości logicznych (tzn. w głównej mierze checkboxy w graficznym interfejsie tworzenia zadania nexusa).

Kopie zapasowe

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Zobacz definicję wyrażeń cron w interfejsie GUI do tworzenia zadań w nexus
      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  # Domyślnie zachowaj 4 rotacji kopii zapasowych (bieżąca + ostatnie 3)

Kopia zapasowa nie będzie skonfigurowana, dopóki nie przełączysz nexus_backup_configure do true.
W takim przypadku zaplanowane zadanie skryptu będzie konfigurowane do uruchomienia w Nexusie
z interwałem określonym w nexus_backup_cron (domyślnie 21:00 każdego dnia).
Zobacz [szablon groovy dla tego zadania](templates / backup.groovy.j2) w celu uzyskania dalszych informacji.
To zaplanowane zadanie nie jest zależne od innych nexus_scheduled_tasks, które
deklarujesz w swoim playbooku.

Jeśli chcesz rotować/usunąć kopie zapasowe, ustaw nexus_backup_rotate: true i skonfiguruj liczbę kopii zapasowych, które chciałbyś zachować za pomocą nexus_backup_keep_rotations (domyślnie 4).

Podczas używania rotacji, jeśli chcesz zaoszczędzić dodatkowe miejsce na dysku podczas procesu tworzenia kopii zapasowej,
Możesz ustawić nexus_backup_rotate_first: true. To ustawi wstępną rotację/usunięcie przed utworzeniem kopii zapasowej. Domyślnie rotacja odbywa się po utworzeniu kopii zapasowej. Zauważ, że w tym przypadku stare kopie zapasowe
zostaną usunięte przed utworzeniem bieżącej kopii zapasowej.

Procedura przywracania

Uruchom playbook z parametrem -e nexus_restore_point=
(na przykład, 2017-12-17-21-00-00 dla 17 grudnia 2017 o 21:00

Usunięcie nexus

Ostrzeżenie: to całkowicie usunie bieżące dane. Upewnij się, że wykonałeś kopię zapasową wcześniej, jeśli to konieczne.

Użyj zmiennej nexus_purge, jeśli potrzebujesz zacząć od zera i ponownie zainstalować instancję nexus z usunięciem wszystkich danych.

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

Zmiana hasła administratora po pierwszej instalacji

    nexus_default_admin_password: 'admin123'

To nie powinno być zmieniane w twoim playbooku. Ta zmienna jest wypełniana standardowym hasłem administratora Nexus podczas pierwszej instalacji i zapewnia, że możemy zmienić hasło administratora na nexus_admin_password.

Jeśli chcesz zmienić hasło administratora po pierwszej instalacji, możesz tymczasowo ustawić je na stare hasło z linii poleceń. Po zmianie nexus_admin_password w swoim playbooku możesz uruchomić:

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

Kanał Telegram o Nexus Sonatype: https://t.me/ru_nexus_sonatype

Tylko zarejestrowani użytkownicy mogą brać udział w ankiecie. Zaloguj się, proszę.

Z jakich repozytoriów artefaktów korzystasz?

  • Sonatype Nexus darmowy

  • Sonatype Nexus płatny

  • Artifactory darmowy

  • Artifactory płatny

  • Harbor

  • Pulp

Zagłosowało 9 użytkowników. Wstrzymało się 3 użytkowników.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster