Ўстаноўка і настройка 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)
  • Докер
  • Python (pip)
  • Ruby (gem)
  • NPM
  • Бауэр
  • Yum (rpm)
  • gitlfs
  • Сыравіна
  • Apt (deb)
  • Go
  • Нагет

Артэфакты, якія падтрымліваюцца супольнасцю:

  • кампазітар
  • Конан
  • CPAN
  • ELPA
  • шлем
  • 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/18.04) and Bionic (XNUMX/XNUMX), Debian Jessie and 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: 'Read & Browse access to all repos'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Deployments to company-project'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # maps to the LDAP group
        name: developers
        description: All developers
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # used as key to update
        first_name: Jenkins
        last_name: CI
        email: [email protected]
        password: "s3cr3t"
        roles:
          - Developpers # role ID here
    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. Change nexus_config_yum to true for create yum repository
    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. Change nexus_config_npm to true for create npm repository
    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. Change nexus_config_docker to true for create docker repository
    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. Change nexus_config_bower to true for create bower repository
    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. Change nexus_config_pypi to true for create pypi repository
    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. Change nexus_config_rubygems to true for create rubygems repository
    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. Change nexus_config_gitlfs to true for create gitlfs repository
    nexus_config_gitlfs: true
    nexus_repos_gitlfs_hosted:
      - name: gitlfs-hosted

  roles:
    - { role: geerlingguy.java }
    # Debian/Ubuntu only
    # - { 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 only
    - { 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

Пераменныя ролі

Role Variables

Зменныя са значэннямі па змаўчанні (гл. default/main.yml):

General variables

    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: "[email protected]"
    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 (па змаўчанні) вышэйзгаданыя сертыфікаты павінны існаваць у вашай дырэкторыі 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 }}"

httpd_ssl_cert_chain_file_location з'яўляецца неабавязковым і павінен быць пакінуты неўстаноўленым, калі вы не хочаце настройваць файл ланцужкі

    httpd_default_admin_email: "[email protected]"

Усталяваць адрас электроннай пошты адміністратара па змаўчанні

Канфігурацыя LDAP

Злучэнні LDAP і вобласць бяспекі па змаўчанні адключаныя

    nexus_ldap_realm: false
    ldap_connections: []

Злучэнні LDAP, кожны элемент выглядае наступным чынам:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'My Company LDAP' # used as a key to update the ldap config
        ldap_protocol: 'ldaps' # ldap or ldaps
        ldap_hostname: 'ldap.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false # Wether or not to use certs in the nexus trust store
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_auth: 'none' # or simple
        ldap_auth_username: 'username' # if auth = simple
        ldap_auth_password: 'password' # if auth = simple
        ldap_user_base_dn: 'ou=users'
        ldap_user_filter: '(cn=*)' # (optional)
        ldap_user_object_class: 'inetOrgPerson'
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_user_subtree: false
        ldap_map_groups_as_roles: false
        ldap_group_base_dn: 'ou=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 }}" # better keep passwords in an 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_user_subtree: false

Прыклад канфігурацыі 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 }}" # better keep passwords in an 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 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 }}" # better keep passwords in an 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 # used as key to update a privilege
        # type: <one of application, repository-admin, repository-content-selector, repository-view, script or wildcard>
        description: 'Read & Browse access to all repos'
        repository: '*'
        actions: # can be add, browse, create, delete, edit, read or  * (all)
          - read
          - browse
        # pattern: pattern
        # domain: domain
        # script_name: name

Спіс прывілей для наладкі. Паглядзіце дакументацыю і графічны інтэрфейс, каб праверыць, якія зменныя павінны быць устаноўлены ў залежнасці ад тыпу прывілеі.

Гэтыя элементы аб'ядноўваюцца з наступнымі значэннямі па змаўчанні:

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

Ролі (усярэдзіне Nexus маецца ўвазе)

    nexus_roles:
      - id: Developpers # can map to a LDAP group id, also used as a key to update a role
        name: developers
        description: All developers
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # references to other role names

Спіс роляў для наладкі.

Карыстальнікі

    nexus_local_users: []
      # - username: jenkins # used as key to update
      #   state: present # default value if ommited, use 'absent' to remove user
      #   first_name: Jenkins
      #   last_name: CI
      #   email: [email protected]
      #   password: "s3cr3t"
      #   roles:
      #     - developers # role ID

Local (non-LDAP) users/accounts list для стварэння ў nexus.

Спіс лакальных (не LDAP) карыстальнікаў/уліковых запісаў для стварэння ў Nexus.

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

Мапінг Ldap карыстальнікаў/роляў. Стан absent выдаліць ролі з існуючага карыстальніка, калі ён ужо існуе.
Карыстальнікі Ldap не выдаляюцца. Спроба ўсталяваць ролю для неіснуючага карыстальніка прывядзе да памылкі.

Селектары кантэнту

  nexus_content_selectors:
  - name: docker-login
    description: Selector for docker login privilege
    search_expression: format=="docker" and path=~"/v2/"

Для атрымання дадатковай інфармацыі аб селектары кантэнту гл. Дакументацыю.

Каб выкарыстоўваць селектар кантэнту, дадайце новы прывілей з type: repository-content-selector і адпаведнымcontentSelector

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Login to Docker registry'
  repository: '*'
  actions:
  - read
  - browse

