Installazione è cunfigurà Nexus Sonatype utilizendu l'infrastruttura cum'è avvicinamentu di codice

Sonatype Nexus hè una piattaforma integrata per via di quale i sviluppatori ponu proxy, almacenà è gestisce e dipendenze di Java (Maven), Docker, Python, Ruby, NPM, Bower images, pacchetti RPM, gitlfs, Apt, Go, Nuget, è distribuisce a so sicurezza di software.

Perchè avete bisognu di Sonatype Nexus?

  • Per almacenà artefatti privati;
  • Per caching artefatti chì sò scaricati da Internet;

Artifatti supportati in u pacchettu di basa Sonatype Nexus:

  • Java, Maven (jar)
  • Docker
  • Python (pip)
  • Ruby (gemme)
  • NPM
  • Bowers
  • Yum (rpm)
  • gitlfs
  • crudu
  • Apt (deb)
  • Go
  • Nuget

Artifatti supportati da a cumunità:

  • cumpusituri
  • Atti
  • CPAN
  • ELPA
  • Helm
  • P2
  • R

Stallà Sonatype Nexus cù https://github.com/ansible-ThoTeam/nexus3-oss

esigenze

  • Leghjite nantu à l'usu di ansible in Internet.
  • Installa ansible pip install ansible nantu à a stazione di travagliu induve u playbook corre.
  • Installa geerlingguy.java nantu à a stazione di travagliu induve u playbook corre.
  • Installa geerlingguy.apache nantu à a stazione di travagliu induve u playbook corre.
  • Stu rolu hè statu pruvatu in CentOS 7, Ubuntu Xenial (16.04) è Bionic (18.04), Debian Jessie è Stretch.
  • jmespath A biblioteca deve esse installata nantu à a stazione di travagliu induve u playbook hè in esecuzione. Per installà: sudo pip install -r requirements.txt
  • Salvà u schedariu di playbook (esempiu sottu) à u schedariu nexus.yml
  • Eseguite l'installazione di nexus ansible-playbook -i host nexus.yml

Esempiu di ansible-playbook per installà nexus senza LDAP cù Maven (java), Docker, Python, Ruby, NPM, Bower, RPM è repository 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'] }

Screenshots:

Installazione è cunfigurà Nexus Sonatype utilizendu l'infrastruttura cum'è avvicinamentu di codice

Installazione è cunfigurà Nexus Sonatype utilizendu l'infrastruttura cum'è avvicinamentu di codice

Roli variabili

Variabili di rolu

Variabili cù valori predeterminati (vede default/main.yml):

Variabili generale

    nexus_version: ''
    nexus_timezone: 'UTC'

Per automaticamente, u rolu vi stallà l'ultima versione dispunibule di Nexus. Pudete riparà a versione cambiendu a variabile nexus_version. Vede e versioni dispunibili à https://www.sonatype.com/download-oss-sonatype.

Se cambiate à una versione più nova, u rolu pruverà à aghjurnà a vostra installazione Nexus.

Sè vo aduprate una versione più vechja di Nexus cà l'ultime, duvete assicurà chì ùn site micca usu di funzioni chì ùn sò micca dispunibili in a versione installata (per esempiu, l'ospiti di repositori yum sò dispunibili per nexus più grande di 3.8.0, git lfs repo). per nexus più grande di 3.3.0 ecc.)

nexus timezone hè u nome di u fusu orariu Java, chì pò esse utile in cumminazione cù e seguenti espressioni cron per i travaglii nexus_scheduled.

U portu Nexus è u percorsu di u cuntestu

    nexus_default_port: 8081
    nexus_default_context_path: '/'

U portu è u percorsu di u cuntestu di u prucessu di cunnessione Java. nexus_default_context_path deve cuntene una barra in avanti quandu hè stabilitu, per esempiu: nexus_default_context_path: '/nexus/'.

Nexus OS User è Gruppu

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

L'utilizatore è u gruppu utilizatu per pussede i fugliali Nexus è eseguisce u serviziu serà creatu da u rolu s'ellu manca.

    nexus_os_user_home_dir: '/home/nexus'

Permette di cambià u cartulare di casa predeterminatu per l'utilizatore nexus

Directory d'istanze Nexus

    nexus_installation_dir: '/opt'
    nexus_data_dir: '/var/nexus'
    nexus_tmp_dir: "{{ (ansible_os_family == 'RedHat') | ternary('/var/nexus-tmp', '/tmp/nexus') }}"

