Sonatype Nexus β ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°ΡΡ, Ρ ΡΠ°Π½ΠΈΡΡ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ Java (Maven), ΠΎΠ±ΡΠ°Π·Π°ΠΌΠΈ Docker, Python, Ruby, NPM, Bower, RPM-ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ, gitlfs, Apt, Go, Nuget, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡ ΡΠ²ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ΅Π½ Sonatype Nexus?
- ΠΠ»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ²;
- ΠΠ»Ρ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠ°ΡΠΈΠ²Π°ΡΡΡΡ ΠΈΠ· ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°;
ΠΡΡΠ΅ΡΠ°ΠΊΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΏΠΎΡΡΠ°Π²ΠΊΠ΅ Sonatype Nexus:
- Java, Maven (jar)
- Docker
- Python (pip)
- Ruby (gem)
- NPM
- Bower
- Yum (rpm)
- gitlfs
- Raw
- Apt (deb)
- Go
- Nuget
ΠΡΡΠ΅ΡΠ°ΠΊΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎΠΌ:
- Composer
- Conan
- CPAN
- ELPA
- Helm
- P2
- R
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Sonatype Nexus ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ https://github.com/ansible-ThoTeam/nexus3-oss
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
- ΠΡΠΎΡΠΈΡΠ°ΠΉΡΠ΅ ΠΏΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ansible Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅.
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ansible
pip install ansible
Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΡΡΠ°Π½ΡΠΈΠΈ Π³Π΄Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ playbook. - Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅
geerlingguy.java Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΡΡΠ°Π½ΡΠΈΠΈ Π³Π΄Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ playbook. - Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅
geerlingguy.apache Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΡΡΠ°Π½ΡΠΈΠΈ Π³Π΄Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ playbook. - ΠΡΠ° ΡΠΎΠ»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Π° Π½Π° CentOS 7, Ubuntu Xenial (16.04) and Bionic (18.04), Debian Jessie and Stretch
jmespath
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΡΡΠ°Π½ΡΠΈΠΈ Π³Π΄Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ playbook. ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅sudo pip install -r requirements.txt
- Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ» playbook (ΠΏΡΠΈΠΌΠ΅Ρ Π½ΠΈΠΆΠ΅) Π² ΡΠ°ΠΉΠ» nexus.yml
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ nexus
ansible-playbook -i host nexus.yml
ΠΡΠΈΠΌΠ΅Ρ ansible-playbook Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ nexus Π±Π΅Π· LDAP Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌΠΈ Maven (java), Docker, Python, Ruby, NPM, Bower, RPM ΠΈ gitlfs.
---
- name: Nexus
hosts: nexus
become: yes
vars:
nexus_timezone: 'Asia/Omsk'
nexus_admin_password: "admin123"
nexus_public_hostname: 'apatsev-nexus-playbook'
httpd_setup_enable: false
nexus_privileges:
- name: all-repos-read
description: 'Read & Browse access to all repos'
repository: '*'
actions:
- read
- browse
- name: company-project-deploy
description: 'Deployments to company-project'
repository: company-project
actions:
- add
- edit
nexus_roles:
- id: Developpers # maps to the LDAP group
name: developers
description: All developers
privileges:
- nx-search-read
- all-repos-read
- company-project-deploy
roles: []
nexus_local_users:
- username: jenkins # used as key to update
first_name: Jenkins
last_name: CI
email: [email protected]
password: "s3cr3t"
roles:
- Developpers # role ID here
nexus_blobstores:
- name: company-artifacts
path: /var/nexus/blobs/company-artifacts
nexus_scheduled_tasks:
- name: compact-blobstore
cron: '0 0 22 * * ?'
typeId: blobstore.compact
taskProperties:
blobstoreName: 'company-artifacts'
nexus_repos_maven_proxy:
- name: central
remote_url: 'https://repo1.maven.org/maven2/'
layout_policy: permissive
- name: jboss
remote_url: 'https://repository.jboss.org/nexus/content/groups/public-jboss/'
- name: vaadin-addons
remote_url: 'https://maven.vaadin.com/vaadin-addons/'
- name: jaspersoft
remote_url: 'https://jaspersoft.artifactoryonline.com/jaspersoft/jaspersoft-repo/'
version_policy: mixed
nexus_repos_maven_hosted:
- name: company-project
version_policy: mixed
write_policy: allow
blob_store: company-artifacts
nexus_repos_maven_group:
- name: public
member_repos:
- central
- jboss
- vaadin-addons
- jaspersoft
# Yum. Change nexus_config_yum to true for create yum repository
nexus_config_yum: true
nexus_repos_yum_hosted:
- name: private_yum_centos_7
repodata_depth: 1
nexus_repos_yum_proxy:
- name: epel_centos_7_x86_64
remote_url: http://download.fedoraproject.org/pub/epel/7/x86_64
maximum_component_age: -1
maximum_metadata_age: -1
negative_cache_ttl: 60
- name: centos-7-os-x86_64
remote_url: http://mirror.centos.org/centos/7/os/x86_64/
maximum_component_age: -1
maximum_metadata_age: -1
negative_cache_ttl: 60
nexus_repos_yum_group:
- name: yum_all
member_repos:
- private_yum_centos_7
- epel_centos_7_x86_64
# NPM. Change nexus_config_npm to true for create npm repository
nexus_config_npm: true
nexus_repos_npm_hosted: []
nexus_repos_npm_group:
- name: npm-public
member_repos:
- npm-registry
nexus_repos_npm_proxy:
- name: npm-registry
remote_url: https://registry.npmjs.org/
negative_cache_enabled: false
# Docker. Change nexus_config_docker to true for create docker repository
nexus_config_docker: true
nexus_repos_docker_hosted:
- name: docker-hosted
http_port: "{{ nexus_docker_hosted_port }}"
v1_enabled: True
nexus_repos_docker_proxy:
- name: docker-proxy
http_port: "{{ nexus_docker_proxy_port }}"
v1_enabled: True
index_type: "HUB"
remote_url: "https://registry-1.docker.io"
use_nexus_certificates_to_access_index: false
maximum_component_age: 1440
maximum_metadata_age: 1440
negative_cache_enabled: true
negative_cache_ttl: 1440
nexus_repos_docker_group:
- name: docker-group
http_port: "{{ nexus_docker_group_port }}"
v1_enabled: True
member_repos:
- docker-hosted
- docker-proxy
# Bower. Change nexus_config_bower to true for create bower repository
nexus_config_bower: true
nexus_repos_bower_hosted:
- name: bower-hosted
nexus_repos_bower_proxy:
- name: bower-proxy
index_type: "proxy"
remote_url: "https://registry.bower.io"
use_nexus_certificates_to_access_index: false
maximum_component_age: 1440
maximum_metadata_age: 1440
negative_cache_enabled: true
negative_cache_ttl: 1440
nexus_repos_bower_group:
- name: bower-group
member_repos:
- bower-hosted
- bower-proxy
# Pypi. Change nexus_config_pypi to true for create pypi repository
nexus_config_pypi: true
nexus_repos_pypi_hosted:
- name: pypi-hosted
nexus_repos_pypi_proxy:
- name: pypi-proxy
index_type: "proxy"
remote_url: "https://pypi.org/"
use_nexus_certificates_to_access_index: false
maximum_component_age: 1440
maximum_metadata_age: 1440
negative_cache_enabled: true
negative_cache_ttl: 1440
nexus_repos_pypi_group:
- name: pypi-group
member_repos:
- pypi-hosted
- pypi-proxy
# rubygems. Change nexus_config_rubygems to true for create rubygems repository
nexus_config_rubygems: true
nexus_repos_rubygems_hosted:
- name: rubygems-hosted
nexus_repos_rubygems_proxy:
- name: rubygems-proxy
index_type: "proxy"
remote_url: "https://rubygems.org"
use_nexus_certificates_to_access_index: false
maximum_component_age: 1440
maximum_metadata_age: 1440
negative_cache_enabled: true
negative_cache_ttl: 1440
nexus_repos_rubygems_group:
- name: rubygems-group
member_repos:
- rubygems-hosted
- rubygems-proxy
# gitlfs. Change nexus_config_gitlfs to true for create gitlfs repository
nexus_config_gitlfs: true
nexus_repos_gitlfs_hosted:
- name: gitlfs-hosted
roles:
- { role: geerlingguy.java }
# Debian/Ubuntu only
# - { role: geerlingguy.apache, apache_create_vhosts: no, apache_mods_enabled: ["proxy_http.load", "headers.load"], apache_remove_default_vhost: true, tags: ["geerlingguy.apache"] }
# RedHat/CentOS only
- { role: geerlingguy.apache, apache_create_vhosts: no, apache_remove_default_vhost: true, tags: ["geerlingguy.apache"] }
- { role: ansible-thoteam.nexus3-oss, tags: ['ansible-thoteam.nexus3-oss'] }
Π‘ΠΊΡΠΈΠ½ΡΠΎΡΡ:
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΠ»ΠΈ
Role Variables
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (ΡΠΌ. default/main.yml
):
General variables
nexus_version: ''
nexus_timezone: 'UTC'
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΎΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π²Π΅ΡΡΠΈΡ Nexus. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π²Π΅ΡΡΠΈΡ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ nexus_version
. Π‘ΠΌΠΎΡΡΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π°
ΠΡΠ»ΠΈ Π²Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΡ, ΡΠΎ ΡΠΎΠ»Ρ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Nexus.
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΡ Nexus, ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Π½ΠΈΠ΅ yum ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π΄Π»Ρ nexus Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ 3.8.0, git lfs repo Π΄Π»Ρ nexus Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ 3.3.0 ΠΈ Ρ. Π΄.)
nexus timezone
β ΡΡΠΎ ΠΈΠΌΡ ΡΠ°ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° Java, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΌΠΈ Π½ΠΈΠΆΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ cron Π΄Π»Ρ nexus_scheduled tasks.
ΠΠΎΡΡ Nexus ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΠΉ ΠΏΡΡΡ
nexus_default_port: 8081
nexus_default_context_path: '/'
ΠΠΎΡΡ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΠΉ ΠΏΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Java-ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. nexus_default_context_path
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΊΠΎΡΡΡ ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ.: nexus_default_context_path: '/nexus/'
.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π³ΡΡΠΏΠΏΠ° ΠΠ‘ Nexus
nexus_os_group: 'nexus'
nexus_os_user: 'nexus'
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π³ΡΡΠΏΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Nexus ΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ»ΡΠΆΠ±Ρ, Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ΡΠΎΠ»ΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ.
nexus_os_user_home_dir: '/home/nexus'
Π Π°Π·ΡΠ΅ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π΄ΠΎΠΌΠ°ΡΠ½ΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ nexus
ΠΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Nexus
nexus_installation_dir: '/opt'
nexus_data_dir: '/var/nexus'
nexus_tmp_dir: "{{ (ansible_os_family == 'RedHat') | ternary('/var/nexus-tmp', '/tmp/nexus') }}"
ΠΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Nexus.
nexus_installation_dir
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρnexus_data_dir
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΈ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ. ΠΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ ΠΏΡΡΠΈ blobstoresnexus_data_dir
ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½Ρ, ΡΠΌΠΎΡΡΠΈΡΠ΅ Π½ΠΈΠΆΠ΅nexus_blobstores
.nexus_tmp_dir
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ. ΠΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ redhat Π±ΡΠ» ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ ΠΈΠ·/tmp
Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌΠΈ ΠΎΡΠΈΡΡΠΊΠΈ. Π‘ΠΌΠΎΡΡΠΈΡΠ΅ #168.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Nexus JVM
nexus_min_heap_size: "1200M"
nexus_max_heap_size: "{{ nexus_min_heap_size }}"
nexus_max_direct_memory: "2G"
ΠΡΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Nexus. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠΉΡΠ΅ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΏΡΠΎΡΠΈΡΠ°Π»ΠΈ
ΠΠ°ΠΊ Π²ΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π²ΠΎΡ Π²ΡΠ΄Π΅ΡΠΆΠΊΠ° ΠΈΠ· Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°:
ΠΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΠΏΠ°ΠΌΡΡΡ JVM heap Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ, ΠΏΡΠΈΠ²ΠΎΠ΄Ρ ΠΊ Π½Π΅Π½ΡΠΆΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΠ°ΡΠΎΠ»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°
nexus_admin_password: 'changeme'
ΠΠ°ΡΠΎΠ»Ρ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Β«adminΒ» Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠΌΠΎΡΡΠΈΡΠ΅ [ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠ°ΡΠΎΠ»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ](# change-admin-password-after-first-install), Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠ»ΠΈ.
ΠΠ°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Ρ
ΡΠ°Π½ΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΏΠ°ΡΠΎΠ»Ρ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° Π² playbook, Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ [ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ansible-vault] (
ΠΠ½ΠΎΠ½ΠΈΠΌΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
nexus_anonymous_access: false
ΠΠ½ΠΎΠ½ΠΈΠΌΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠ»ΡΡΠ΅Π½. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΏΡΠΎ
ΠΡΠ±Π»ΠΈΡΠ½ΠΎΠ΅ ΠΈΠΌΡ Ρ ΠΎΡΡΠ°
nexus_public_hostname: 'nexus.vm'
nexus_public_scheme: https
ΠΠΎΠ»Π½ΠΎΠ΅ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΈ ΡΡ Π΅ΠΌΠ° (https ΠΈΠ»ΠΈ http), ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Nexus Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ².
ΠΠΎΡΡΡΠΏ API Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠΎΠ»ΠΈ
nexus_api_hostname: localhost
nexus_api_scheme: http
nexus_api_validate_certs: "{{ nexus_api_scheme == 'https' }}"
nexus_api_context_path: "{{ nexus_default_context_path }}"
nexus_api_port: "{{ nexus_default_port }}"
ΠΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ API Nexus Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ.
Π’ΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Ρ Π½Π΅ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΊΡΠΈ
httpd_setup_enable: false
httpd_server_name: "{{ nexus_public_hostname }}"
httpd_default_admin_email: "[email protected]"
httpd_ssl_certificate_file: 'files/nexus.vm.crt'
httpd_ssl_certificate_key_file: 'files/nexus.vm.key'
# httpd_ssl_certificate_chain_file: "{{ httpd_ssl_certificate_file }}"
httpd_copy_ssl_files: true
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ httpd. ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΊΠΎΠ³Π΄Π° Π΄Π»Ρ httpd_setup_enable
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅true
, nexus ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ 127.0.0.1:8081, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π΅ Π±ΡΠ΄ΡΡΠΈ Π½Π°ΠΏΡΡΠΌΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π· HTTP-ΠΏΠΎΡΡ 8081 Ρ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ IP-Π°Π΄ΡΠ΅ΡΠ°.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ ΠΈΠΌΡ Ρ
ΠΎΡΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ β nexus_public_hostname
. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ ΡΠ°Π·Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ httpd_server_name
Ρ Π΄ΡΡΠ³ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ.
Π‘ httpd_copy_ssl_files: true
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² Π²Π°ΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ playbook ΠΈ Π±ΡΠ΄ΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Ρ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ ΠΈ Π½Π°ΡΡΡΠΎΠ΅Π½Ρ Π² apache.
ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ httpd_copy_ssl_files: false
ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅:
# These specifies to the vhost where to find on the remote server file
# system the certificate files.
httpd_ssl_cert_file_location: "/etc/pki/tls/certs/wildcard.vm.crt"
httpd_ssl_cert_key_location: "/etc/pki/tls/private/wildcard.vm.key"
# httpd_ssl_cert_chain_file_location: "{{ httpd_ssl_cert_file_location }}"
httpd_ssl_cert_chain_file_location
ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΡΡΠ°Π²Π»Π΅Π½ Π½Π΅ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Ρ
ΠΎΡΠΈΡΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΡΠ°ΠΉΠ» ΡΠ΅ΠΏΠΎΡΠΊΠΈ
httpd_default_admin_email: "[email protected]"
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π°Π΄ΡΠ΅Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ LDAP
Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ LDAP ΠΈ ΠΎΠ±Π»Π°ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΡΠΊΠ»ΡΡΠ΅Π½Ρ
nexus_ldap_realm: false
ldap_connections: []
nexus_ldap_realm: true
ldap_connections:
- ldap_name: 'My Company LDAP' # used as a key to update the ldap config
ldap_protocol: 'ldaps' # ldap or ldaps
ldap_hostname: 'ldap.mycompany.com'
ldap_port: 636
ldap_use_trust_store: false # Wether or not to use certs in the nexus trust store
ldap_search_base: 'dc=mycompany,dc=net'
ldap_auth: 'none' # or simple
ldap_auth_username: 'username' # if auth = simple
ldap_auth_password: 'password' # if auth = simple
ldap_user_base_dn: 'ou=users'
ldap_user_filter: '(cn=*)' # (optional)
ldap_user_object_class: 'inetOrgPerson'
ldap_user_id_attribute: 'uid'
ldap_user_real_name_attribute: 'cn'
ldap_user_email_attribute: 'mail'
ldap_user_subtree: false
ldap_map_groups_as_roles: false
ldap_group_base_dn: 'ou=groups'
ldap_group_object_class: 'posixGroup'
ldap_group_id_attribute: 'cn'
ldap_group_member_attribute: 'memberUid'
ldap_group_member_format: '${username}'
ldap_group_subtree: false
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ LDAP Π΄Π»Ρ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (Π°Π½ΠΎΠ½ΠΈΠΌΠ½Π°Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ°), ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Β«ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°ΡΒ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:
nexus_ldap_realm: true
ldap_connection:
- ldap_name: 'Simplest LDAP config'
ldap_protocol: 'ldaps'
ldap_hostname: 'annuaire.mycompany.com'
ldap_search_base: 'dc=mycompany,dc=net'
ldap_port: 636
ldap_use_trust_store: false
ldap_user_id_attribute: 'uid'
ldap_user_real_name_attribute: 'cn'
ldap_user_email_attribute: 'mail'
ldap_user_object_class: 'inetOrgPerson'
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ LDAP Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΠΉ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ DSA):
nexus_ldap_realm: true
ldap_connections:
- ldap_name: 'LDAP config with DSA'
ldap_protocol: 'ldaps'
ldap_hostname: 'annuaire.mycompany.com'
ldap_port: 636
ldap_use_trust_store: false
ldap_auth: 'simple'
ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
ldap_auth_password: "{{ vault_ldap_dsa_password }}" # better keep passwords in an ansible vault
ldap_search_base: 'dc=mycompany,dc=net'
ldap_user_base_dn: 'ou=users'
ldap_user_object_class: 'inetOrgPerson'
ldap_user_id_attribute: 'uid'
ldap_user_real_name_attribute: 'cn'
ldap_user_email_attribute: 'mail'
ldap_user_subtree: false
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ LDAP Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΠΉ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ DSA) + Π³ΡΡΠΏΠΏΡ, ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΊΠ°ΠΊ ΡΠΎΠ»ΠΈ:
nexus_ldap_realm: true
ldap_connections
- ldap_name: 'LDAP config with DSA'
ldap_protocol: 'ldaps'
ldap_hostname: 'annuaire.mycompany.com'
ldap_port: 636
ldap_use_trust_store: false
ldap_auth: 'simple'
ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
ldap_auth_password: "{{ vault_ldap_dsa_password }}" # better keep passwords in an ansible vault
ldap_search_base: 'dc=mycompany,dc=net'
ldap_user_base_dn: 'ou=users'
ldap_user_object_class: 'inetOrgPerson'
ldap_user_id_attribute: 'uid'
ldap_user_real_name_attribute: 'cn'
ldap_user_email_attribute: 'mail'
ldap_map_groups_as_roles: true
ldap_group_base_dn: 'ou=groups'
ldap_group_object_class: 'groupOfNames'
ldap_group_id_attribute: 'cn'
ldap_group_member_attribute: 'member'
ldap_group_member_format: 'uid=${username},ou=users,dc=mycompany,dc=net'
ldap_group_subtree: false
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ LDAP Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΠΉ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ DSA) + Π³ΡΡΠΏΠΏΡ, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΊΠ°ΠΊ ΡΠΎΠ»ΠΈ:
nexus_ldap_realm: true
ldap_connections:
- ldap_name: 'LDAP config with DSA'
ldap_protocol: 'ldaps'
ldap_hostname: 'annuaire.mycompany.com'
ldap_port: 636
ldap_use_trust_store: false
ldap_auth: 'simple'
ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
ldap_auth_password: "{{ vault_ldap_dsa_password }}" # better keep passwords in an ansible vault
ldap_search_base: 'dc=mycompany,dc=net'
ldap_user_base_dn: 'ou=users'
ldap_user_object_class: 'inetOrgPerson'
ldap_user_id_attribute: 'uid'
ldap_user_real_name_attribute: 'cn'
ldap_user_email_attribute: 'mail'
ldap_map_groups_as_roles: true
ldap_map_groups_as_roles_type: 'dynamic'
ldap_user_memberof_attribute: 'memberOf'
ΠΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ
nexus_privileges:
- name: all-repos-read # used as key to update a privilege
# type: <one of application, repository-admin, repository-content-selector, repository-view, script or wildcard>
description: 'Read & Browse access to all repos'
repository: '*'
actions: # can be add, browse, create, delete, edit, read or * (all)
- read
- browse
# pattern: pattern
# domain: domain
# script_name: name
Π‘ΠΏΠΈΡΠΎΠΊ
ΠΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
_nexus_privilege_defaults:
type: repository-view
format: maven2
actions:
- read
Π ΠΎΠ»ΠΈ (Π²Π½ΡΡΡΠΈ Nexus ΠΈΠΌΠ΅Π΅ΡΡΡ Π²ΠΈΠ΄Ρ)
nexus_roles:
- id: Developpers # can map to a LDAP group id, also used as a key to update a role
name: developers
description: All developers
privileges:
- nx-search-read
- all-repos-read
roles: [] # references to other role names
Π‘ΠΏΠΈΡΠΎΠΊ
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ
nexus_local_users: []
# - username: jenkins # used as key to update
# state: present # default value if ommited, use 'absent' to remove user
# first_name: Jenkins
# last_name: CI
# email: [email protected]
# password: "s3cr3t"
# roles:
# - developers # role ID
Local (non-LDAP) users/accounts list to create in nexus.
Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ (Π½Π΅ LDAP) ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ/ΡΡΠ΅ΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π² Nexus.
nexus_ldap_users: []
# - username: j.doe
# state: present
# roles:
# - "nx-admin"
ΠΠ°ΠΏΠΏΠΈΠ½Π³ Ldap ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ/ΡΠΎΠ»Π΅ΠΉ. Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ absent
ΡΠ΄Π°Π»ΠΈΡ ΡΠΎΠ»ΠΈ ΠΈΠ· ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Ldap Π½Π΅ ΡΠ΄Π°Π»ΡΡΡΡΡ. ΠΠΎΠΏΡΡΠΊΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠ»Ρ Π΄Π»Ρ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅.
Π‘Π΅Π»Π΅ΠΊΡΠΎΡΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°
nexus_content_selectors:
- name: docker-login
description: Selector for docker login privilege
search_expression: format=="docker" and path=~"/v2/"
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΡΠΌ.
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π½ΠΎΠ²ΡΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ Ρ type: repository-content-selector
ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌcontentSelector
- name: docker-login-privilege
type: repository-content-selector
contentSelector: docker-login
description: 'Login to Docker registry'
repository: '*'
actions:
- read
- browse
Blobstores ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ
nexus_delete_default_repos: false
Delete the repositories from the nexus install initial default configuration. This step is only executed on first-time install (when nexus_data_dir
has been detected empty).
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Nexus. ΠΡΠΎΡ ΡΠ°Π³ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ (ΠΊΠΎΠ³Π΄Π° nexus_data_dir
ΠΏΡΡΡΠΎΠΉ).
nexus_delete_default_blobstore: false
Delete the default blobstore from the nexus install initial default configuration. This can be done only if nexus_delete_default_repos: true
and all configured repositories (see below) have an explicit blob_store: custom
. This step is only executed on first-time install (when nexus_data_dir
has been detected empty).
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π±Π»ΠΎΠ±ΠΎΠ² (Π±ΠΈΠ½Π°ΡΠ½ΡΡ
Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ²) Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠ»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π±Π»ΠΎΠ±ΠΎΠ² (Π±ΠΈΠ½Π°ΡΠ½ΡΡ
Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ²) Π²ΡΠΊΠ»ΡΡΠΈΡΠ΅ nexus_delete_default_repos: true
. ΠΡΠΎΡ ΡΠ°Π³ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ (ΠΊΠΎΠ³Π΄Π° nexus_data_dir
ΠΏΡΡΡΠΎΠΉ).
nexus_blobstores: []
# example blobstore item :
# - name: separate-storage
# type: file
# path: /mnt/custom/path
# - name: s3-blobstore
# type: S3
# config:
# bucket: s3-blobstore
# accessKeyId: "{{ VAULT_ENCRYPTED_KEY_ID }}"
# secretAccessKey: "{{ VAULT_ENCRYPTED_ACCESS_KEY }}"
Configuring blobstore on S3 is provided as a convenience and is not part of the automated tests we run on travis. Please note that storing on S3 is only recommended for instances deployed on AWS.
CΠΎΠ·Π΄Π°Π½ΠΈΠ΅
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° BLOB-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π° S3 ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° S3 ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ², ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡΡ Π½Π° AWS.
nexus_repos_maven_proxy:
- name: central
remote_url: 'https://repo1.maven.org/maven2/'
layout_policy: permissive
# maximum_component_age: -1
# maximum_metadata_age: 1440
# negative_cache_enabled: true
# negative_cache_ttl: 1440
- name: jboss
remote_url: 'https://repository.jboss.org/nexus/content/groups/public-jboss/'
# maximum_component_age: -1
# maximum_metadata_age: 1440
# negative_cache_enabled: true
# negative_cache_ttl: 1440
# example with a login/password :
# - name: secret-remote-repo
# remote_url: 'https://company.com/repo/secure/private/go/away'
# remote_username: 'username'
# remote_password: 'secret'
# # maximum_component_age: -1
# # maximum_metadata_age: 1440
# # negative_cache_enabled: true
# # negative_cache_ttl: 1440
ΠΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
nexus_repos_maven_hosted:
- name: private-release
version_policy: release
write_policy: allow_once # one of "allow", "allow_once" or "deny"
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 and yum repository types:
see defaults/main.yml
for these options:
Π₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS ΠΈ yum ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠΊΠ»ΡΡΠ΅Π½Ρ:
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ defaults/main.yml
Π΄Π»Ρ ΡΡΠΈΡ
ΠΎΠΏΡΠΈΠΉ:
nexus_config_pypi: false
nexus_config_docker: false
nexus_config_raw: false
nexus_config_rubygems: false
nexus_config_bower: false
nexus_config_npm: false
nexus_config_gitlfs: false
nexus_config_yum: false
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π², ΠΊΡΠΎΠΌΠ΅ maven. ΠΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ false
nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false # required for docker anonymous access
Remote User Realm ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ
nexus_rut_auth_realm: true
ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½ ΠΏΡΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ
nexus_rut_auth_header: "CUSTOM_HEADER"
ΠΠ°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ
nexus_scheduled_tasks: []
# # Example task to compact blobstore :
# - name: compact-docker-blobstore
# cron: '0 0 22 * * ?'
# typeId: blobstore.compact
# task_alert_email: [email protected] # optional
# taskProperties:
# blobstoreName: {{ nexus_blob_names.docker.blob }} # all task attributes are stored as strings by nexus internally
# # Example task to purge maven snapshots
# - name: Purge-maven-snapshots
# cron: '0 50 23 * * ?'
# typeId: repository.maven.remove-snapshots
# task_alert_email: [email protected] # optional
# taskProperties:
# repositoryName: "*" # * for all repos. Change to a repository name if you only want a specific one
# minimumRetained: "2"
# snapshotRetentionDays: "2"
# gracePeriodInDays: "2"
# booleanTaskProperties:
# removeIfReleased: true
# # Example task to purge unused docker manifest and images
# - name: Purge unused docker manifests and images
# cron: '0 55 23 * * ?'
# typeId: "repository.docker.gc"
# task_alert_email: [email protected] # optional
# taskProperties:
# repositoryName: "*" # * for all repos. Change to a repository name if you only want a specific one
# # Example task to purge incomplete docker uploads
# - name: Purge incomplete docker uploads
# cron: '0 0 0 * * ?'
# typeId: "repository.docker.upload-purge"
# task_alert_email: [email protected] # optional
# taskProperties:
# age: "24"
typeId
ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ Π·Π°Π΄Π°ΡΠΈtaskProperties
/booleanTaskProperties
ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π°Π΄Π°ΡΡ Π»ΠΈΠ±ΠΎ:
- ΠΈΠ· ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΠΈ ΡΠΈΠΏΠΎΠ² Java
org.sonatype.nexus.scheduling.TaskDescriptorSupport
- ΠΏΡΠΎΠ²Π΅ΡΡΡ HTML-ΡΠΎΡΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ Π² Π²Π°ΡΠ΅ΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠ΅
- ΠΎΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π·Π°ΠΏΡΠΎΡΠΎΠ² AJAX Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΏΡΠΈ ΡΡΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Π·Π°Π΄Π°ΡΠΈ.
Π‘Π²ΠΎΠΉΡΡΠ²Π° Π·Π°Π΄Π°ΡΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ yaml Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΈΡ ΡΠΈΠΏΠ°:
taskProperties
Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΡΠ²ΠΎΠΉΡΡΠ² (Ρ. Π΅. ΠΈΠΌΠ΅Π½ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π², ΠΈΠΌΠ΅Π½ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡ, ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΎΠ² Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ …).booleanTaskProperties
Π΄Π»Ρ Π²ΡΠ΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² (Ρ. Π΅. Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠ΅ΠΊΠ±ΠΎΠΊΡΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅ΠΊΡΡΡΠ°).
Π Π΅Π·Π΅ΡΠ²Π½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ
nexus_backup_configure: false
nexus_backup_cron: '0 0 21 * * ?' # See cron expressions definition in nexus create task gui
nexus_backup_dir: '/var/nexus-backup'
nexus_restore_log: '{{ nexus_backup_dir }}/nexus-restore.log'
nexus_backup_rotate: false
nexus_backup_rotate_first: false
nexus_backup_keep_rotations: 4 # Keep 4 backup rotation by default (current + last 3)
Π Π΅Π·Π΅ΡΠ²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΎ, ΠΏΠΎΠΊΠ° Π²Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ nexus_backup_configure
Π² true
.
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° ΡΡΠ΅Π½Π°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π½Π°ΡΡΡΠΎΠ΅Π½Π° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π² Nexus
Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠΌ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π² nexus_backup_cron
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 21:00 ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ).
Π‘ΠΌ. [Π¨Π°Π±Π»ΠΎΠ½ groovy Π΄Π»Ρ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ](templates / backup.groovy.j2) Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΡΠΎ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ
nexus_scheduled_tasks
, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ
ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π² ΡΠ²ΠΎΠ΅ΠΌ playbook.
ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠΎΡΠΈΡΠΎΠ²Π°ΡΡ/ΡΠ΄Π°Π»ΡΡΡ ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ nexus_backup_rotate: true
ΠΈ Π½Π°ΡΡΡΠΎΠΉΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π΅ΠΊΠ°ΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ Ρ
ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ nexus_backup_keep_rotations
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 4).
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΡΠ°ΡΠΈΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ,
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ nexus_backup_rotate_first: true
. ΠΡΠΎ Π½Π°ΡΡΡΠΎΠΈΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅/ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄ Π±Π΅ΠΊΠ°ΠΏΠΎΠΌ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΎΡΠΈΡΠΈΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ΠΌ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°ΡΡΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ
ΡΠ΄Π°Π»ΡΡΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡΠΈΠΉ Π±Π΅ΠΊΠ°ΠΏ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°Π½.
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ playbook Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 2017-12-17-21-00-00 Π΄Π»Ρ 17 Π΄Π΅ΠΊΠ°Π±ΡΡ 2017 Π² 21:00
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ nexus
ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΄Π°Π»ΠΈΡ ΡΠ΅ΠΊΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠ°Π½Π΅Π΅, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ nexus_purge
, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ Ρ Π½ΡΠ»Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ nexus Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ
Π΄Π°Π½Π½ΡΡ
.
ansible-playbook -i your/inventory.ini your_nexus_playbook.yml -e nexus_purge=true
ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠ°ΡΠΎΠ»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
nexus_default_admin_password: 'admin123'
ΠΡΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π°ΡΠ΅ΠΌ playbook. ΠΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΏΠ°ΡΠΎΠ»Π΅ΠΌ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Nexus ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠ°ΡΠΎΠ»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Π½Π° nexus_admin_password
.
ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠ°ΡΠΎΠ»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ Π½Π° ΡΡΠ°ΡΡΠΉ ΠΏΠ°ΡΠΎΠ»Ρ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ nexus_admin_password
Π² Π²Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ:
ansible-playbook -i your/inventory.ini your_playbook.yml -e nexus_default_admin_password=oldPassword
Π’Π΅Π»Π΅Π³ΡΠ°ΠΌ ΠΊΠ°Π½Π°Π» ΠΏΠΎ Nexus Sonatype:
Π’ΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΎΠΏΡΠΎΡΠ΅.
ΠΠ°ΠΊΠΈΠΌΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΠΌΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² Π²Ρ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ΡΡ?
-
Sonatype Nexus Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ
-
Sonatype Nexus ΠΏΠ»Π°ΡΠ½ΡΠΉ
-
Artifactory Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ
-
Artifactory ΠΏΠ»Π°ΡΠ½ΡΠΉ
-
Harbor
-
Pulp
ΠΡΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π»ΠΈ 9 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠΎΠ·Π΄Π΅ΡΠΆΠ°Π»ΠΈΡΡ 3 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com