Кодтық тәсіл ретінде инфрақұрылымды пайдаланып Nexus Sonatype орнату және конфигурациялау

Sonatype Nexus – әзірлеушілер Java (Maven) тәуелділіктерін, Docker, Python, Ruby, NPM, Bower кескіндерін, RPM пакеттерін, gitlfs, Apt, Go, Nuget проксилерін, сақтау және басқару және бағдарламалық қамтамасыз ету қауіпсіздігін тарата алатын біріктірілген платформа.

Сізге Sonatype Nexus не үшін қажет?

  • Жеке артефактілерді сақтау үшін;
  • Интернеттен жүктеп алынған артефактілерді кэштеу үшін;

Негізгі Sonatype Nexus бумасында қолдау көрсетілетін артефактілер:

  • Java, Maven (құмыра)
  • Докер
  • Python (пип)
  • Рубин (асыл тас)
  • NPM
  • Бауыр
  • Юм (айн/мин)
  • gitlfs
  • шикі
  • Апт (деб)
  • Go
  • Нугет

Қауымдастық қолдайтын артефактілер:

  • композитор
  • Conan
  • CPAN
  • ELPA
  • Хельм
  • P2
  • R

арқылы Sonatype Nexus орнату https://github.com/ansible-ThoTeam/nexus3-oss

талаптар

  • Интернетте ansible пайдалану туралы оқыңыз.
  • Ansible орнатыңыз pip install ansible ойын кітапшасы жұмыс істейтін жұмыс станциясында.
  • Орнату geerlingguy.java ойын кітапшасы жұмыс істейтін жұмыс станциясында.
  • Орнату geerlingguy.apache ойын кітапшасы жұмыс істейтін жұмыс станциясында.
  • Бұл рөл CentOS 7, Ubuntu Xenial (16.04) және Bionic (18.04), Debian Jessie және Stretch жүйелерінде сыналған.
  • jmespath Кітапхана ойын кітабы жұмыс істейтін жұмыс станциясында орнатылуы керек. Орнату үшін: sudo pip install -r requirements.txt
  • Ойын кітабы файлын (төмендегі мысал) nexus.yml файлына сақтаңыз
  • Nexus орнатуын іске қосыңыз ansible-playbook -i host nexus.yml

Maven (java), Docker, Python, Ruby, NPM, Bower, RPM және gitlfs репозитарийлерімен LDAP жоқ nexus орнатуға арналған ansible-playbook мысалы.

---
- 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 орнату және конфигурациялау

Кодтық тәсіл ретінде инфрақұрылымды пайдаланып Nexus Sonatype орнату және конфигурациялау

Айнымалы рөлдер

Рөл айнымалылары

Әдепкі мәндері бар айнымалылар (қараңыз 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 уақыт белдеуінің атауы, ол nexus_scheduled тапсырмалары үшін келесі cron өрнектерімен бірге пайдалы болуы мүмкін.

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 барлық конфигурацияны, репозиторийлерді және жүктелген артефактілерді қамтиды. Теңшелетін блоктар қоймасының жолдары 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 үйме жадын ұсынылған мәндерден жоғарылату ұсынылмайды. Бұл іс жүзінде керісінше әсер етуі мүмкін, бұл операциялық жүйе үшін қажетсіз жұмысты тудырады.

Әкімші құпия сөзі

    nexus_admin_password: 'changeme'

Орнату үшін «әкімші» тіркелгісінің құпия сөзі. Бұл тек бірінші әдепкі орнатуда жұмыс істейді. Рөлді пайдаланып оны кейінірек өзгерткіңіз келсе, [Алғашқы орнатудан кейін әкімші құпия сөзін өзгерту] (# өзгерту-әкімші-құпия сөз-бірінші орнатудан кейін) бөлімін қараңыз.

Құпия сөзді ойын кітапшасында анық мәтін ретінде сақтамай, [ansible-vault encryption] пайдалану ұсынылады (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

Nexus данасы өз клиенттеріне қолжетімді болатын толық жарамды домен атауы және схемасы (https немесе http).

Бұл рөл үшін 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 }}"

Бұл айнымалы мәндер қамтамасыз ету үшін рөлдің Nexus API интерфейсіне қосылу жолын басқарады.
Тек озық пайдаланушылар үшін. Сіз бұл әдепкі параметрлерді өзгерткіңіз келмейтін шығар

Кері проксиді орнату

    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, осылайша емес сыртқы IP мекенжайынан HTTP порты 8081 арқылы тікелей қол жеткізуге болады.

Қолданылатын әдепкі хост атауы 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_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

Nexus жүйесінде жасау үшін жергілікті (LDAP емес) пайдаланушылар/тіркелгілер тізімі.

Nexus жүйесінде жасалатын жергілікті (LDAP емес) пайдаланушылар/есептік жазбалар тізімі.

      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 бастапқы әдепкі конфигурациясынан репозиторийлерді жойыңыз. Бұл қадам тек бірінші рет орнату кезінде орындалады (қашан nexus_data_dir бос екені анықталды).

Nexus үшін әдепкі әдепкі конфигурациядан репозиторийлерді жою. Бұл қадам тек бірінші орнату кезінде орындалады (қашан nexus_data_dir бос).

    nexus_delete_default_blobstore: false

Nexus орнату бастапқы әдепкі конфигурациясынан әдепкі blobstore файлын жойыңыз. Бұл жағдайда ғана жасауға болады nexus_delete_default_repos: true және барлық конфигурацияланған репозиторийлерде (төменде қараңыз) анық blob_store: custom. Бұл қадам тек бірінші рет орнату кезінде орындалады (қашан nexus_data_dir бос екені анықталды).

Blob жадын жою (екілік артефактілер) бастапқы конфигурациядан әдепкі бойынша өшірілген. Блоб қоймасын (екілік артефактілерді) жою үшін өшіріңіз 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 құру. Blobstore жолы мен репозиторий blobstore бастапқы жасалғаннан кейін жаңартылмайды (мұндағы кез келген жаңарту қайта қамтамасыз ету кезінде еленбейді).

S3 жүйесінде blobstore конфигурациялау ыңғайлылық ретінде қамтамасыз етілген және трависте орындайтын автоматтандырылған сынақтардың бөлігі емес. S3 жүйесінде сақтау тек AWS жүйесінде орналастырылған даналар үшін ұсынылатынын ескеріңіз.

Жасау Blobstores. Сақтау жолы мен сақтау репозиторийін бастапқы жасаудан кейін жаңарту мүмкін емес (қайта орнатылған кезде мұндағы кез келген жаңарту еленбейді).

S3 жүйесінде blob қоймасын орнату ыңғайлылық ретінде қамтамасыз етілген. 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"

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 және 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-тен басқа репозиторийлердің басқа түрлерін пайдаланғыңыз келсе, белгілі бір қауіпсіздік аумақтарын қосу қажет болуы мүмкін екенін ескеріңіз. Бұл әдепкі бойынша жалған

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # required for docker anonymous access

Қашықтағы пайдаланушы аймағын пайдалану арқылы қосуға болады

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 құру тапсырмасының GUI ішіндегі құсбелгілер).

