рдХреЛрдб рджреГрд╖реНрдЯрд┐рдХреЛрдгрдХреЛ рд░реВрдкрдорд╛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ Nexus Sonatype рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИ

Sonatype Nexus рдПрдХ рдПрдХреАрдХреГрдд рдкреНрд▓реЗрдЯрдлрд░реНрдо рд╣реЛ рдЬрд╕рдХреЛ рдорд╛рдзреНрдпрдордмрд╛рдЯ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ Java (Maven) рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ, Docker, Python, Ruby, NPM, Bower рдЫрд╡рд┐рд╣рд░реВ, RPM рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ, gitlfs, Apt, Go, Nuget, рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдлреНрдЯрд╡реЗрдпрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рддрд░рдг рдЧрд░реНрди рдкреНрд░реЛрдХреНрд╕реА, рднрдгреНрдбрд╛рд░рдг рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред

рддрдкрд╛рдИрд▓рд╛рдИ Sonatype Nexus рдХрд┐рди рдЪрд╛рд╣рд┐рдиреНрдЫ?

  • рдирд┐рдЬреА рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐;
  • рдЗрдиреНрдЯрд░рдиреЗрдЯрдмрд╛рдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдПрдХрд╛ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рдХреНрдпрд╛рд╕ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐;

рдЖрдзрд╛рд░рднреВрдд Sonatype Nexus рдкреНрдпрд╛рдХреЗрдЬрдорд╛ рд╕рдорд░реНрдерд┐рдд рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ:

  • рдЬрд╛рднрд╛, рдорд╛рд╡реЗрди (рдЬрд╛рд░)
  • рдбрдХрд░
  • рдкрд╛рдЗрдерди (рдкрд┐рдк)
  • рд░реБрдмреА (рд░рддреНрди)
  • рдПрдирдкреАрдПрдо
  • рднрд╛рдиреНрд╕рд╛
  • рдпрдо (rpm)
  • gitlfs
  • рдХрдЪреНрдЪрд╛
  • рдЙрдкрдпреБрдХреНрдд (рдбреЗрдм)
  • Go
  • рдиреБрдЧреЗ

рд╕рдореБрджрд╛рдп рд╕рдорд░реНрдерд┐рдд рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ:

  • рд╕рдВрдЧреАрддрдХрд╛рд░
  • рдХрдирди
  • CPAN
  • ELPA
  • рд╣реЗрд▓рдореЗрдЯ
  • P2
  • R

рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ Sonatype Nexus рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ https://github.com/ansible-ThoTeam/nexus3-oss

рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ

  • рдЗрдиреНрдЯрд░рдиреЗрдЯрдорд╛ рдЙрддреНрддрд░рджрд╛рдпреА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдкрдвреНрдиреБрд╣реЛрд╕реНред
  • рдЙрддреНрддрд░рджрд╛рдпреА рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН 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 рдлрд╛рдЗрд▓рдорд╛ рдмрдЪрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН
  • рдиреЗрдХреНрд╕рд╕ рд╕реНрдерд╛рдкрдирд╛ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН ansible-playbook -i host nexus.yml

Maven (java), Docker, Python, Ruby, NPM, Bower, RPM рд░ gitlfs рднрдгреНрдбрд╛рд░рд╣рд░реВрд╕рдБрдЧ LDAP рдмрд┐рдирд╛ рдиреЗрдХреНрд╕рд╕ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЙрддреНрддрд░рджрд╛рдпреА-рдкреНрд▓реЗрдмреБрдХрдХреЛ рдЙрджрд╛рд╣рд░рдгред

---
- 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 рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБрд▓реЗ рд╕реНрдерд╛рдкрд┐рдд рд░рд┐рд▓рд┐рдЬрдорд╛ рдЙрдкрд▓рдмреНрдз рдирднрдПрдХрд╛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣рдиреБ рднрдПрдХреЛ рдЫреИрди рднрдиреЗрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрдкрд░реНрдЫ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, 3.8.0, git lfs repo рднрдиреНрджрд╛ рдорд╛рдерд┐рдХреЛ рдиреЗрдХреНрд╕рд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛрд╕реНрдЯрд┐рдЩ yum рднрдгреНрдбрд╛рд░рд╣рд░реВ рдЙрдкрд▓рдмреНрдз рдЫрдиреНред рей.рей.реж рдЖрджрд┐ рднрдиреНрджрд╛ рдареБрд▓реЛ рдиреЗрдХреНрд╕рд╕рдХрд╛ рд▓рд╛рдЧрд┐)

