рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╡рд╛рдкрд░реВрди Nexus Sonatype рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдХреЛрдб рджреГрд╖реНрдЯрд┐рдХреЛрди рдореНрд╣рдгреВрди

Sonatype Nexus рд╣реЗ рдПрдХрд╛рддреНрдорд┐рдХ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдЖрд╣реЗ рдЬреНрдпрд╛рджреНрд╡рд╛рд░реЗ рд╡рд┐рдХрд╕рдХ Java (Maven) рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡, Docker, Python, Ruby, NPM, Bower images, RPM рдкреЕрдХреЗрдЬреЗрд╕, gitlfs, Apt, Go, Nuget, рдкреНрд░реЙрдХреНрд╕реА, рд╕рдВрдЪрдпрд┐рдд рдЖрдгрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рддрд░реАрдд рдХрд░реВ рд╢рдХрддрд╛рдд.

рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реЛрдирд╛рдЯрд╛рдЗрдк рдиреЗрдХреНрд╕рд╕рдЪреА рдЧрд░рдЬ рдХрд╛ рдЖрд╣реЗ?

  • рдЦрд╛рдЬрдЧреА рдХрд▓рд╛рдХреГрддреА рд╕рд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА;
  • рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░реВрди рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХрд▓рд╛рдХреГрддреА рдХреЕрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА;

рдореВрд│ рд╕реЛрдирд╛рдЯрд╛рдЗрдк рдиреЗрдХреНрд╕рд╕ рдкреЕрдХреЗрдЬрдордзреНрдпреЗ рд╕рдорд░реНрдерд┐рдд рдХрд▓рд╛рдХреГрддреА:

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

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

  • рд╕рдВрдЧреАрддрдХрд╛рд░
  • рдХреЛрдирди
  • рд╕реАрдкреАрдПрдПрди
  • 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 рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕реЗрд╡реНрд╣ рдХрд░рд╛
  • Nexus рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЪрд╛рд▓рд╡рд╛ 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 repositories рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ. 3.3.0 рдкреЗрдХреНрд╖рд╛ рдореЛрдареНрдпрд╛ рдиреЗрдХреНрд╕рд╕рд╕рд╛рдареА рдЗ.)

nexus timezone рд╣реЗ Java рдЯрд╛рдЗрдо рдЭреЛрдирдЪреЗ рдирд╛рд╡ рдЖрд╣реЗ, рдЬреЗ nexus_scheduled рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рдЦрд╛рд▓реАрд▓ рдХреНрд░реЙрди рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдВрдЪреНрдпрд╛ рд╕рдВрдпреЛрдЬрдирд╛рдд рдЙрдкрдпреБрдХреНрдд рдард░реВ рд╢рдХрддреЗ.

Nexus рдкреЛрд░реНрдЯ рдЖрдгрд┐ рд╕рдВрджрд░реНрдн рдорд╛рд░реНрдЧ

    nexus_default_port: 8081
    nexus_default_context_path: '/'

Java рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪрд╛ рдкреЛрд░реНрдЯ рдЖрдгрд┐ рд╕рдВрджрд░реНрдн рдорд╛рд░реНрдЧ. 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 рдХреЕрдЯрд▓реЙрдЧ.

  • 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) (рдПрдХрддрд░ рдЗрдирд▓рд╛рдЗрди рдХрд┐рдВрд╡рд╛ рдЙрджрд╛. рд╕рдорд╛рд╡рд┐рд╖реНрдЯ_рд╡рд╛рд░рд╕рд╣ рд▓реЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдлрд╛рдЗрд▓рдордзреНрдпреЗ)

рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдЕрдирд╛рдорд┐рдд рдкреНрд░рд╡реЗрд╢

    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, 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

рдпрд╛рджреА рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрд╕рд╛рдареА. рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рдХрд╛рд░рд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдХреЛрдгрддреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рд╣реЗ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдЖрдгрд┐ 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

Blobstores рдЖрдгрд┐ рднрд╛рдВрдбрд╛рд░

    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"

рдорд╛рд╡реЗрди рд╣реЛрд╕реНрдЯ рдХреЗрд▓реЗрд▓реЗ рднрд╛рдВрдбрд╛рд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЕрд╢реЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкрд░реНрдпрд╛рдпреА рдЖрд╣реЗ рдЖрдгрд┐ рд╡рдЧрд│рд▓реНрдпрд╛рд╕ рд╡рд░реАрд▓ рдореВрд▓реНрдпрд╛рдВрд╡рд░ рдбреАрдлреЙрд▓реНрдЯ рдЕрд╕реЗрд▓.

рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╣реЛрд╕реНрдЯ рдХреЗрд▓реЗрд▓реЗ рднрд╛рдВрдбрд╛рд░ рдорд╛рд╡реЗрди. рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЕрд╢реЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди (-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

рдбреЙрдХрд░, рдкрд╛рдпрдкреА, рд░реЙ, рд░реБрдмреАрдЬреЗрдореНрд╕, рдмреЙрд╡рд░, рдПрдирдкреАрдПрдо, рдЧрд┐рдЯ-рдПрд▓рдПрдлрдПрд╕ рдЖрдгрд┐ рдпрдо рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдкреНрд░рдХрд╛рд░:
рдкрд╣рд╛ 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

рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдореЕрд╡реЗрди рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд рдЗрддрд░ рдкреНрд░рдХрд╛рд░рдЪреЗ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рд╡рд╛рдкрд░рд╛рдпрдЪреЗ рдЕрд╕рддреАрд▓ рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реА рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдХреЛрдк рд╕рдХреНрд╖рдо рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓. рд╣реЗ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдЦреЛрдЯреЗ рдЖрд╣реЗ

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 (рдбрд┐рдлреЙрд▓реНрдЯ 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 рдХрд╛рдвреВрди рдЯрд╛рдХрдд рдЖрд╣реЗ

рдЪреЗрддрд╛рд╡рдгреА: рд╣реЗ рддреБрдордЪрд╛ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рдкреВрд░реНрдгрдкрдгреЗ рд╣рдЯрд╡реЗрд▓. рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕ рдЖрдзреА рдмреЕрдХрдЕрдк рдШреЗрдгреНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛

рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╡рд╛рдкрд░рд╛ 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

Nexus Sonatype рд╡рд░ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдЪреЕрдиреЗрд▓: https://t.me/ru_nexus_sonatype

рдХреЗрд╡рд│ рдиреЛрдВрджрдгреАрдХреГрдд рд╡рд╛рдкрд░рдХрд░реНрддреЗрдЪ рд╕рд░реНрд╡реЗрдХреНрд╖рдгрд╛рдд рднрд╛рдЧ рдШреЗрдК рд╢рдХрддрд╛рдд. рд╕рд╛рдЗрди рдЗрди рдХрд░рд╛, рдЖрдкрд▓реЗ рд╕реНрд╡рд╛рдЧрдд рдЖрд╣реЗ.

рддреБрдореНрд╣реА рдХреЛрдгрддреЗ рдЖрд░реНрдЯрд┐рдлреЕрдХреНрдЯ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдЬ рд╡рд╛рдкрд░рддрд╛?

  • Sonatype Nexus рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрд╣реЗ

  • Sonatype Nexus рдЕрджрд╛ рдХреЗрд▓реЗ

  • рдЖрд░реНрдЯрд┐рдлреЕрдХреНрдЯрд░реА рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрд╣реЗ

  • рдЖрд░реНрдЯрд┐рдлреЕрдХреНрдЯрд░реА рдкреЗрдб

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

  • рд▓рдЧрджрд╛

9 рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдиреА рдорддрджрд╛рди рдХреЗрд▓реЗ. 3 рд╡рд╛рдкрд░рдХрд░реНрддреЗ рджреВрд░ рд░рд╛рд╣рд┐рд▓реЗ.

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