Инсталиране и настройка на 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: 'Разгръщания за company-project'
        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 # идентификатор на ролята тук
    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\/\n        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), ако искате да я промените по-късно с помощта на роля.

Настоятелно не се препоръчва да съхранявате паролата си в открит текст в playbook, а да използвате [шифроване на 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 е настроено наистинно, nexus свързва с 127.0.0.1:8081, така че не да бъде достъпен директно чрез HTTP порт 8081 с външен IP адрес.

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

С httpd_copy_ssl_files: true (по подразбиране) посочените сертификати трябва да съществуват във вашата директория playbook и ще бъдат копирани на сървера и конфигурирани в 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 }}"

път към сертификата за SSL на httpd е опционален и трябва да остане неустановен, ако не искате да конфигурирате файл за веригата

    httpd_default_admin_email: "admin@example.com"

Настройте имейл адреса на администратора по подразбиране

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

LDAP връзки и зоната за сигурност по подразбиране са деактивирани

    nexus_ldap_realm: false
    ldap_connections: []

LDAP връзки, всеки елемент изглежда по следния начин:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Моята компания 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: 'Най-проста LDAP конфигурация'
        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 конфигурация с 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 vault
        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 vault
        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: <една от application, repository-admin, repository-content-selector, repository-view, script или wildcard>
        description: 'Достъп за четене и разглеждане до всички репозиции'
        repository: '*'
        actions: # може да се добавя, разглежда, създава, изтрива, редактира, чете или  * (всички)
          - 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 # идентификатор на роля

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

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

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

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

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

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

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

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

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Вход в Docker регистър'
  repository: '*'
  actions:
  - read
  - browse

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: []
    # примерен елемент на хранилище :
    # - 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 за създаване. Пътят към хранилището и хранилището на репозитория не могат да бъдат обновени след първоначалното създаване (всяко обновление тук ще бъде игнорирано при повторно предоставяне).

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

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

Настройката на хранилището на 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
    # 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

По-горе е пример на конфигурация прокси-сървър 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 gui. Само за проксита
      maximum_metadata_age: 1440  # по подразбиране на Nexus gui. Само за проксита
      negative_cache_enabled: true # по подразбиране на Nexus gui. Само за проксита
      negative_cache_ttl: 1440 # по подразбиране на Nexus gui. Само за проксита

Типове хранилища 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 в истинно.
В този случай, планираната задача на сценария ще бъде конфигурирана да стартира в 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