Cataloghi Nexus.

  • nexus_installation_dir cuntene i fugliali eseguibili installati
  • nexus_data_dir cuntene tutte e cunfigurazioni, repository è artefatti scaricati. Percorsi di blobstore persunalizati nexus_data_dir pò esse persunalizatu, vede quì sottu nexus_blobstores.
  • nexus_tmp_dir cuntene tutti i schedarii tempuranee. U percorsu predeterminatu per redhat hè statu spustatu da /tmp per superà i prublemi potenziali cù i prucessi di pulizia automatica. Vede # 168.

Configurazione di Nexus JVM Memory Usage

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

Quessi sò i paràmetri predeterminati per Nexus. Per piacè ùn cambià sti valori Se ùn avete micca lettu sezione di memoria di i bisogni di u sistema nexus è ùn capiscenu micca ciò chì facenu.

Cum'è un secondu avvertimentu, quì hè un estrattu di u documentu sopra:

Ùn hè cunsigliatu per aumentà a memoria di u heap JVM oltre i valori cunsigliati in un tentativu di migliurà u rendiment. Questu pò esse veramente l'effettu cuntrariu, risultatu in un travagliu innecessariu per u sistema operatore.

Password amministratore

    nexus_admin_password: 'changeme'

A password di u contu "admin" per a cunfigurazione. Questu funziona solu nantu à a prima installazione predeterminata. Per piacè vede [Cambia a password di l'amministratore dopu a prima installazione] (# change-admin-password-after-first-install) se vulete cambià dopu utilizendu un rolu.

Hè ricumandemu fermamente micca di almacenà a vostra password in testu chjaru in u playbook, ma di utilizà [encryption ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (o inline o in un schedariu separatu caricatu cù per esempiu include_vars)

Accessu anonimu per difettu

    nexus_anonymous_access: false

L'accessu anonimu hè disattivatu per difettu. Leghjite più nantu accessu anonimu.

Nome d'ospite publicu

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

U nome di duminiu cumplettamente qualificatu è schema (https o http) sottu chì l'istanza Nexus serà dispunibule per i so clienti.

Accessu API per stu rolu

    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 }}"

Queste variàbili cuntrolanu cumu u rolu si cunnetta à l'API Nexus per a pruvista.
Solu per utilizatori avanzati. Probabilmente ùn vulete micca cambià sti paràmetri predeterminati

Configurazione di un proxy inversu

    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

Installa Proxy inversu SSL.
Per fà questu, avete bisognu di stallà httpd. Nota: quandu per httpd_setup_enable valore stabilitutrue, Nexus contatti 127.0.0.1:8081, cusì ùn essendu direttamente accessibile via HTTP portu 8081 da l'indirizzu IP esternu.

U nome d'ospitu predeterminatu utilizatu hè nexus_public_hostname. Sè avete bisognu di nomi diffirenti per qualchì mutivu, pudete stabilisce httpd_server_name cù un significatu diversu.

С httpd_copy_ssl_files: true (per difettu) i certificati sopra deve esse in u vostru repertoriu di playbook è seranu copiati à u servitore è cunfigurati in apache.

Se vulete usà certificati esistenti nantu à u servitore, installate httpd_copy_ssl_files: false è furnisce e seguenti variabili:

    # 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 hè facultativu è deve esse lasciatu unset se ùn vulete micca persunalizà u schedariu di a catena

    httpd_default_admin_email: "[email protected]"

Stabilisci l'indirizzu email amministratore predeterminatu

Configurazione LDAP

I cunnessione LDAP è u regnu di sicurità sò disattivati ​​per automaticamente

    nexus_ldap_realm: false
    ldap_connections: []

Cunnessioni LDAP, ogni elementu s'assumiglia cusì:

    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

Esempiu di cunfigurazione LDAP per l'autentificazione anonima (binding anonimu), questu hè ancu una cunfigurazione "minima":

    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'

Esempiu di cunfigurazione LDAP per l'autentificazione simplice (usendu un contu 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

Esempiu di cunfigurazione LDAP per l'autentificazione simplice (usendu un contu DSA) + gruppi mappati cum'è roli:

    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

Esempiu di cunfigurazione LDAP per autentificazione simplice (usendu un contu DSA) + gruppi mappati dinamicamente cum'è roli:

    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'