Blobstores і рэпазітары

    nexus_delete_default_repos: false

Вылучыце рэпазітары ад nexus install initial default configuration. Гэта step есць толькі executed on first-time install (when nexus_data_dir has been detectated empty).

Выдаленне рэпазітароў з зыходнай канфігурацыі па змаўчанні для Nexus. Гэты крок выконваецца толькі пры першай усталёўцы (калі nexus_data_dir пусты).

    nexus_delete_default_blobstore: false

Вылучыце некаторую blobstore з nexus install initial default configuration. Гэта можа быць толькі калі nexus_delete_default_repos: true and all configured repositories (by below) have an explicit blob_store: custom. Гэта step есць толькі executed on first-time install (when nexus_data_dir has been detectated empty).

Выдаленне сховішчы блобаў (бінарных артэфактаў) выключана па змаўчанні з зыходнай канфігурацыі. Для выдалення сховішчы блобаў (бінарных артэфактаў) выключыце nexus_delete_default_repos: true. Гэты крок выконваецца толькі пры першай усталёўцы (калі nexus_data_dir пусты).

    nexus_blobstores: []
    # example blobstore item :
    # - 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 to create. Кропкавая палавая канструкцыя і рэпазітарная кніжная крама не павінна быць пабудавана пасля пачатковай генерацыі (как пачатак яе можна было б не заўважыць на выкананні).

Сістэма Blobstore на S3 з'яўляецца паслугай і не з'яўляецца часткай аўтаматычных выпрабаванняў, якія бяруць па трэві. Звярніце ўвагу, што вяртанне на S3 з'яўляецца толькі recommended для instances deployed on 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

Вышэй прыклад канфігурацыі проксі-сервер Мэйвэн.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # one of "allow", "allow_once" or "deny"

Спецыяліст hosted repositories configuration. Негатыўны cache config з'яўляецца аптымальным і будзе няпэўным, каб аднавіць значэнне, калі не забіты.

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

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

Канфігурацыя групы Мэйвэн.

Усе тры тыпу рэпазітара аб'ядноўваюцца з наступнымі значэннямі па змаўчанні:

    _nexus_repos_maven_defaults:
      blob_store: default # Note : cannot be updated once the repo has been created
      strict_content_validation: true
      version_policy: release # release, snapshot or mixed
      layout_policy: strict # strict or permissive
      write_policy: allow_once # one of "allow", "allow_once" or "deny"
      maximum_component_age: -1  # Nexus gui default. For proxies only
      maximum_metadata_age: 1440  # Nexus gui default. For proxies only
      negative_cache_enabled: true # Nexus gui default. For proxies only
      negative_cache_ttl: 1440 # Nexus gui default. For proxies only

Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS і памяшканне рэпазітарных тыпаў:
убачыць defaults/main.yml for these options:

Сховішчы 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  # required for docker anonymous access

Remote User Realm таксама можа быць уключана з дапамогай

nexus_rut_auth_realm: true

і загаловак можа быць настроены шляхам вызначэння

nexus_rut_auth_header: "CUSTOM_HEADER"

Запланаваныя задачы

    nexus_scheduled_tasks: []
    #  #  Example task to compact blobstore :
    #  - name: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: [email protected]  # optional
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # all task attributes are stored as strings by nexus internally
    #  #  Example task to purge maven snapshots
    #  - name: Purge-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: [email protected]  # optional
    #    taskProperties:
    #      repositoryName: "*"  # * for all repos. Change to a repository name if you only want a specific one
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Example task to purge unused docker manifest and images
    #  - name: Purge unused docker manifests and images
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: [email protected]  # optional
    #    taskProperties:
    #      repositoryName: "*"  # * for all repos. Change to a repository name if you only want a specific one
    #  #  Example task to purge incomplete docker uploads
    #  - name: Purge incomplete docker uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: [email protected]  # optional
    #    taskProperties:
    #      age: "24"

Запланаваныя задачы для наладкі. typeId і спецыфічныя для задачыtaskProperties/booleanTaskProperties можна адгадаць альбо:

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

Уласцівасці задачы павінны быць абвешчаныя ў правільным блоку yaml у залежнасці ад іх тыпу:

  • taskProperties для ўсіх радковых уласцівасцяў (т. е. імёнаў рэпазітароў, імёнаў сховішчаў, перыядаў часу …).
  • booleanTaskProperties для ўсіх лагічных уласцівасцяў (т. е. у асноўным чекбоксы ў графічным інтэрфейсе задачы стварэння нексуса).

Рэзервовыя копіі

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # See cron expressions definition in nexus create task gui
      nexus_backup_dir: '/var/nexus-backup'
      nexus_restore_log: '{{ nexus_backup_dir }}/nexus-restore.log'
      nexus_backup_rotate: false
      nexus_backup_rotate_first: false
      nexus_backup_keep_rotations: 4  # Keep 4 backup rotation by default (current + last 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=<YYYY-MM-dd-HH-mm-ss>
(напрыклад, 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 у вашай гульнявой кнізе вы можаце запусціць:

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 платны

  • Гавань

  • Пульпа

Прагаласавалі 9 карыстальнікаў. Устрымаліся 3 карыстальніка.

Крыніца: habr.com

Дадаць каментар