nexus timezone рдЬрд╛рднрд╛ рд╕рдордп рдХреНрд╖реЗрддреНрд░рдХреЛ рдирд╛рдо рд╣реЛ, рдЬреБрди nexus_scheduled рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рдореНрди рдХреНрд░реЛрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрд╕рдБрдЧ рд╕рдВрдпреЛрдЬрдирдорд╛ рдЙрдкрдпреЛрдЧреА рд╣реБрди рд╕рдХреНрдЫред

рдиреЗрдХреНрд╕рд╕ рдкреЛрд░реНрдЯ рд░ рд╕рдиреНрджрд░реНрдн рдорд╛рд░реНрдЧ

    nexus_default_port: 8081
    nexus_default_context_path: '/'

рдЬрд╛рднрд╛ рдЬрдбрд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдкреЛрд░реНрдЯ рд░ рд╕рдиреНрджрд░реНрдн рдорд╛рд░реНрдЧред nexus_default_context_path рдпрд╕рд▓рд╛рдИ рд╕реЗрдЯ рдЧрд░реНрджрд╛ рдЕрдЧрд╛рдбрд┐ рд╕реНрд▓реНрдпрд╛рд╢ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреБрдкрд░реНрдЫ, рдЬрд╕реНрддреИ: nexus_default_context_path: '/nexus/'.

Nexus OS рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд░ рд╕рдореВрд╣

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Nexus рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд░ рд╕реЗрд╡рд╛ рдЪрд▓рд╛рдЙрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд░ рд╕рдореВрд╣ рдПрдХ рд╣рд░рд╛рдЗрд░рд╣реЗрдХреЛ рдЫ рднрдиреЗ рднреВрдорд┐рдХрд╛рджреНрд╡рд╛рд░рд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреЗрдЫред

    nexus_os_user_home_dir: '/home/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_installation_dir рд╕реНрдерд╛рдкрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ
  • nexus_data_dir рд╕рдмреИ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди, рднрдгреНрдбрд╛рд░ рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдЕрдиреБрдХреВрд▓рди рдмреНрд▓рдмрд╕реНрдЯреЛрд░ рдорд╛рд░реНрдЧрд╣рд░реВ nexus_data_dir рдЕрдиреБрдХреВрд▓рд┐рдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рддрд▓ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН nexus_blobstores.
  • nexus_tmp_dir рд╕рдмреИ рдЕрд╕реНрдерд╛рдпреА рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред redhat рдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рд░реНрдЧ рдмрд╛рдЯ рд╕рд╛рд░рд┐рдПрдХреЛ рдЫ /tmp рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдлрд╛рдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрд╕рдБрдЧ рд╕рдореНрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╣рдЯрд╛рдЙрдиред рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН рдирдореНрдмрд░ резремреоред

Nexus JVM рдореЗрдореЛрд░реА рдкреНрд░рдпреЛрдЧ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИ

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

рдпреА Nexus рдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд╣реБрдиреНред рдХреГрдкрдпрд╛ рдпреА рдорд╛рдирд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдирдЧрд░реНрдиреБрд╣реЛрд╕реН рдкрдвреНрдиреБ рднрдПрдХреЛ рдЫреИрди рднрдиреЗ рдиреЗрдХреНрд╕рд╕ рдкреНрд░рдгрд╛рд▓реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЗрдореЛрд░реА рдЦрдгреНрдб рд░ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдХреЗ рдЧрд░реНрджреИрдЫрдиреН рдмреБрдЭреНрджреИрдирдиреНред

рджреЛрд╕реНрд░реЛ рдЪреЗрддрд╛рд╡рдиреАрдХреЛ рд░реВрдкрдорд╛, рдпрд╣рд╛рдБ рдорд╛рдерд┐рдХреЛ рдХрд╛рдЧрдЬрд╛рддрдмрд╛рдЯ рдПрдЙрдЯрд╛ рдЕрдВрд╢ рд╣реЛ:

рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд╕реБрдзрд╛рд░ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕рдорд╛ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХрд╛ рдорд╛рдирд╣рд░реВрднрдиреНрджрд╛ рдмрд╛рд╣рд┐рд░ JVM рд╣рд┐рдк рдореЗрдореЛрд░реА рдмрдврд╛рдЙрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред рдпреЛ рд╡рд╛рд╕реНрддрд╡рдорд╛ рд╡рд┐рдкрд░реАрдд рдкреНрд░рднрд╛рд╡ рд╣реБрди рд╕рдХреНрдЫ, рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд▓рд╛рдЧреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рдо рдХреЛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдкред

рдкреНрд░рд╢рд╛рд╕рдХ рдкрд╛рд╕рд╡рд░реНрдб

    nexus_admin_password: 'changeme'

рд╕реЗрдЯрдЕрдкрдХреЛ рд▓рд╛рдЧрд┐ "рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ" рдЦрд╛рддрд╛ рдкрд╛рд╕рд╡рд░реНрдбред рдпреЛ рдХреЗрд╡рд▓ рдкрд╣рд┐рд▓реЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрдерд╛рдкрдирд╛ рдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВ рднреВрдорд┐рдХрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрдЫрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ рдХреГрдкрдпрд╛ [рдкрд╣рд┐рд▓реЛ рд╕реНрдерд╛рдкрдирд╛ рдкрдЫрд┐ рдкреНрд░рд╢рд╛рд╕рдХ рдкрд╛рд╕рд╡рд░реНрдб рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБрд╣реЛрд╕реН] (# change-admin-password-after-first-install) рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред

рдкреНрд▓реЗрдмреБрдХрдорд╛ рд╕реНрдкрд╖реНрдЯ рдкрд╛рдардорд╛ рдЖрдлреНрдиреЛ рдкрд╛рд╕рд╡рд░реНрдб рднрдгреНрдбрд╛рд░рдг рдирдЧрд░реНрди, рддрд░ [рдПрдиреНрд╕рд┐рдмрд▓-рднрд▓реНрдЯ рдИрдиреНрдХреНрд░рд┐рдкреНрд╢рди] рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдХрдбрд╛ рд░реВрдкрдорд╛ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫредhttps://docs.ansible.com/ansible/latest/user_guide/vault.html) (рдЗрдирд▓рд╛рдЗрди рд╡рд╛ рдЫреБрдЯреНрдЯреИ рдлрд╛рдЗрд▓рдорд╛ рд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдЙрджрд╛рд╣рд░рдг рд╕рдорд╛рд╡реЗрд╢_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 }}"

рдпреА рдЪрд░рд╣рд░реВрд▓реЗ рдкреНрд░рд╛рд╡рдзрд╛рдирдХреЛ рд▓рд╛рдЧрд┐ 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, рдиреЗрдХреНрд╕рд╕ рд╕рдореНрдкрд░реНрдХрд╣рд░реВ 127.0.0.1:8081, рдпрд╕рд░реА рдЫреИрди рдмрд╛рд╣реНрдп рдЖрдИрдкреА рдареЗрдЧрд╛рдирд╛рдмрд╛рдЯ HTTP рдкреЛрд░реНрдЯ 8081 рдорд╛рд░реНрдлрдд рдкреНрд░рддреНрдпрдХреНрд╖ рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдпред

рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрд╕реНрдЯрдирд╛рдо рд╣реЛ nexus_public_hostnameред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдХреБрдиреИ рдХрд╛рд░рдгрд▓реЗ рдлрд░рдХ рдирд╛рдорд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рд╕реЗрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ httpd_server_name рдлрд░рдХ рдЕрд░реНрде рд╕рдВрдЧред

╨б httpd_copy_ssl_files: true (рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛) рдорд╛рдерд┐рдХрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рддрдкрд╛рдИрдВрдХреЛ рдкреНрд▓реЗрдмреБрдХ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрдиреБрдкрд░реНрдЫ рд░ рд╕рд░реНрднрд░рдорд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░рд┐рдиреЗрдЫ рд░ рдЕрдкрд╛рдЪреЗрдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдиреЗрдЫред

рдпрджрд┐ рддрдкрд╛рдЗрдБ рд╕рд░реНрднрд░рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН 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

рд╕реВрдЪреА рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░рд╣рд░реВ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ред рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рдХрд╛рд░рдХреЛ рдЖрдзрд╛рд░рдорд╛ рдХреБрди рдЪрд░рд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗрд░ рдЬрд╛рдБрдЪ рдЧрд░реНрди рдХрд╛рдЧрдЬрд╛рдд рд░ GUI рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред

рдпреА рддрддреНрд╡рд╣рд░реВ рдирд┐рдореНрди рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирд╣рд░реВрд╕рдБрдЧ рдЬреЛрдбрд┐рдПрдХрд╛ рдЫрдиреН:

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

рднреВрдорд┐рдХрд╛рд╣рд░реВ (рдиреЗрдХреНрд╕рд╕ рднрд┐рддреНрд░ рдпрд╕рдХреЛ рдорддрд▓рдм)

    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

рдиреЗрдХреНрд╕рд╕рдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕реНрдерд╛рдиреАрдп (рдЧреИрд░-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

рдмреНрд▓рдмрд╕реНрдЯреЛрд░рд╣рд░реВ рд░ рднрдгреНрдбрд╛рд░рд╣рд░реВ

    nexus_delete_default_repos: false

рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕реНрдерд╛рдкрдирд╛ рдиреЗрдХреНрд╕рд╕рдмрд╛рдЯ рднрдгреНрдбрд╛рд░рд╣рд░реВ рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реНред рдпреЛ рдЪрд░рдг рдорд╛рддреНрд░ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рд╕реНрдерд╛рдкрдирд╛ рдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫ (рдЬрдм nexus_data_dir рдЦрд╛рд▓реА рдлреЗрд▓рд╛ рдкрд░реЗрдХреЛ рдЫ)ред

Nexus рдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдмрд╛рдЯ рднрдгреНрдбрд╛рд░рд╣рд░реВ рд╣рдЯрд╛рдЙрдБрджреИред рдпреЛ рдЪрд░рдг рдкрд╣рд┐рд▓реЛ рд╕реНрдерд╛рдкрдирд╛рдХреЛ рд╕рдордпрдорд╛ рдорд╛рддреНрд░ рдЧрд░рд┐рдиреНрдЫ (рдЬрдм nexus_data_dir рдЦрд╛рд▓реА)ред

    nexus_delete_default_blobstore: false

рдиреЗрдХреНрд╕рд╕ рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдмрд╛рдЯ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдмреНрд▓рдмрд╕реНрдЯреЛрд░ рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реНред рднрдП рдорд╛рддреНрд░реИ рдпреЛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ nexus_delete_default_repos: true рд░ рд╕рдмреИ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХрд╛ рднрдгреНрдбрд╛рд░рд╣рд░реВ (рддрд▓ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН) рд╕реНрдкрд╖реНрдЯ рдЫрдиреН blob_store: customред рдпреЛ рдЪрд░рдг рдорд╛рддреНрд░ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рд╕реНрдерд╛рдкрдирд╛ рдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫ (рдЬрдм nexus_data_dir рдЦрд╛рд▓реА рдлреЗрд▓рд╛ рдкрд░реЗрдХреЛ рдЫ)ред

рдмреНрд▓рдм рднрдгреНрдбрд╛рд░рдг рд╣рдЯрд╛рдЙрдБрджреИ (рдмрд╛рдЗрдирд░реА рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ) рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдмрд╛рдЯ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдЕрд╕рдХреНрд╖рдо рдЧрд░рд┐рдПрдХреЛ рдЫред рдмреНрд▓рдм рднрдгреНрдбрд╛рд░рдг (рдмрд╛рдЗрдирд░реА рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ) рд╣рдЯрд╛рдЙрди, рдмрдиреНрдж рдЧрд░реНрдиреБрд╣реЛрд╕реН 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 }}"