Privilegi

    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

a lista privileggi per i paràmetri. Fighjate à a documentazione è a GUI per verificà quale variàbili deve esse stabilitu secondu u tipu di privilegiu.

Questi elementi sò cumminati cù i seguenti valori predeterminati:

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

Roles (dentru Nexus questu significa)

    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

a lista roli per i paràmetri.

Utilizatori

    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

Lista d'utilizatori / cunti lucali (non-LDAP) per creà in nexus.

Lista di utilizatori / cunti lucali (non-LDAP) per creà in Nexus.

      nexus_ldap_users: []
      # - username: j.doe
      #   state: present
      #   roles:
      #     - "nx-admin"

Mappatura Ldap di utilizatori / roli. Statu absent sguasserà roli da un utilizatore esistente se ne esiste digià.
L'utilizatori di Ldap ùn sò micca sguassati. Pruvate di stabilisce un rolu per un utilizatore inesistente darà un errore.

Selettori di cuntenutu

  nexus_content_selectors:
  - name: docker-login
    description: Selector for docker login privilege
    search_expression: format=="docker" and path=~"/v2/"

Per più infurmazione nantu à u selettore di cuntenutu, vede Documentazione.

Per utilizà u selettore di cuntenutu, aghjunghje un novu privilegiu cù type: repository-content-selector è pertinentecontentSelector

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Login to Docker registry'
  repository: '*'
  actions:
  - read
  - browse

Blobstores è repositori

    nexus_delete_default_repos: false

Eliminate i repositori da a cunfigurazione iniziale predeterminata di u nexus installà. Stu passu hè eseguitu solu nantu à a prima installazione (quandu nexus_data_dir hè statu rilevatu viotu).

Eliminazione di i repositori da a cunfigurazione predeterminata per Nexus. Stu passu hè realizatu solu durante a prima stallazione (quandu nexus_data_dir viotu).

    nexus_delete_default_blobstore: false

Eliminate u blobstore predeterminatu da a cunfigurazione predeterminata iniziale di l'installazione di nexus. Questu pò esse fattu solu se nexus_delete_default_repos: true è tutti i repositori cunfigurati (vede sottu) anu un esplicitu blob_store: custom. Stu passu hè eseguitu solu nantu à a prima installazione (quandu nexus_data_dir hè statu rilevatu viotu).

L'eliminazione di l'almacenamiento blob (artefatti binari) hè disattivata per difettu da a cunfigurazione iniziale. Per sguassà l'almacenamiento blob (artefatti binari), spegne nexus_delete_default_repos: true. Stu passu hè realizatu solu durante a prima stallazione (quandu nexus_data_dir viotu).

    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 }}"

Blobstores per creà. Un percorsu blobstore è un repository blobstore ùn pò micca esse aghjurnatu dopu a creazione iniziale (qualsiasi aghjurnamentu quì serà ignoratu in u riprovisioning).

A cunfigurazione di blobstore in S3 hè furnita cum'è comodità è ùn hè micca parte di e teste automatizate chì eseguimu in travis. Per piacè nutate chì u almacenamentu in S3 hè cunsigliatu solu per istanze implementate in AWS.

Creazione Blobstores. U percorsu di almacenamiento è u repositoriu di almacenamentu ùn ponu esse aghjurnati dopu a creazione iniziale (qualsiasi aghjurnamentu quì serà ignoratu quandu hè stallatu novu).

L'installazione di l'almacenamiento di blob in S3 hè furnita cum'è comodità. Per piacè nutate chì l'archiviazione S3 hè cunsigliatu solu per istanze implementate in 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

Sopra hè un esempiu di cunfigurazione servitore proxy Maven.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # one of "allow", "allow_once" or "deny"

Maven repositori ospitati cunfigurazione. A cunfigurazione di a cache negativa hè opzionale è serà predeterminata à i valori sopra se omessi.

Cunfigurazione repositori ospitati Maven. A cunfigurazione di cache negativa (-1) hè facultativa è serà predeterminata à i valori sopra se ùn hè micca specificatu.

    nexus_repos_maven_group:
      - name: public
        member_repos:
          - central
          - jboss

Cunfigurazione gruppi Maven.

Tutti i trè tippi di repository sò cumminati cù i seguenti valori predeterminati:

    _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 è tipi di repository yum:
vidi defaults/main.yml per queste opzioni:

I repositori Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS è yum sò disattivati ​​per difettu:
Vede defaults/main.yml per queste opzioni:

      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

Per piacè nutate chì pudete avè bisognu di attivà certi spazii di sicurezza se vulete usà altri tipi di repositori altru da maven. Questu hè falsu per difettu

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 pò ancu esse attivatu usendu

nexus_rut_auth_realm: true

è u titulu pò esse persunalizatu da definisce

nexus_rut_auth_header: "CUSTOM_HEADER"

I travaglii pianificati

    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"

I travaglii pianificati per i paràmetri. typeId è un compitu specificutaskProperties/booleanTaskProperties pudete indovinà sia:

  • da a ghjerarchia di tipu Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • cuntrollà a forma di creazione di compiti HTML in u vostru navigatore
  • da a visualizazione di e dumande AJAX in u navigatore quandu configurate manualmente un compitu.

A pruprietà di u travagliu deve esse dichjaratu in u bloccu yaml currettu secondu u so tipu:

  • taskProperties per tutte e proprietà di stringa (vale à dì nomi di repository, nomi di repository, periodi di tempu...).
  • booleanTaskProperties per tutte e proprietà logiche (vale à dì, principarmenti checkboxes in a GUI di u travagliu di creazione di nexus).

Backups

      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)

A copia di salvezza ùn serà micca cunfigurata finu à chì cambiate nexus_backup_configure в true.
In questu casu, u compitu di script pianificatu serà cunfiguratu per eseguisce in Nexus
à l'intervalle spécifié dans nexus_backup_cron (default 21:00 ogni ghjornu).
Vede [template groovy per questa attività] (templates/backup.groovy.j2) per i dettagli.
Stu compitu pianificatu hè indipendente di l'altri nexus_scheduled_taskschì tù
annunzià in u vostru playbook.

Sè vo vulete rotà / sguassà backups, stallà nexus_backup_rotate: true è cunfigurà u numeru di backups chì vulete salvà usendu nexus_backup_keep_rotations (predefinitu 4).

Quandu aduprate a rotazione, se vulete salvà spaziu di discu supplementu durante u prucessu di salvezza,
Pudete installà nexus_backup_rotate_first: true. Questu hà da cunfigurà pre-rotazione / eliminazione prima di salvezza. Per automaticamente, a rotazione si faci dopu chì una copia di salvezza hè creata. Per piacè nutate chì in questu casu i vechji backups
serà sguassatu prima chì a copia di salvezza attuale hè fatta.

Prucedura di ricuperazione

Eseguite playbook cù parametru -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(per esempiu, 2017-12-17-21-00-00 per u 17 dicembre 2017 à 21:00

Eliminazione di u nexus

Attenzione: Questu hà da sguassà cumplettamente i vostri dati attuali. Assicuratevi di fà una copia di salvezza prima se ne necessariu

Aduprà una variabile nexus_purges'ellu ci vole à ripigliate da zero è reinstallà l'istanza nexus cù tutti i dati eliminati.

ansible-playbook -i your/inventory.ini your_nexus_playbook.yml -e nexus_purge=true

Cambia a password di l'amministratore dopu a prima installazione

    nexus_default_admin_password: 'admin123'

Questu ùn deve esse cambiatu in u vostru playbook. Questa variabile hè populata cù a password di amministratore Nexus predeterminata quandu hè stallata prima è assicura chì pudemu cambià a password di amministratore in nexus_admin_password.

Se vulete cambià a password di l'amministratore dopu a prima installazione, pudete cambià temporaneamente à a vecchia password da a linea di cummanda. Dopu à cambià nexus_admin_password in u vostru playbook pudete eseguisce:

ansible-playbook -i your/inventory.ini your_playbook.yml -e nexus_default_admin_password=oldPassword

Canale Telegram nantu à Nexus Sonatype: https://t.me/ru_nexus_sonatype

Solu l'utilizatori registrati ponu participà à l'indagine. Firmà lu, per piacè.

Chì repertorii di artefatti utilizate?

  • Sonatype Nexus hè liberu

  • Sonatype Nexus hà pagatu

  • Artifactory hè liberu

  • Artifactory pagatu

  • Harbor

  • Pulp

9 utilizatori anu vutatu. 3 utilizatori si sò astenuti.

Source: www.habr.com

Add a comment