Сақтық көшірмелер

      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).
Мәліметтерді [осы тапсырма үшін керемет үлгіні](templates/backup.groovy.j2) қараңыз.
Бұл жоспарланған тапсырма басқалардан тәуелсіз nexus_scheduled_tasksқайсысың
ойын дәптеріңізде хабарлаңыз.

Сақтық көшірмелерді айналдыру/жою қажет болса, орнатыңыз nexus_backup_rotate: true және пайдаланып сақтағыңыз келетін сақтық көшірмелердің санын конфигурациялаңыз nexus_backup_keep_rotations (әдепкі 4).

Айналдыруды пайдаланған кезде, сақтық көшірме жасау кезінде қосымша дискілік кеңістікті сақтағыңыз келсе,
Орнатуға болады nexus_backup_rotate_first: true. Бұл сақтық көшірме жасау алдында алдын ала айналдыруды/жоюды конфигурациялайды. Әдепкі бойынша, айналу сақтық көшірме жасалғаннан кейін орын алады. Бұл жағдайда ескі сақтық көшірмелер болатынын ескеріңіз
ағымдағы сақтық көшірме жасалғанға дейін жойылады.

Қалпына келтіру процедурасы

Параметрмен ойнату кітабын іске қосыңыз -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(мысалы, 2017-12-17-21-00-00, 17 жылғы 2017 желтоқсан 21:00

Нексус жойылуда

Ескерту: Бұл ағымдағы деректеріңізді толығымен жояды. Қажет болса, сақтық көшірмені ертерек жасауды ұмытпаңыз

Айнымалы мәнді пайдаланыңыз nexus_purgeнөлден қайта іске қосу және барлық деректер жойылған nexus данасын қайта орнату қажет болса.

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

Бірінші орнатудан кейін әкімші құпия сөзін өзгертіңіз

    nexus_default_admin_password: 'admin123'

Бұл ойын кітапшаңызда өзгертілмеуі керек. Бұл айнымалы мән бірінші рет орнатылған кезде әдепкі Nexus әкімші құпия сөзімен толтырылады және әкімші құпия сөзін келесіге өзгертуге болады. nexus_admin_password.

Бірінші орнатудан кейін әкімші құпия сөзін өзгерткіңіз келсе, оны пәрмен жолынан ескі құпия сөзге уақытша өзгертуге болады. Өзгергеннен кейін nexus_admin_password ойын кітабында сіз келесі әрекеттерді орындай аласыз:

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

Nexus Sonatype-тегі Telegram арнасы: https://t.me/ru_nexus_sonatype

Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. Кіру, өтінемін.

Сіз қандай артефакт репозиторийлерін пайдаланасыз?

  • Sonatype Nexus тегін

  • Sonatype Nexus ақылы

  • Артефактура тегін

  • Артефакторлық ақылы

  • айлақ

  • целлюлоза

9 пайдаланушы дауыс берді. 3 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру