Sonatype Nexus Π΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΏΡΠ΅ΠΊΡ ΠΊΠΎΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΠΏΡΠΎΠΊΡΠΈ, ΡΠΊΠ»Π°Π΄ΠΈΡΠ°Π°Ρ ΠΈ ΡΠΏΡΠ°Π²ΡΠ²Π°Π°Ρ ΡΠΎ Java (Maven) Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ, Docker, Python, Ruby, NPM, Bower ΡΠ»ΠΈΠΊΠΈ, RPM ΠΏΠ°ΠΊΠ΅ΡΠΈ, gitlfs, Apt, Go, Nuget ΠΈ Π΄Π° ΡΠ° Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π°Ρ Π½ΠΈΠ²Π½Π°ΡΠ° ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠ° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ.
ΠΠΎΡΡΠΎ Π²ΠΈ Π΅ ΠΏΠΎΡΡΠ΅Π±Π΅Π½ Sonatype Nexus?
- ΠΠ° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΡΠΈΠ²Π°ΡΠ½ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ;
- ΠΠ° ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ ΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ°Π°Ρ ΠΎΠ΄ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ;
ΠΡΡΠ΅ΡΠ°ΠΊΡΠΈ ΠΏΠΎΠ΄Π΄ΡΠΆΠ°Π½ΠΈ Π²ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ Sonatype Nexus:
- ΠΠ°Π²Π°, ΠΠ°Π²Π΅Π½ (ΡΠ΅Π³Π»Π°)
- ΠΏΡΠΈΡΡΠ°Π½ΠΈΡΠ΅Π½ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ
- ΠΠ°ΡΡΠΎΠ½ (ΠΏΠΈΠΏ)
- Π ΡΠ±ΠΈΠ½ (ΡΠΊΠ°ΠΏΠΎΡΠ΅Π½ ΠΊΠ°ΠΌΠ΅Π½)
- ΠΠΠ
- ΠΠΎΡΠ΅Ρ
- Yum (Π²ΡΡΠ΅ΠΆΠΈ Π²ΠΎ ΠΌΠΈΠ½ΡΡΠ°)
- gitlfs
- Π‘ΡΡΠΎΠ²ΠΈΠ½ΠΈ
- ΠΠΏΡ (Π΄Π΅Π±)
- Go
- ΠΡΡΠ΅Ρ
ΠΡΡΠ΅ΡΠ°ΠΊΡΠΈ ΠΏΠΎΠ΄Π΄ΡΠΆΠ°Π½ΠΈ ΠΎΠ΄ Π·Π°Π΅Π΄Π½ΠΈΡΠ°ΡΠ°:
- ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΡ
- ΠΠΎΠ½Π°Π½
- CPAN
- ΠΠΠΠ
- ΠΊΠΎΡΠΌΠΈΠ»ΠΎΡΠΎ
- 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) ΠΈ Bionic (18.04), Debian Jessie ΠΈ Stretch
jmespath
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π° Π½Π° ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° ΡΡΠ°Π½ΠΈΡΠ° ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ½ΠΈΠ³Π°ΡΠ° Π·Π° ΠΈΠ³ΡΠΈ. ΠΠ° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅: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'] }
Π‘Π½ΠΈΠΌΠΊΠΈ Π½Π° Π΅ΠΊΡΠ°Π½ΠΎΡ:
ΠΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΠ»ΠΎΠ³ΠΈ
ΠΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΠ»ΠΎΠ³ΠΈ
ΠΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ (Π²ΠΈΠ΄ΠΈ default/main.yml
):
ΠΠΏΡΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
nexus_version: ''
nexus_timezone: 'UTC'
Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, ΡΠ»ΠΎΠ³Π°ΡΠ° ΡΠ΅ ΡΠ° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° Π½Π°ΡΠ½ΠΎΠ²Π°ΡΠ° Π΄ΠΎΡΡΠ°ΠΏΠ½Π° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° Nexus. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° ΡΠΎ ΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° nexus_version
. ΠΠΈΠ΄Π΅ΡΠ΅ Π³ΠΈ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΠΈ Π½Π°
ΠΠΊΠΎ ΡΠ΅ ΠΏΡΠ΅ΡΡΠ»ΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ½ΠΎΠ²Π° Π²Π΅ΡΠ·ΠΈΡΠ°, ΡΠ»ΠΎΠ³Π°ΡΠ° ΡΠ΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π΅ Π΄Π° ΡΠ° Π°ΠΆΡΡΠΈΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°ΡΠ° Π½Π° Nexus.
ΠΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° Nexus ΠΎΠ΄ Π½Π°ΡΠ½ΠΎΠ²Π°ΡΠ°, ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ³ΡΠΈΠΆΠΈΡΠ΅ Π΄Π° Π½Π΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΎ Π½Π΅ ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π²ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΎΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ yum ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ° Π΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΎ Π·Π° nexus ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌ ΠΎΠ΄ 3.8.0, git lfs repo Π·Π° Π½Π΅ΠΊΡΡΡ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌ ΠΎΠ΄ 3.3.0 ΠΈΡΠ½.)
nexus timezone
Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠ°ΡΠ° Π·ΠΎΠ½Π° ΠΠ°Π²Π°, ΠΊΠΎΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΊΠΎΡΠΈΡΠ½Π° Π²ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠ° ΡΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ cron ΠΈΠ·ΡΠ°Π·ΠΈ Π·Π° 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
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
Π³ΠΈ ΡΠΎΠ΄ΡΠΆΠΈ ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ° ΠΈ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅Π½ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ. ΠΡΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½ΠΈ ΠΏΠ°ΡΠ΅ΠΊΠΈ Π½Π° blobstorenexus_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 Π½Π°Π΄ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΠ°Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π²ΠΎ ΠΎΠ±ΠΈΠ΄ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°Ρ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅. ΠΠ²Π° Π²ΡΡΡΠ½ΠΎΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΡΠΏΡΠΎΡΠΈΠ²Π΅Π½ Π΅ΡΠ΅ΠΊΡ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠΈΡΠ° ΡΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π±Π½Π° ΡΠ°Π±ΠΎΡΠ° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ.
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠ° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°
nexus_admin_password: 'changeme'
ΠΠΎΠ·ΠΈΠ½ΠΊΠ°ΡΠ° Π½Π° ΡΠΌΠ΅ΡΠΊΠ°ΡΠ° βΠ°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡβ Π·Π° ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅. ΠΠ²Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠ°ΠΌΠΎ Π½Π° ΠΏΡΠ²Π°ΡΠ° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°. ΠΠ΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ [Change admin password after first installing](# change-admin-password-after-first-install) Π°ΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΎΡΠ½Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ»ΠΎΠ³Π°.
Π‘ΠΈΠ»Π½ΠΎ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π° Π΄Π° Π½Π΅ ΡΠ° Π·Π°ΡΡΠ²ΡΠ²Π°ΡΠ΅ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°ΡΠ° Π²ΠΎ ΡΠ°ΡΠ΅Π½ ΡΠ΅ΠΊΡΡ Π²ΠΎ ΠΊΠ½ΠΈΠ³Π°ΡΠ° Π·Π° ΠΈΠ³ΡΠΈ, ΡΡΠΊΡ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ [ΡΠΈΡΡΠΈΡΠ°ΡΠ΅ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΡΠ²ΠΎΠ΄] (
Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ Π°Π½ΠΎΠ½ΠΈΠΌΠ΅Π½ ΠΏΡΠΈΡΡΠ°ΠΏ
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
ΠΠ°ΠΌΠ΅ΡΡΠΈ
ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, ΡΡΠ΅Π±Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ httpd. ΠΠ°Π±Π΅Π»Π΅ΡΠΊΠ°: ΠΊΠΎΠ³Π° Π·Π° httpd_setup_enable
ΠΏΠΎΡΡΠ°Π²Π΅Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡtrue
, Π½Π΅ΠΊΡΡΡ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈ 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
Π‘ΠΏΠΈΡΠΎΠΊ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ (Π½Π΅-LDAP) ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ/ΡΠΌΠ΅ΡΠΊΠΈ Π·Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ Π²ΠΎ nexus.
Π‘ΠΏΠΈΡΠΎΠΊ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ (Π½Π΅-LDAP) ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ/ΡΠΌΠ΅ΡΠΊΠΈ Π·Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ Π²ΠΎ Nexus.
nexus_ldap_users: []
# - username: j.doe
# state: present
# roles:
# - "nx-admin"
Ldap ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ΅ Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ/ΡΠ»ΠΎΠ³ΠΈ. Π΄ΡΠΆΠ°Π²Π° absent
ΡΠ΅ Π³ΠΈ ΠΎΡΡΡΡΠ°Π½ΠΈ ΡΠ»ΠΎΠ³ΠΈΡΠ΅ ΠΎΠ΄ ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ Π°ΠΊΠΎ Π²Π΅ΡΠ΅ ΠΏΠΎΡΡΠΎΠΈ.
ΠΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° Ldap Π½Π΅ ΡΠ΅ Π±ΡΠΈΡΠ°Ρ. ΠΠ±ΠΈΠ΄ΠΎΡ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΠ»ΠΎΠ³Π° Π·Π° Π½Π΅ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠΈΡΠ° ΡΠΎ Π³ΡΠ΅ΡΠΊΠ°.
Π‘Π΅Π»Π΅ΠΊΡΠΎΡΠΈ Π½Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°
nexus_content_selectors:
- name: docker-login
description: Selector for docker login privilege
search_expression: format=="docker" and path=~"/v2/"
ΠΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΠΈΠ·Π±ΠΈΡΠ°ΡΠΎΡ Π½Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°, Π²ΠΈΠ΄Π΅ΡΠ΅
ΠΠ° Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΈΠ·Π±ΠΈΡΠ°ΡΠΎΡ Π½Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°, Π΄ΠΎΠ΄Π°ΡΡΠ΅ Π½ΠΎΠ²Π° ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠ° ΡΠΎ type: repository-content-selector
ΠΈ ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΈcontentSelector
- name: docker-login-privilege
type: repository-content-selector
contentSelector: docker-login
description: 'Login to Docker registry'
repository: '*'
actions:
- read
- browse
Blobstores ΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ°
nexus_delete_default_repos: false
ΠΠ·Π±ΡΠΈΡΠ΅ΡΠ΅ Π³ΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ°ΡΠ° ΠΎΠ΄ ΠΏΠΎΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°ΡΠ° Π½Π° nexus. ΠΠ²ΠΎΡ ΡΠ΅ΠΊΠΎΡ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΠΏΡΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ° (ΠΊΠΎΠ³Π° nexus_data_dir
Π΅ ΠΎΡΠΊΡΠΈΠ΅Π½ ΠΏΡΠ°Π·Π΅Π½).
ΠΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ° ΠΎΠ΄ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π·Π° Nexus. ΠΠ²ΠΎΡ ΡΠ΅ΠΊΠΎΡ ΡΠ΅ ΠΈΠ·Π²Π΅Π΄ΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΠΏΡΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ° (ΠΊΠΎΠ³Π° nexus_data_dir
ΠΏΡΠ°Π·Π΅Π½).
nexus_delete_default_blobstore: false
ΠΠ·Π±ΡΠΈΡΠ΅ΡΠ΅ Π³ΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΠΎΡ blobstore ΠΎΠ΄ ΠΏΠΎΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π½Π° nexus. ΠΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ 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 }}"
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° blobstore Π½Π° S3 Π΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΎ ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎΡΡ ΠΈ Π½Π΅ Π΅ Π΄Π΅Π» ΠΎΠ΄ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΠΈ ΡΡΠΎ Π³ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°ΠΌΠ΅ Π½Π° travis. ΠΠ΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΈΠΌΠ°ΡΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° S3 ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π° ΡΠ°ΠΌΠΎ Π·Π° ΡΠ»ΡΡΠ°ΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ΠΈ Π½Π° AWS.
Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΠ΅
ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° blob storage Π½Π° 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
Π·Π° ΠΎΠ²ΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ:
ΠΠΎΠΊΠ΅Ρ, 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 Π²ΠΎ ΠΏΡΠ΅Π»ΠΈΡΡΡΠ²Π°ΡΠΎΡ ΠΏΡΠΈ ΡΠ°ΡΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠ°.
Π‘Π²ΠΎΡΡΡΠ²Π°ΡΠ° Π½Π° Π·Π°Π΄Π°ΡΠΈΡΠ΅ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½ΠΈ Π²ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΠΎΡ ΡΠ°ΠΌΠ» Π±Π»ΠΎΠΊ Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ Π½ΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΠΏ:
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 ΡΠ΅ΠΊΠΎΡ Π΄Π΅Π½).
ΠΠΈΠ΄Π΅ΡΠ΅ [groovy template Π·Π° ΠΎΠ²Π°Π° Π·Π°Π΄Π°ΡΠ°](templates/backup.groovy.j2) Π·Π° Π΄Π΅ΡΠ°Π»ΠΈ.
ΠΠ²Π°Π° Π·Π°ΠΊΠ°ΠΆΠ°Π½Π° Π·Π°Π΄Π°ΡΠ° Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠ½Π° ΠΎΠ΄ Π΄ΡΡΠ³ΠΈΡΠ΅ nexus_scheduled_tasks
ΠΊΠΎΠΈ Π²ΠΈΠ΅
ΠΎΠ±ΡΠ°Π²ΠΈ Π²ΠΎ Π²Π°ΡΠ°ΡΠ° ΠΊΠ½ΠΈΠ³Π° Π·Π° ΠΈΠ³ΡΠΈ.
ΠΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΡΠΎΡΠΈΡΠ°ΡΠ΅/Π±ΡΠΈΡΠ΅ΡΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΈ ΠΊΠΎΠΏΠΈΠΈ, ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΡΠ΅ nexus_backup_rotate: true
ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ Π±ΡΠΎΡΠΎΡ Π½Π° ΡΠ΅Π·Π΅ΡΠ²Π½ΠΈ ΠΊΠΎΠΏΠΈΠΈ ΡΡΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π³ΠΈ Π·Π°ΡΡΠ²Π°ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ nexus_backup_keep_rotations
(ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ 4).
ΠΠΎΠ³Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠΎΡΠ°ΡΠΈΡΠ°, Π°ΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π·Π°ΡΡΠ΅Π΄ΠΈΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΠΏΡΠΎΡΡΠΎΡ Π½Π° Π΄ΠΈΡΠΊΠΎΡ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΠ΅Π·Π΅ΡΠ²Π½Π° ΠΊΠΎΠΏΠΈΡΠ°,
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ nexus_backup_rotate_first: true
. ΠΠ²Π° ΡΠ΅ Π³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎΡΠΎ ΡΠΎΡΠΈΡΠ°ΡΠ΅/Π±ΡΠΈΡΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½Π° ΠΊΠΎΠΏΠΈΡΠ°. Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, ΡΠΎΡΠ°ΡΠΈΡΠ°ΡΠ° ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ ΡΠ΅Π·Π΅ΡΠ²Π½Π° ΠΊΠΎΠΏΠΈΡΠ°. ΠΠ΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΈΠΌΠ°ΡΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° Π²ΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ ΡΡΠ°ΡΠΈΡΠ΅ Π±Π΅ΠΊΠ°ΠΏ
ΡΠ΅ ΡΠ΅ ΠΈΠ·Π±ΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠ΅ΠΊΠΎΠ²Π½Π°ΡΠ° ΡΠ΅Π·Π΅ΡΠ²Π½Π° ΠΊΠΎΠΏΠΈΡΠ°.
ΠΠΎΡΡΠ°ΠΏΠΊΠ° Π·Π° ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°ΡΠ΅
Π‘ΡΠ°ΡΡΡΠ²Π°Ρ ΠΏΠ»Π΅ΡΠ±ΡΠΊ ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, 2017-12-17-21-00-00 Π·Π° 17 Π΄Π΅ΠΊΠ΅ΠΌΠ²ΡΠΈ 2017 Π³ΠΎΠ΄ΠΈΠ½Π° Π²ΠΎ 21:00 ΡΠ°ΡΠΎΡ
ΠΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π½Π° Π²ΡΡΠΊΠ°ΡΠ°
ΠΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΡΠ²Π°ΡΠ΅: ΠΎΠ²Π° ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΡΠ΅ Π³ΠΈ ΠΈΠ·Π±ΡΠΈΡΠ΅ Π²Π°ΡΠΈΡΠ΅ ΡΠ΅ΠΊΠΎΠ²Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠΎΠΊΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ, Π·Π°Π΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΠΏΡΠ°Π²Π΅ΡΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½Π° ΠΊΠΎΠΏΠΈΡΠ° ΠΏΠΎΡΠ°Π½ΠΎ
ΠΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° nexus_purge
Π°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΎΠ΄ Π½ΡΠ»Π° ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° ΡΠ° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠ°ΡΠ° Π½Π° nexus ΡΠΎ ΠΎΡΡΡΡΠ°Π½Π΅ΡΠΈ ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ.
ansible-playbook -i your/inventory.ini your_nexus_playbook.yml -e nexus_purge=true
ΠΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ ΡΠ° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠ°ΡΠ° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° ΠΏΠΎ ΠΏΡΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°
nexus_default_admin_password: 'admin123'
ΠΠ²Π° Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΌΠ΅Π½ΡΠ²Π° Π²ΠΎ Π²Π°ΡΠ°ΡΠ° ΠΊΠ½ΠΈΠ³Π° Π·Π° ΠΈΠ³ΡΠΈ. ΠΠ²Π°Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π΅ ΠΏΠΎΠΏΠΎΠ»Π½Π΅ΡΠ° ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π½Π° Nexus ΠΊΠΎΠ³Π° ΠΏΡΠ²ΠΏΠ°Ρ ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ° ΡΠΌΠ΅Π½ΠΈΠΌΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° Π²ΠΎ nexus_admin_password
.
ΠΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΡΠ° ΡΠΌΠ΅Π½ΠΈΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠ°ΡΠ° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° ΠΏΠΎ ΠΏΡΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ Π΄Π° ΡΠ° ΡΠΌΠ΅Π½ΠΈΡΠ΅ Π½Π° ΡΡΠ°ΡΠ°ΡΠ° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ°. ΠΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π°ΡΠ° nexus_admin_password
Π²ΠΎ Π²Π°ΡΠ°ΡΠ° ΠΊΠ½ΠΈΠ³Π° Π·Π° ΠΈΠ³ΡΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π²ΡΡΠΈΡΠ΅:
ansible-playbook -i your/inventory.ini your_playbook.yml -e nexus_default_admin_password=oldPassword
Π’Π΅Π»Π΅Π³ΡΠ°ΠΌΡΠΊΠΈ ΠΊΠ°Π½Π°Π» Π½Π° Nexus Sonatype:
Π‘Π°ΠΌΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½ΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Π°Ρ Π²ΠΎ Π°Π½ΠΊΠ΅ΡΠ°ΡΠ°.
ΠΠΎΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ° Π·Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅?
-
Sonatype Nexus Π΅ Π±Π΅ΡΠΏΠ»Π°ΡΠ΅Π½
-
Sonatype Nexus ΠΏΠ»Π°ΡΠΈ
-
ΠΡΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΡΠ°ΡΠ° Π΅ Π±Π΅ΡΠΏΠ»Π°ΡΠ½Π°
-
ΠΡΡΠ΅ΡΠ°ΠΊΡΠΎΡΠ½ΠΎ ΠΏΠ»Π°ΡΠ΅Π½ΠΎ
-
ΠΡΠΈΡΡΠ°Π½ΠΈΡΡΠ΅
-
ΠΠ²ΡΠΈΠ½ΠΈ
ΠΠ»Π°ΡΠ°Π° 9 ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ. 3 ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ ΡΠ΅ Π²ΠΎΠ·Π΄ΡΠΆΠ°Π°.
ΠΠ·Π²ΠΎΡ: www.habr.com