Инсталиране и настройване на Nexus Sonatype, използвайки подхода infrastructure as code

Sonatype Nexus – интегрирана платформа, която позволява на разработчиците да проксирват, съхраняват и управляват зависимости на Java (Maven), Docker образи, Python, Ruby, NPM, Bower, RPM пакети, gitlfs, Apt, Go, Nuget и също така да разпространяват своя софтуер.

Защо е нужен Sonatype Nexus?

  • За съхранение на частни артефакти;
  • За кеширане на артефакти, които се изтеглят от интернет;

Поддържани артефакти в основната версия на Sonatype Nexus:

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

Поддържани артефакти от общността:

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

Инсталиране на Sonatype Nexus с помощта на https://github.com/ansible-ThoTeam/nexus3-oss

Изисквания

  • Прочетете за използването на ansible в интернет.
  • Инсталирайте ansible pip install ansible на работната станция, където се изпълнява playbook.
  • Инсталирайте geerlingguy.java на работната станция, където се изпълнява playbook.
  • Инсталирайте geerlingguy.apache на работната станция, където се изпълнява playbook.
  • Тази роля е тествана на CentOS 7, Ubuntu Xenial (16.04) и Bionic (18.04), Debian Jessie и Stretch
  • jmespath библиотеката трябва да бъде инсталирана на работната станция, където се изпълнява playbook. За инсталиране изпълнете sudo pip install -r requirements.txt
  • Запазете файла на playbook (пример по-долу) в файла nexus.yml
  • Стартирайте инсталацията на nexus ansible-playbook -i host nexus.yml

Пример ansible-playbook за инсталиране на nexus без LDAP с репозитории Maven (java), Docker, Python, Ruby, NPM, Bower, RPM и 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: 'Четене и преглед на всички хранилища'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Разглеждане на проект'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # картографиране към LDAP групата
        name: developers
        description: Всички разработчици
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # използва се като ключ за обновление
        first_name: Jenkins
        last_name: CI
        email: support@company.com
        password: "s3cr3t"
        roles:
          - Developpers # ID на ролята тук
    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. Променете nexus_config_yum на true, за да създадете 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. Променете nexus_config_npm на true, за да създадете 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. Променете nexus_config_docker на true, за да създадете 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. Променете nexus_config_bower на true, за да създадете 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. Променете nexus_config_pypi на true, за да създадете 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. Променете nexus_config_rubygems на true, за да създадете 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. Променете nexus_config_gitlfs на true, за да създадете gitlfs хранилище
    nexus_config_gitlfs: true
    nexus_repos_gitlfs_hosted:
      - name: gitlfs-hosted

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

Скрийншотове:

Инсталиране и настройване на Nexus Sonatype, използвайки подхода infrastructure as code

Инсталиране и настройване на Nexus Sonatype, използвайки подхода infrastructure as code

Променливи на роля

Променливи на роля

Променливи със стойности по подразбиране (вж. default/main.yml):

Общи променливи

    nexus_version: ''
    nexus_timezone: 'UTC'

По подразбиране ролята ще инсталира последната налична версия на Nexus. Можете да зададете конкретна версия, като промените променливата nexus_version. Вижте наличните версии на https://www.sonatype.com/download-oss-sonatype.

Ако промените версията на по-нова, ролята ще се опита да обнови инсталирания Nexus.

Ако използвате по-стара версия на Nexus от последната, трябва да се уверите, че не използвате функции, които не са налични в инсталираното издание (например, разполагането на yum хранилища е налично за Nexus над 3.8.0, git lfs repo за Nexus над 3.3.0 и т.н.)

nexus timezone е името на часовата зона Java, което може да бъде полезно в съчетание с изброените по-долу изрази cron за nexus_scheduled tasks.

Порт на Nexus и контекстен път

    nexus_default_port: 8081
    nexus_default_context_path: '\/'

Портът и контекстният път на Java процеса на свързване. nexus_default_context_path трябва да съдържа наклонена черта, когато е настроен, например: nexus_default_context_path: '/nexus/'.