рдмреНрд▓рдмрд╕реНрдЯреЛрд░рд╣рд░реВ рдмрдирд╛рдЙрдиред рдмреНрд▓рдмрд╕реНрдЯреЛрд░ рдорд╛рд░реНрдЧ рд░ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдмреНрд▓рдмрд╕реНрдЯреЛрд░ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд╕рд┐рд░реНрдЬрдирд╛ рдкрдЫрд┐ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди (рдпрд╣рд╛рдБ рдХреБрдиреИ рдкрдирд┐ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдкреБрди: рдкреНрд░рд╛рд╡рдзрд╛рдирдорд╛ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░рд┐рдиреЗрдЫ)ред

S3 рдорд╛ рдмреНрд▓рдмрд╕реНрдЯреЛрд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреЗ рд╕реБрд╡рд┐рдзрд╛рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рд╣рд╛рдореАрд▓реЗ рдЯреНрд░реНрдпрд╛рднрд┐рд╕рдорд╛ рдЪрд▓рд╛рдЙрдиреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдХреЛ рдЕрдВрд╢ рд╣реЛрдЗрдиред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ S3 рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдХреЗрд╡рд▓ AWS рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред

рд╕реГрд╖реНрдЯрд┐ рдмреНрд▓рдмрд╕реНрдЯреЛрд░рд╣рд░реВред рднрдгреНрдбрд╛рд░рдг рдорд╛рд░реНрдЧ рд░ рднрдгреНрдбрд╛рд░рдг рднрдгреНрдбрд╛рд░ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд╕рд┐рд░реНрдЬрдирд╛ рдкрдЫрд┐ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди (рдпрд╣рд╛рдБ рдХреБрдиреИ рдкрдирд┐ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдкреБрди: рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджрд╛ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░рд┐рдиреЗрдЫ)ред

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"

Maven рд╣реЛрд╕реНрдЯ рдЧрд░рд┐рдПрдХреЛ рднрдгреНрдбрд╛рд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдиред рдиреЗрдЧреЗрдЯрд┐рдн рдХреНрдпрд╛рд╕ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╡реИрдХрд▓реНрдкрд┐рдХ рдЫ рд░ рдореЗрдЯрд╛рдЗрдПрдорд╛ рдорд╛рдерд┐рдХрд╛ рдорд╛рдирд╣рд░реВрдорд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реБрдиреЗрдЫред

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╣реЛрд╕реНрдЯ рдЧрд░рд┐рдПрдХреЛ рднрдгреНрдбрд╛рд░ рдорд╛рд╡реЗрдиред рдирдХрд╛рд░рд╛рддреНрдордХ рдХреНрдпрд╛рд╕ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди (-рез) рдРрдЪреНрдЫрд┐рдХ рдЫ рд░ рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирдЧрд░рд┐рдПрдХреЛ рдЦрдгреНрдбрдорд╛ рдорд╛рдерд┐рдХреЛ рдорд╛рдирд╣рд░реВрдорд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реБрдиреЗрдЫред

    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 рд╕рдмреИ рддрд╛рд░реНрдХрд┐рдХ рдЧреБрдгрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ (рдЕрд░реНрдерд╛рддреН рдореБрдЦреНрдпрддрдпрд╛ рдиреЗрдХреНрд╕рд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпрдХреЛ 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 (рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рек)ред

рд░реЛрдЯреЗрд╢рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, рдпрджрд┐ рддрдкрд╛рдЗрдБ рдмреНрдпрд╛рдХрдЕрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдХреНрд░рдордорд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдбрд┐рд╕реНрдХ рдард╛рдЙрдБ рдмрдЪрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ,
рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ 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рдпрджрд┐ рддрдкрд╛рдЗрдБ рд╕реНрдХреНрд░реНрдпрд╛рдЪрдмрд╛рдЯ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рд░ рд╣рдЯрд╛рдЗрдПрдХрд╛ рд╕рдмреИ рдбреЗрдЯрд╛рдХреЛ рд╕рд╛рде рдиреЗрдХреНрд╕рд╕ рдЙрджрд╛рд╣рд░рдг рдкреБрди: рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

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

рдиреЗрдХреНрд╕рд╕ рд╕реЛрдирд╛рдЯрд╛рдЗрдкрдорд╛ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдЪреНрдпрд╛рдирд▓: https://t.me/ru_nexus_sonatype

рджрд░реНрддрд╛ рднрдПрдХрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдорд╛рддреНрд░ рд╕рд░реНрд╡реЗрдХреНрд╖рдгрдорд╛ рднрд╛рдЧ рд▓рд┐рди рд╕рдХреНрдЫрдиреНред рд╕рд╛рдЗрди рдЗрди рдЧрд░реНрдиреБрд╣реЛрд╕реНрдХреГрдкрдпрд╛

рддрдкрд╛рдИрдВ рдХреБрди рдХрд▓рд╛рдХреГрддрд┐ рднрдгреНрдбрд╛рд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ?

  • Sonatype Nexus рдирд┐: рд╢реБрд▓реНрдХ рдЫ

  • Sonatype Nexus рднреБрдХреНрддрд╛рди рдЧрд░рд┐рдпреЛ

  • рдХрд▓рд╛рддреНрдордХ рдирд┐: рд╢реБрд▓реНрдХ рдЫ

  • рдХрд▓рд╛рддреНрдордХ рднреБрдХреНрддрд╛рди рдЧрд░рд┐рдпреЛ

  • рд╣рд╛рд░реНрдмрд░

  • рдкреБрд▓

9 рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдорддрджрд╛рди рдЧрд░реЗред реи рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рд░реЛрдХрд┐рдПред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди