Sonatype Nexus – zintegrowana platforma, która umożliwia programistom proxy, przechowywanie i zarządzanie zależnościami Java (Maven), obrazami Docker, Pythonem, Ruby, NPM, Bower, pakietami RPM, gitlfs, Apt, Go, Nuget oraz dystrybucję własnego oprogramowania.
Po co potrzebny jest Sonatype Nexus?
- Do przechowywania prywatnych artefaktów;
- Do cachowania artefaktów pobieranych z Internetu;
Artefakty obsługiwane w podstawowej wersji Sonatype Nexus:
- Java, Maven (jar)
- Docker
- Python (pip)
- Ruby (gem)
- NPM
- Bower
- Yum (rpm)
- gitlfs
- Raw
- Apt (deb)
- Go
- Nuget
Artefakty wspierane przez społeczność:
- Composer
- Conan
- CPAN
- ELPA
- Helm
- P2
- R
Instalacja Sonatype Nexus z użyciem
Wymagania
- Przeczytaj o używaniu ansible w Internecie.
- Zainstaluj ansible
pip install ansiblena stacji roboczej, na której uruchamiany jest playbook. - Zainstaluj na stacji roboczej, na której uruchamiany jest playbook.
- Zainstaluj na stacji roboczej, na której uruchamiany jest playbook.
- Ta rola była testowana na CentOS 7, Ubuntu Xenial (16.04) oraz Bionic (18.04), Debian Jessie i Stretch
jmespathbiblioteka musi być zainstalowana na stacji roboczej, na której uruchamiany jest playbook. Aby to zrobić, wykonajsudo pip install -r requirements.txt- Zapisz plik playbook (przykład poniżej) jako nexus.yml
- Uruchom instalację nexus
ansible-playbook -i host nexus.yml
Przykład ansible-playbook do instalacji nexus bez LDAP z repozytoriami Maven (java), Docker, Python, Ruby, NPM, Bower, RPM i 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: 'Dostęp do odczytu i przeglądania wszystkich repozytoriów'
repository: '*'
actions:
- read
- browse
- name: company-project-deploy
description: 'Wdrożenia do projektu firmowego'
repository: company-project
actions:
- add
- edit
nexus_roles:
- id: Developpers # mapuje do grupy LDAP
name: developers
description: Wszyscy programiści
privileges:
- nx-search-read
- all-repos-read
- company-project-deploy
roles: []
nexus_local_users:
- username: jenkins # używane jako klucz do aktualizacji
first_name: Jenkins
last_name: CI
email: support@company.com
password: "s3cr3t"
roles:
- Developpers # identyfikator roli
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. Zmień nexus_config_yum na true aby utworzyć repozytorium yum
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. Zmień nexus_config_npm na true aby utworzyć repozytorium npm
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. Zmień nexus_config_docker na true aby utworzyć repozytorium docker
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. Zmień nexus_config_bower na true aby utworzyć repozytorium bower
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. Zmień nexus_config_pypi na true aby utworzyć repozytorium pypi
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. Zmień nexus_config_rubygems na true aby utworzyć repozytorium rubygems
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. Zmień nexus_config_gitlfs na true aby utworzyć repozytorium gitlfs
nexus_config_gitlfs: true
nexus_repos_gitlfs_hosted:
- name: gitlfs-hosted
roles:
- { role: geerlingguy.java }
# Tylko Debian/Ubuntu
# - { role: geerlingguy.apache, apache_create_vhosts: no, apache_mods_enabled: ["proxy_http.load", "headers.load"], apache_remove_default_vhost: true, tags: ["geerlingguy.apache"] }
# Tylko RedHat/CentOS
- { 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'] }Zrzuty ekranu:


Zmienna roli
Zmienna Roli
Zmienne z wartościami domyślnymi (patrz default/main.yml):
Zmienne ogólne
nexus_version: ''
nexus_timezone: 'UTC'Domyślnie rola zainstaluje najnowszą dostępną wersję Nexus. Możesz poprawić wersję, zmieniając zmienną nexus_version. Zobacz dostępne wersje na .
Jeśli zmienisz wersję na nowszą, rola spróbuje zaktualizować zainstalowany Nexus.
Jeżeli używasz starszej wersji Nexus niż najnowsza, musisz upewnić się, że nie korzystasz z funkcji, które nie są dostępne w zainstalowanej wersji (na przykład hostowanie repozytoriów yum jest dostępne dla nexus powyżej 3.8.0, git lfs repo dla nexus powyżej 3.3.0 itd.)
strefa czasowa nexus to nazwa strefy czasowej Java, która może być użyteczna w połączeniu z poniższymi wyrażeniami cron dla zadań zaplanowanych nexus.
Port Nexus i ścieżka kontekstowa
nexus_default_port: 8081
nexus_default_context_path: '/ 'Port i ścieżka kontekstowa procesu połączenia Java. nexus_default_context_path musi zawierać ukośnik, gdy jest ustawiony, na przykład: nexus_default_context_path: '/nexus/'.
Użytkownik i grupa systemu operacyjnego Nexus
nexus_os_group: 'nexus'
nexus_os_user: 'nexus'Użytkownik i grupa, używane do posiadania plików Nexus i uruchamiania usługi, zostaną utworzone przez rolę, jeśli będą nieobecne.
nexus_os_user_home_dir: '/home/nexus'Zezwól na zmianę domyślnego katalogu domowego dla użytkownika nexus
Katalogi instancji Nexus
nexus_installation_dir: '/opt'
nexus_data_dir: '/var/nexus'
nexus_tmp_dir: "{{ (ansible_os_family == 'RedHat') | ternary('/var/nexus-tmp', '/tmp/nexus') }}"Katalogi Nexus.
nexus_installation_dirzawiera zainstalowane pliki wykonywalnenexus_data_dirzawiera całą konfigurację, repozytoria i załadowane artefakty. Dostosowane ścieżki blobstorenexus_data_dirmogą być skonfigurowane, patrz poniżejnexus_blobstores.nexus_tmp_dirzawiera wszystkie pliki tymczasowe. Domyślna ścieżka dla redhat została przeniesiona z/tmpaby uniknąć potencjalnych problemów z automatycznymi procedurami czyszczenia. Zobacz #168.
Konfiguracja użycia pamięci Nexus JVM
nexus_min_heap_size: "1200M"
nexus_max_heap_size: "{{ nexus_min_heap_size }}"
nexus_max_direct_memory: "2G"To są domyślne ustawienia dla Nexus. Proszę nie zmieniać tych wartości Jeśli nie przeczytałeś i nie rozumiesz, co one robią.
Jako drugie ostrzeżenie, oto fragment z powyższego dokumentu:
Nie zaleca się zwiększania pamięci JVM heap ponad zalecane wartości w celu poprawy wydajności. Może to w rzeczywistości przynieść odwrotny efekt, prowadząc do niepotrzebnej pracy systemu operacyjnego.
Hasło administratora
nexus_admin_password: 'changeme'Hasło konta «admin» do konfiguracji. Działa to tylko podczas pierwszej instalacji domyślnej. Proszę zapoznać się z [Zmień hasło administratora po pierwszej instalacji](# change-admin-password-after-first-install), jeśli chcesz zmienić je później za pomocą roli.
Zdecydowanie nie zaleca się przechowywania swojego hasła w postaci otwartego tekstu w playbooku, a zamiast tego używać [szyfrowania ansible-vault] () (lub wbudowanego lub w osobnym pliku załadowanym na przykład za pomocą include_vars)
Domyślny dostęp anonimowy
nexus_anonymous_access: falseDomyślny dostęp anonimowy jest wyłączony. Więcej informacji o .
Publiczna nazwa hosta
nexus_public_hostname: 'nexus.vm'
nexus_public_scheme: httpsPełna nazwa domeny i schemat (https lub http), przez który instancja Nexus będzie dostępna dla swoich klientów.
Dostęp API dla tej roli
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 }}"Te zmienne kontrolują, w jaki sposób rola łączy się z API Nexus w celu dostarczenia.
Tylko dla zaawansowanych użytkowników. Najprawdopodobniej nie chcesz zmieniać tych domyślnych ustawień.
Konfiguracja proxy odwrotnego
httpd_setup_enable: false
httpd_server_name: "{{ nexus_public_hostname }}"
httpd_default_admin_email: "admin@example.com"
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: trueZainstaluj .
Wymaga to zainstalowania httpd. Uwaga: gdy dla httpd_setup_enable ustawiono wartośćtrue, nexus łączy się z 127.0.0.1:8081, dzięki czemu nie jest bezpośrednio dostępny przez port HTTP 8081 z zewnętrznego adresu IP.
Domyślnie używana nazwa hosta to nexus_public_hostname. Jeśli potrzebujesz różnych nazw z jakiegokolwiek powodu, możesz ustawić httpd_server_name z inną wartością.
Z httpd_copy_ssl_files: true (domyślnie) wcześniej wspomniane certyfikaty powinny znajdować się w twoim katalogu playbook i będą kopiowane na serwer oraz konfigurowane w apache.
Jeśli chcesz użyć istniejących certyfikatów na serwerze, ustaw httpd_copy_ssl_files: false i podaj następujące zmienne:
# 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 }}"lokalizacja_pliku_certyfikatu_ssl_httpd jest opcjonalne i powinno zostać nieokreślone, jeśli nie chcesz konfigurować pliku łańcucha
httpd_default_admin_email: "admin@example.com"Ustaw domyślny adres e-mail administratora
Konfiguracja LDAP
Połączenia LDAP i obszar bezpieczeństwa są domyślnie wyłączone
nexus_ldap_realm: false
ldap_connections: [], każdy element wygląda następująco:
nexus_ldap_realm: true
ldap_connections:
- ldap_name: 'Moja firma LDAP' # używane jako klucz do aktualizacji konfiguracji ldap
ldap_protocol: 'ldaps' # ldap lub ldaps
ldap_hostname: 'ldap.moja-firma.com'
ldap_port: 636
ldap_use_trust_store: false # Czy używać certyfikatów w zaufanym sklepie nexus
ldap_search_base: 'dc=moja-firma,dc=net'
ldap_auth: 'none' # lub simple
ldap_auth_username: 'nazwa_użytkownika' # jeśli auth = simple
ldap_auth_password: 'hasło' # jeśli auth = simple
ldap_user_base_dn: 'ou=użytkownicy'
ldap_user_filter: '(cn=*)' # (opcjonalnie)
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=grupy'
ldap_group_object_class: 'posixGroup'
ldap_group_id_attribute: 'cn'
ldap_group_member_attribute: 'memberUid'
ldap_group_member_format: '${nazwa_użytkownika}'
ldap_group_subtree: falsePrzykład konfiguracji LDAP dla anonimowej autoryzacji (anonimowe powiązanie), jest to także "minimalna" konfiguracja:
nexus_ldap_realm: true
ldap_connection:
- ldap_name: 'Najprostsza konfiguracja LDAP'
ldap_protocol: 'ldaps'
ldap_hostname: 'annuaire.moja-firma.com'
ldap_search_base: 'dc=moja-firma,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'Przykład konfiguracji LDAP dla prostej autoryzacji (z użyciem konta DSA):
nexus_ldap_realm: true
ldap_connections:
- ldap_name: 'Konfiguracja LDAP z DSA'
ldap_protocol: 'ldaps'
ldap_hostname: 'annuaire.moja-firma.com'
ldap_port: 636
ldap_use_trust_store: false
ldap_auth: 'simple'
ldap_auth_username: 'cn=mynexus,ou=dsa,dc=moja-firma,dc=net'
ldap_auth_password: "{{ vault_ldap_dsa_password }}" # lepiej trzymać hasła w skarbczyku ansible
ldap_search_base: 'dc=moja-firma,dc=net'
ldap_user_base_dn: 'ou=użytkownicy'
ldap_user_object_class: 'inetOrgPerson'
ldap_user_id_attribute: 'uid'
ldap_user_real_name_attribute: 'cn'
ldap_user_email_attribute: 'mail'
ldap_user_subtree: falsePrzykład konfiguracji LDAP dla prostej autoryzacji (z użyciem konta DSA) + grupy mapowane jako role:
nexus_ldap_realm: true
ldap_connections
- ldap_name: 'Konfiguracja LDAP z 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 }}" # lepiej trzymać hasła w skarbczyku ansible
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: falsePrzykład konfiguracji LDAP dla prostej autoryzacji (z wykorzystaniem konta DSA) + grupy, dynamicznie mapowane jako role:
nexus_ldap_realm: true
ldap_connections:
- ldap_name: 'Konfiguracja LDAP z 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 }}" # lepiej trzymać hasła w skarbczyku ansible
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'Uprawnienia
nexus_privileges:
- name: all-repos-read # używane jako klucz do aktualizacji uprawnienia
# type: <jeden z application, repository-admin, repository-content-selector, repository-view, script lub wildcard>
description: 'Dostęp do odczytu i przeglądania wszystkich repozytoriów'
repository: '*'
actions: # mogą to być add, browse, create, delete, edit, read lub * (wszystkie)
- read
- browse
# pattern: wzór
# domain: domena
# script_name: nazwaLista do konfiguracji. Zobacz dokumentację i interfejs graficzny, aby sprawdzić, jakie zmienne powinny być ustawione w zależności od typu uprawnienia.
Te elementy łączą się z następującymi wartościami domyślnymi:
_nexus_privilege_defaults:
type: repository-view
format: maven2
actions:
- readRole (w kontekście Nexus)
nexus_roles:
- id: Developpers # może mapować na id grupy LDAP, również używane jako klucz do aktualizacji roli
name: developers
description: Wszyscy deweloperzy
privileges:
- nx-search-read
- all-repos-read
roles: [] # odniesienia do innych nazw rólLista do konfiguracji.
Użytkownicy
nexus_local_users: []
# - username: jenkins # używane jako klucz do aktualizacji
# state: present # wartość domyślna, jeśli pominięta, użyj 'absent', aby usunąć użytkownika
# first_name: Jenkins
# last_name: CI
# email: support@company.com
# password: "s3cr3t"
# roles:
# - developers # id roliLista lokalnych (non-LDAP) użytkowników/kont do utworzenia w nexus.
Lista lokalnych (nie LDAP) użytkowników/kont do utworzenia w Nexus.
nexus_ldap_users: []
# - username: j.doe
# state: present
# roles:
# - "nx-admin"Mapowanie użytkowników/ról Ldap. Stan nieobecny usunięcie ról z istniejącego użytkownika, jeśli on już istnieje.
Użytkownicy Ldap nie są usuwani. Próba przydzielenia roli dla nieistniejącego użytkownika spowoduje błąd.
Selektory treści
nexus_content_selectors:
- name: docker-login
description: Selektor dla uprawnień logowania do dockera
search_expression: format=="docker" and path=~"/v2/"Aby uzyskać więcej informacji o selektorze treści, zobacz. .
Aby użyć selektora treści, dodaj nową uprawnienie z type: repository-content-selector i odpowiednimcontentSelector
- name: docker-login-privilege
type: repository-content-selector
contentSelector: docker-login
description: 'Logowanie do rejestru Docker'
repository: '*'
actions:
- read
- browseBlobstore i repozytoria
nexus_delete_default_repos: falseUsuń repozytoria z początkowej konfiguracji instalacyjnej nexus. Ten krok jest wykonywany tylko przy pierwszej instalacji (gdy nexus_data_dir został wykryty jako pusty).
Usunięcie repozytoriów z domyślnej konfiguracji dla Nexus. Ten krok jest wykonywany tylko przy pierwszej instalacji (gdy nexus_data_dir jest pusty).
nexus_delete_default_blobstore: falseUsuń domyślny blobstore z początkowej konfiguracji instalacyjnej nexus. Można to zrobić tylko jeśli nexus_delete_default_repos: true i wszystkie skonfigurowane repozytoria (zobacz poniżej) mają wyraźny blob_store: custom. Ten krok jest wykonywany tylko przy pierwszej instalacji (gdy nexus_data_dir został wykryty jako pusty).
Usunięcie przechowywania blobów (binarne artefakty) jest domyślnie wyłączone w początkowej konfiguracji. Aby usunąć przechowywanie blobów (binarne artefakty), wyłącz nexus_delete_default_repos: true. Ten krok jest wykonywany tylko przy pierwszej instalacji (gdy nexus_data_dir jest pusty).
nexus_blobstores: []
# przykład elementu blobstore :
# - 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 }}"do utworzenia. Ścieżka blobstore i repozytorium blobstore nie mogą być aktualizowane po początkowym utworzeniu (wszystkie aktualizacje tutaj będą ignorowane podczas ponownego udostępniania).
Konfiguracja blobstore na S3 jest udostępniana dla wygody i nie jest częścią zautomatyzowanych testów, które przeprowadzamy na travis. Proszę zwrócić uwagę, że przechowywanie na S3 jest zalecane tylko dla instancji wdrożonych na AWS.
Tworzenie . Ścieżka do przechowywania i repozytorium przechowywań nie mogą być aktualizowane po początkowym utworzeniu (wszystkie aktualizacje tutaj będą ignorowane podczas ponownej instalacji).
Konfiguracja przechowywania obiektów BLOB na S3 jest dostarczana dla wygody. Proszę zauważyć, że przechowywanie na S3 jest zalecane tylko dla instancji wdrożonych na 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: 1440Powyższy przykład konfiguracji Maven.
nexus_repos_maven_hosted:
- name: private-release
version_policy: release
write_policy: allow_once # jeden z "allow", "allow_once" lub "deny"Maven konfiguracja. Konfiguracja negatywnego cache jest opcjonalna i domyślnie będzie korzystać z powyższych wartości, jeśli zostanie pominięta.
Konfiguracja Maven. Konfiguracja negatywnego cache (-1) jest opcjonalna i domyślnie użyje powyższych wartości, jeśli nie zostanie podana.
nexus_repos_maven_group:
- name: public
member_repos:
- central
- jbossKonfiguracja Maven.
Wszystkie trzy typy repozytoriów łączą się z następującymi wartościami domyślnymi:
_nexus_repos_maven_defaults:
blob_store: default # Uwaga: nie można aktualizować po utworzeniu repozytorium
strict_content_validation: true
version_policy: release # release, snapshot lub mixed
layout_policy: strict # strict lub permissive
write_policy: allow_once # jeden z "allow", "allow_once" lub "deny"
maximum_component_age: -1 # domyślna wartość w GUI Nexus. Tylko dla proxy
maximum_metadata_age: 1440 # domyślna wartość w GUI Nexus. Tylko dla proxy
negative_cache_enabled: true # domyślna wartość w GUI Nexus. Tylko dla proxy
negative_cache_ttl: 1440 # domyślna wartość w GUI Nexus. Tylko dla proxyRodzaje repozytoriów Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS i yum:
zobacz defaults/main.yml dla tych opcji:
Repozytoria Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS i yum są domyślnie wyłączone:
Zobacz defaults/main.yml dla tych opcji:
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: falseUwaga, może być potrzebne włączenie określonych obszarów bezpieczeństwa, jeśli chciałbyś używać innych typów repozytoriów poza maven. Domyślnie jest to false
nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false # wymagane do anonimowego dostępu do DockerZasięg Użytkownika Zdalnego również może być włączony przy użyciu
nexus_rut_auth_realm: truei nagłówek może być skonfigurowany przez określenie
nexus_rut_auth_header: "CUSTOM_HEADER"Zadania zaplanowane
nexus_scheduled_tasks: []
# # Przykładowe zadanie do kompresji blobstore :
# - name: compact-docker-blobstore
# cron: '0 0 22 * * ?'
# typeId: blobstore.compact
# task_alert_email: alerts@example.org # opcjonalnie
# taskProperties:
# blobstoreName: {{ nexus_blob_names.docker.blob }} # wszystkie atrybuty zadania są przechowywane jako ciągi przez nexus wewnętrznie
# # Przykładowe zadanie do usuwania snapshotów maven
# - name: Purge-maven-snapshots
# cron: '0 50 23 * * ?'
# typeId: repository.maven.remove-snapshots
# task_alert_email: alerts@example.org # opcjonalnie
# taskProperties:
# repositoryName: "*" # * dla wszystkich repozytoriów. Zmień na nazwę repozytorium, jeśli chcesz tylko jedno konkretne
# minimumRetained: "2"
# snapshotRetentionDays: "2"
# gracePeriodInDays: "2"
# booleanTaskProperties:
# removeIfReleased: true
# # Przykładowe zadanie do usuwania nieużywanych manifestów i obrazów dockera
# - name: Purge unused docker manifests and images
# cron: '0 55 23 * * ?'
# typeId: "repository.docker.gc"
# task_alert_email: alerts@example.org # opcjonalnie
# taskProperties:
# repositoryName: "*" # * dla wszystkich repozytoriów. Zmień na nazwę repozytorium, jeśli chcesz tylko jedno konkretne
# # Przykładowe zadanie do usuwania niekompletnych przesyłek docker
# - name: Purge incomplete docker uploads
# cron: '0 0 0 * * ?'
# typeId: "repository.docker.upload-purge"
# task_alert_email: alerts@example.org # opcjonalnie
# taskProperties:
# age: "24" do konfiguracji. typeId i specyficzne dla zadaniataskProperties/booleanTaskProperties można zgadywać lub:
- z hierarchii typów Java
org.sonatype.nexus.scheduling.TaskDescriptorSupport - sprawdzając formularz HTML do tworzenia zadania w swojej przeglądarce
- z monitorowania żądań AJAX w przeglądarce podczas ręcznego konfigurowania zadania.
Właściwości zadania muszą być zadeklarowane w odpowiednim bloku yaml w zależności od ich typu:
taskPropertiesdla wszystkich właściwości ciągowych (tzn. nazw repozytoriów, nazw magazynów, okresów czasu …).booleanTaskPropertiesdla wszystkich właściwości logicznych (tzn. w głównej mierze checkboxy w graficznym interfejsie tworzenia zadania nexusa).
Kopie zapasowe
nexus_backup_configure: false
nexus_backup_cron: '0 0 21 * * ?' # Zobacz definicję wyrażeń cron w interfejsie GUI do tworzenia zadań w nexus
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 # Domyślnie zachowaj 4 rotacji kopii zapasowych (bieżąca + ostatnie 3)Kopia zapasowa nie będzie skonfigurowana, dopóki nie przełączysz nexus_backup_configure do true.
W takim przypadku zaplanowane zadanie skryptu będzie konfigurowane do uruchomienia w Nexusie
z interwałem określonym w nexus_backup_cron (domyślnie 21:00 każdego dnia).
Zobacz [szablon groovy dla tego zadania](templates / backup.groovy.j2) w celu uzyskania dalszych informacji.
To zaplanowane zadanie nie jest zależne od innych nexus_scheduled_tasks, które
deklarujesz w swoim playbooku.
Jeśli chcesz rotować/usunąć kopie zapasowe, ustaw nexus_backup_rotate: true i skonfiguruj liczbę kopii zapasowych, które chciałbyś zachować za pomocą nexus_backup_keep_rotations (domyślnie 4).
Podczas używania rotacji, jeśli chcesz zaoszczędzić dodatkowe miejsce na dysku podczas procesu tworzenia kopii zapasowej,
Możesz ustawić nexus_backup_rotate_first: true. To ustawi wstępną rotację/usunięcie przed utworzeniem kopii zapasowej. Domyślnie rotacja odbywa się po utworzeniu kopii zapasowej. Zauważ, że w tym przypadku stare kopie zapasowe
zostaną usunięte przed utworzeniem bieżącej kopii zapasowej.
Procedura przywracania
Uruchom playbook z parametrem -e nexus_restore_point=
(na przykład, 2017-12-17-21-00-00 dla 17 grudnia 2017 o 21:00
Usunięcie nexus
Ostrzeżenie: to całkowicie usunie bieżące dane. Upewnij się, że wykonałeś kopię zapasową wcześniej, jeśli to konieczne.
Użyj zmiennej nexus_purge, jeśli potrzebujesz zacząć od zera i ponownie zainstalować instancję nexus z usunięciem wszystkich danych.
ansible-playbook -i your/inventory.ini your_nexus_playbook.yml -e nexus_purge=trueZmiana hasła administratora po pierwszej instalacji
nexus_default_admin_password: 'admin123'To nie powinno być zmieniane w twoim playbooku. Ta zmienna jest wypełniana standardowym hasłem administratora Nexus podczas pierwszej instalacji i zapewnia, że możemy zmienić hasło administratora na nexus_admin_password.
Jeśli chcesz zmienić hasło administratora po pierwszej instalacji, możesz tymczasowo ustawić je na stare hasło z linii poleceń. Po zmianie nexus_admin_password w swoim playbooku możesz uruchomić:
ansible-playbook -i your/inventory.ini your_playbook.yml -e nexus_default_admin_password=oldPasswordKanał Telegram o Nexus Sonatype:
Tylko zarejestrowani użytkownicy mogą brać udział w ankiecie. , proszę.
Z jakich repozytoriów artefaktów korzystasz?
Sonatype Nexus darmowy
Sonatype Nexus płatny
Artifactory darmowy
Artifactory płatny
Harbor
Pulp
Zagłosowało 9 użytkowników. Wstrzymało się 3 użytkowników.
Źródło: habr.com