Потребител и група за ОС Nexus

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Потребителят и групата, използвани за притежание на файлове Nexus и стартиране на услугата, ще бъдат създадени от ролята, ако не съществуват.

    nexus_os_user_home_dir: '/home/nexus'

Разрешете промяната на домашната директория по подразбиране за потребителя nexus

Каталози на инстанции Nexus

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

Каталози на Nexus.

  • nexus_installation_dir съдържа инсталирани изпълними файлове
  • nexus_data_dir съдържа цялата конфигурация, хранилища и изтеглени артефакти. Персонализирани пътища за blobstores nexus_data_dir могат да бъдат конфигурирани, вижте по-долу nexus_blobstores.
  • nexus_tmp_dir съдържа всички временни файлове. Пътят по подразбиране за RedHat беше преместен от /tmp за преодоляване на потенциални проблеми с автоматичните процедури за почистване. Вижте #168.

Конфигуриране на използването на паметта на Nexus JVM

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

Това са настройките по подразбиране за Nexus. Моля, не променяйте тези стойности Ако не сте прочели раздела за паметовите изисквания на Nexus и не разбирате какво правят.

Като второ предупреждение, ето извадка от споменатия документ:

Не е препоръчително да увеличавате размера на JVM heap паметта извън препоръчаните стойности, в опит да повишите производителността. Това на практика може да има противоположен ефект, довеждайки до ненужна работа на операционната система.

Администраторска парола

    nexus_admin_password: 'changeme'

Паролата на акаунта 'admin' за конфигурация. Това работи само при първоначалната инсталация по подразбиране. Моля, вижте [Промяна на администраторската парола след първоначална инсталация](# change-admin-password-after-first-install), ако искате да я промените по-късно чрез роля.

Категорично не се препоръчва да съхранявате паролата си в плейбука в открит текст, а да използвате [шифроване ansible-vault](https://docs.ansible.com/ansible/latest/user_guide/vault.html) (или вградена, или в отделен файл, зареден, например, с помощта на include_vars)

Анонимен достъп по подразбиране

    nexus_anonymous_access: false

Анонимният достъп по подразбиране е деактивиран. Повече информация относно анонимния достъп.

Публично име на хоста

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Пълното домейн име и схема (https или http), по която инстанцията Nexus ще бъде достъпна за своите клиенти.

API достъп за тази роля

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

Тези променливи контролират начина, по който ролята се свързва с API Nexus за предоставяне.
Само за напреднали потребители. Най-вероятно не искате да променяте тези настройки по подразбиране

Конфигурация на обратен прокси

    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

Инсталирайте Обратен прокси сървър SSL.
За това е необходимо да инсталирате httpd. Забележка: когато за httpd_setup_enable е зададена стойностtrue, nexus се свързва с 127.0.0.1:8081, така че не да бъде директно достъпен през HTTP порт 8081 с външен IP адрес.

Използваното име на хоста по подразбиране е nexus_public_hostname. Ако искате различни имена по някаква причина, можете да зададете httpd_server_name с друга стойност.

С httpd_copy_ssl_files: true (по подразбиране) горепосочените сертификати трябва да съществуват в директорията на вашия плейбук и ще бъдат копирани на сървъра и конфигурирани в apache.

Ако искате да използвате съществуващи сертификати на сървъра, задайте httpd_copy_ssl_files: false и предоставете следните променливи:

    # 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 является опциональным и должен оставаться неустановленным, если вы не хотите настраивать файл цепочки

    httpd_default_admin_email: "admin@example.com"

Установить адрес электронной почты администратора по умолчанию

Конфигурация LDAP

Соединения LDAP и область безопасности по умолчанию отключены

    nexus_ldap_realm: false
    ldap_connections: []

Соединения LDAP, каждый элемент выглядит следующим образом:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'My Company LDAP' # используется как ключ для обновления ldap конфигурации
        ldap_protocol: 'ldaps' # ldap или ldaps
        ldap_hostname: 'ldap.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false # Использовать ли сертификаты в доверительном хранилище nexus
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_auth: 'none' # или simple
        ldap_auth_username: 'username' # если auth = simple
        ldap_auth_password: 'password' # если auth = simple
        ldap_user_base_dn: 'ou=users'
        ldap_user_filter: '(cn=*)' # (по желанию)
        ldap_user_object_class: 'inetOrgPerson'
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_user_subtree: false
        ldap_map_groups_as_roles: false
        ldap_group_base_dn: 'ou=groups'
        ldap_group_object_class: 'posixGroup'
        ldap_group_id_attribute: 'cn'
        ldap_group_member_attribute: 'memberUid'
        ldap_group_member_format: '${username}'
        ldap_group_subtree: false

Пример конфигурации LDAP для анонимной аутентификации (анонимная привязка), это также «минимальная» конфигурация:

    nexus_ldap_realm: true
    ldap_connection:
      - ldap_name: 'Simplest LDAP config'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_search_base: 'dc=mycompany,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'

Пример конфигурации LDAP для простой аутентификации (с использованием учетной записи DSA):

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP config with 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 }}" # лучше хранить пароли в хранилище ansible
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_user_base_dn: 'ou=users'
        ldap_user_object_class: 'inetOrgPerson'
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_user_subtree: false

Пример конфигурации LDAP для простой аутентификации (с использованием учетной записи DSA) + группы, сопоставленные как роли:

    nexus_ldap_realm: true
    ldap_connections
      - ldap_name: 'LDAP конфигурация с 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 }}" # по возможности храните пароли в хранилище 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

Пример конфигурации LDAP за проста аутентификация (с използване на DSA акаунт) + групи, динамично свързани като роля:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP конфигурация с 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 }}" # по възможност, съхранявайте паролите в хранилище 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'

Привилегии

    nexus_privileges:
      - name: all-repos-read # използва се като ключ за актуализиране на привилегия
        # type: 
        description: 'Достъп за четене и разглеждане до всички репозитории'
        repository: '*'
        actions: # може да бъде add, browse, create, delete, edit, read или * (всички)
          - read
          - browse
        # pattern: pattern
        # domain: domain
        # script_name: name

Списък привилегии за конфигуриране. Вижте документацията и графичния интерфейс, за да проверите кои променливи трябва да бъдат зададени в зависимост от типа на привилегията.

Тези елементи се комбинират със следните стойности по подразбиране:

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

Роли (в контекста на Nexus)

    nexus_roles:
      - id: Developpers # може да се свърже с LDAP група, също се използва като ключ за актуализиране на роля
        name: developers
        description: Всички разработчици
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # препратки към имена на други роли

Списък роли за конфигуриране.

Потребители

    nexus_local_users: []
      # - username: jenkins # използва се като ключ за актуализиране
      #   state: present # стойност по подразбиране, ако бъде пропусната, използвайте 'absent' за премахване на потребителя
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - developers # id на роля

Списък с локални (не-LDAP) потребители/акаунти за създаване в nexus.

Списък на локалните (не LDAP) потребители/акаунти за създаване в Nexus.

      nexus_ldap_users: []
      # - име: j.doe
      #   статус: present
      #   роли:
      #     - "nx-admin"

Картографиране на Ldap потребители/роли. Състояние absent изтрива роли от съществуващ потребител, ако такъв вече съществува.
Потребителите на Ldap не се изтриват. Опит за задаване на роля на несъществуващ потребител ще доведе до грешка.

Селектори за съдържание

  nexus_content_selectors:
  - име: docker-login
    описание: Селектор за привилегия за docker вход
    search_expression: format=="docker" and path=~"/v2/"

За допълнителна информация относно селектора за съдържание вижте Документацията.

За да използвате селектора за съдържание, добавете нова привилегия с type: repository-content-selector и съответнияcontentSelector

- име: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  описание: 'Вход в регистъра на Docker'
  хранилище: '*'
  действия:
  - четене
  - разглеждане

Blobstores и хранилища

    nexus_delete_default_repos: false

Изтрийте хранилищата от първоначалната конфигурация на инсталацията Nexus. Тази стъпка се изпълнява само при първа инсталация (когато nexus_data_dir е открита празна).

Изтриване на хранилищата от началната конфигурация по подразбиране за Nexus. Тази стъпка се изпълнява само при първа инсталация (когато nexus_data_dir е празна).

    nexus_delete_default_blobstore: false

Изтрийте хранилището по подразбиране от първоначалната конфигурация на инсталацията Nexus. Това може да се направи само ако nexus_delete_default_repos: true и всички конфигурирани хранилища (виждате по-долу) имат изрична blob_store: custom. Тази стъпка се изпълнява само при първа инсталация (когато nexus_data_dir е открита празна).

Изтриването на хранилището на блобове (бинарни артефакти) е деактивирано по подразбиране в началната конфигурация. За да изтриете хранилището на блобове (бинарни артефакти), деактивирайте nexus_delete_default_repos: true. Тази стъпка се изпълнява само при първа инсталация (когато nexus_data_dir е празна).

    nexus_blobstores: []
    # пример елемент на хранилище :
    # - име: separate-storage
    #   type: file
    #   path: /mnt/custom/path
    # - име: s3-blobstore
    #   type: S3
    #   config:
    #     bucket: s3-blobstore
    #     accessKeyId: "{{ VAULT_ENCRYPTED_KEY_ID }}"
    #     secretAccessKey: "{{ VAULT_ENCRYPTED_ACCESS_KEY }}"

Хранилища за създаване. Пътят към хранилището и хранилището на репозитория не могат да бъдат актуализирани след първоначалното създаване (всяка актуализация тук ще бъде игнорирана при повторно предоставяне).

Конфигурирането на хранилище на S3 е предоставено за удобство и не е част от автоматизираните тестове, които изпълняваме в travis. Обърнете внимание, че съхранението на S3 се препоръчва само за инстанции, разположени на AWS.

Създаване Хранилища. Пътят към хранилището и хранилището на репозитории не може да бъде актуализиран след първоначалното създаване (всяка актуализация тук ще бъде игнорирана при повторно инсталиране).

Настройката на хранилището на BLOB обекти на S3 се предоставя за удобство. Имайте предвид, че съхранението на S3 се препоръчва само за инстанции, разположени на 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
    # пример с логином/паролем:
    # - 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

Пример конфигурации выше прокси сървър Maven.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # один из "allow", "allow_once" или "deny"

Maven размещенные репозитории конфигурация. Настройка отрицательного кэша является необязательной и будет иметь вышеуказанные значения по умолчанию, если не указано иное.

Конфигурация размещенных (hosted) репозиториев Maven. Конфигурация отрицательного кэша (-1) является необязательной и по умолчанию будет использовать указанные выше значения, если не указано.

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

Конфигурация групи Maven.

Все три типа репозиториев объединяются со следующими значениями по умолчанию:

    _nexus_repos_maven_defaults:
      blob_store: default # Примечание: не может быть обновлен после создания репозитория
      strict_content_validation: true
      version_policy: release # release, snapshot или mixed
      layout_policy: strict # strict или permissive
      write_policy: allow_once # один из "allow", "allow_once" или "deny"
      maximum_component_age: -1  # По умолчанию в интерфейсе Nexus. Только для прокси
      maximum_metadata_age: 1440  # По умолчанию в интерфейсе Nexus. Только для прокси
      negative_cache_enabled: true # По умолчанию в интерфейсе Nexus. Только для прокси
      negative_cache_ttl: 1440 # По умолчанию в интерфейсе Nexus. Только для прокси

Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS и yum типы репозиториев:
виж defaults/main.yml для этих опций:

Хранилища Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS и yum по умолчанию отключены:
Вижте defaults/main.yml для этих опций:

      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

Обратите внимание, что вам может потребоваться включить определенные области безопасности, если вы хотите использовать другие типы репозиториев, кроме maven. По умолчанию false

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # требуется для анонимного доступа к docker

Remote User Realm также может быть включена с помощью

nexus_rut_auth_realm: true

и заголовок может быть настроен с помощью определения

nexus_rut_auth_header: "CUSTOM_HEADER"

Запланированные задачи

    nexus_scheduled_tasks: []
    #  #  Пример задачи для сжатия blobstore :
    #  - name: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: alerts@example.org  # по желанию
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # все атрибуты задачи хранятся как строки в nexus
    #  #  Пример задачи для очистки maven-снимков
    #  - name: Purge-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: alerts@example.org  # по желанию
    #    taskProperties:
    #      repositoryName: "*"  # * для всех репозиториев. Измените на имя репозитория, если хотите только конкретный
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Пример задачи для очистки неиспользуемого манифеста и изображений docker
    #  - name: Purge unused docker manifests and images
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: alerts@example.org  # по желанию
    #    taskProperties:
    #      repositoryName: "*"  # * для всех репозиториев. Измените на имя репозитория, если хотите только конкретный
    #  #  Пример задачи для очистки незавершенных загрузок docker
    #  - name: Purge incomplete docker uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: alerts@example.org  # по желанию
    #    taskProperties:
    #      age: "24"

Запланированные задачи за конфигуриране. typeId и специфични за задачатаtaskProperties/booleanTaskProperties можете да отгатнете или:

  • от йерархията на типовете Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • като проверявате HTML формата за създаване на задача във вашия браузър
  • от наблюдението на AJAX заявките в браузъра при ръчно конфигуриране на задачата.

Свойствата на задачата трябва да бъдат обявени в правилния блок yaml в зависимост от техния тип:

  • taskProperties за всички стрингови свойства (т.е. имена на репозитории, имена на хранилища, времеви периоди …).
  • booleanTaskProperties за всички булеви свойства (т.е. основно чекбоксове в графичния интерфейс на създаването на задача в nexus).

Резервни копия

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Вижте определенито на cron изрази в интерфейса за създаване на задачи 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  # Запазете 4 резервни копия по подразбиране (текущо + последни 3)

Резервното копие няма да бъде конфигурирано, докато не активирате nexus_backup_configure в true.
В този случай планираната задача ще бъде конфигурирана да се стартира в Nexus
с интервал, посочен в nexus_backup_cron (по подразбиране 21:00 всеки ден).
Вижте [Groovy шаблона за тази задача](templates / backup.groovy.j2) за подробна информация.
Тази планирана задача не зависи от другите nexus_scheduled_tasks, които вие
обявите в вашия playbook.

Ако искате да ротирате/изтриете резервни копия, задайте nexus_backup_rotate: true и настройте количеството резервни копия, които желаете да запазите с помощта на nexus_backup_keep_rotations (по подразбиране 4).

При използване на ротация, ако желаете да спестите допълнително дисково пространство по време на процеса на резервно копиране,
Можете да зададете nexus_backup_rotate_first: true. Това ще настрои предварително ротиране/изтриване преди резервното копие. По подразбиране ротацията се извършва след създаване на резервно копие. Имайте предвид, че в този случай старите резервни копия
ще бъдат изтрити преди текущото резервно копие да бъде направено.

Процедура по възстановяване

Стартирайте playbook с параметъра -e nexus_restore_point=
(например, 2017-12-17-21-00-00 за 17 декември 2017 в 21:00

Изтриване на nexus

Предупреждение: това напълно ще изтрие текущите данни. Убедете се, че направите резервно копие предварително, ако е необходимо

Използвайте променливата nexus_purge, ако искате да рестартирате от нулата и да преинсталирате экземпляра на nexus с изтриване на всички данни.

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

Променете паролата на администратора след първоначалното инсталиране

    nexus_default_admin_password: 'admin123'

Това не трябва да се променя във вашия playbook. Тази променлива се запълва със стандартната парола на администратор на Nexus при първоначално инсталиране и гарантира, че можем да променим паролата на администратора на nexus_admin_password.

Ако искате да промените паролата на администратора след първоначалното инсталиране, можете временно да я промените на старата парола от командния ред. След промяната nexus_admin_password във вашия playbook можете да стартирате:

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

Телеграм канал за Nexus Sonatype: https://t.me/ru_nexus_sonatype

Само регистрирани потребители могат да участват в анкетата. Влезте, моля.

С какви хранилища на артефакти работите?

  • Sonatype Nexus безплатен

  • Sonatype Nexus платен

  • Artifactory безплатен

  • Artifactory платен

  • Harbor

  • Pulp

Гласували 9 потребители. Въздържали се 3 потребителя.

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster