Installazione e configurazione di Nexus Sonatype utilizzando l'approccio infrastructure as code.

Sonatype Nexus – una piattaforma integrata che consente agli sviluppatori di proxy, archiviare e gestire le dipendenze Java (Maven), le immagini Docker, Python, Ruby, NPM, Bower, i pacchetti RPM, gitlfs, Apt, Go, Nuget, oltre a distribuire il proprio software.

A cosa serve Sonatype Nexus?

  • Per l'archiviazione di artifact privati;
  • Per la cache di artifact scaricati da internet;

Artifact supportati nella distribuzione base di Sonatype Nexus:

  • Java, Maven (jar)
  • Docker
  • Python (pip)
  • Ruby (gem)
  • NPM
  • Bower
  • Yum (rpm)
  • gitlfs
  • Raw
  • Apt (deb)
  • Go
  • Nuget

Artifact supportati dalla comunità:

  • Composer
  • Conan
  • CPAN
  • ELPA
  • Helm
  • P2
  • R

Installazione di Sonatype Nexus utilizzando https://github.com/ansible-ThoTeam/nexus3-oss

Requisiti

  • Leggi online sull'uso di ansible.
  • Installa ansible pip install ansible sulla workstation dove viene eseguito il playbook.
  • Installa geerlingguy.java sulla workstation dove viene eseguito il playbook.
  • Installa geerlingguy.apache sulla workstation dove viene eseguito il playbook.
  • Questo ruolo è stato testato su CentOS 7, Ubuntu Xenial (16.04) e Bionic (18.04), Debian Jessie e Stretch
  • jmespath la libreria deve essere installata sulla workstation dove viene eseguito il playbook. Per installarla eseguire sudo pip install -r requirements.txt
  • Salva il file del playbook (esempio qui sotto) come nexus.yml
  • Esegui l'installazione di nexus ansible-playbook -i host nexus.yml

Esempio di ansible-playbook per l'installazione di nexus senza LDAP con repository Maven (java), Docker, Python, Ruby, NPM, Bower, RPM e 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: 'Accesso in lettura e navigazione a tutti i reposi'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Distribuzioni per il progetto aziendale'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # mappa al gruppo LDAP
        name: developers
        description: Tutti i sviluppatori
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # usato come chiave per l'aggiornamento
        first_name: Jenkins
        last_name: CI
        email: support@azienda.com
        password: "s3cr3t"
        roles:
          - Developpers # ID ruolo qui
    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. Cambiare nexus_config_yum in true per creare repository 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. Cambiare nexus_config_npm in true per creare repository 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. Cambiare nexus_config_docker in true per creare repository 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. Cambiare nexus_config_bower in true per creare repository 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. Cambiare nexus_config_pypi in true per creare repository 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. Cambiare nexus_config_rubygems in true per creare repository 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. Cambiare nexus_config_gitlfs in true per creare repository gitlfs
    nexus_config_gitlfs: true
    nexus_repos_gitlfs_hosted:
      - name: gitlfs-hosted

  roles:
    - { role: geerlingguy.java }
    # Solo 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"] }
    # Solo 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'] }

Screenshot:

Installazione e configurazione di Nexus Sonatype utilizzando l'approccio infrastructure as code.

Installazione e configurazione di Nexus Sonatype utilizzando l'approccio infrastructure as code.

Variabili di ruolo

Role Variables

Variabili con valori di default (vedi default/main.yml):

Variabili generali

    nexus_version: ''
    nexus_timezone: 'UTC'

Per impostazione predefinita, il ruolo installerà l'ultima versione disponibile di Nexus. Puoi fissare la versione modificando la variabile nexus_version. Consulta le versioni disponibili su https://www.sonatype.com/download-oss-sonatype.

Se cambi la versione a una più recente, il ruolo cercherà di aggiornare il tuo Nexus installato.

Se utilizzi una versione di Nexus più vecchia dell'ultima, devi assicurarti di non utilizzare funzioni che non sono disponibili nella versione installata (ad esempio, l'hosting di repository yum è disponibile per Nexus superiore a 3.8.0, git lfs repo per Nexus superiore a 3.3.0, ecc.)

fuso orario nexus è il nome del fuso orario Java, utile in combinazione con le espressioni cron indicate qui sotto per nexus_scheduled tasks.

Porta Nexus e percorso di contesto

    nexus_default_port: 8081
    nexus_default_context_path: '/'

Porta e percorso di contesto del processo di connessione Java. nexus_default_context_path deve contenere una barra inclinata quando impostato, ad esempio: nexus_default_context_path: '/nexus/'.

Utente e gruppo OS Nexus

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

L'utente e il gruppo utilizzati per possedere i file di Nexus e avviare il servizio saranno creati dal ruolo, se non presenti.

    nexus_os_user_home_dir: '/home/nexus'

Consenti la modifica della directory home predefinita per l'utente nexus

Directory delle istanze di Nexus

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

Directory di Nexus.

  • nexus_installation_dir contiene i file eseguibili installati
  • nexus_data_dir contiene tutte le configurazioni, i repository e gli artefatti caricati. I percorsi blobstore personalizzati nexus_data_dir possono essere configurati, vedere di seguito nexus_blobstores.
  • nexus_tmp_dir contiene tutti i file temporanei. Il percorso predefinito per redhat è stato spostato da /tmp per superare potenziali problemi con le procedure di pulizia automatizzate. Vedi #168.

Configurazione dell'uso della memoria JVM di Nexus

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

Queste sono le impostazioni predefinite per Nexus. Si prega di non modificare questi valori Se non hai letto la sezione sulla memoria dei requisiti di sistema di Nexus e non comprendi cosa facciano.

Come secondo avviso, ecco un estratto dal documento sopra citato:

Non si raccomanda di aumentare la memoria heap della JVM oltre i valori consigliati nel tentativo di migliorare le prestazioni. Questo può infatti avere l'effetto opposto, causando un lavoro non necessario da parte del sistema operativo.

Password dell'amministratore

    nexus_admin_password: 'changeme'

Password dell'account 'admin' per la configurazione. Questo funziona solo alla prima installazione predefinita. Si prega di consultare [Modificare la password dell'amministratore dopo la prima installazione](# change-admin-password-after-first-install) se si desidera cambiarla in seguito con il ruolo.

Si sconsiglia vivamente di memorizzare la propria password in testo aperto nel playbook e di utilizzare [la crittografia ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (sia incorporata che in un file separato caricato, ad esempio, utilizzando include_vars)

Accesso anonimo per impostazione predefinita

    nexus_anonymous_access: false

L'accesso anonimo per impostazione predefinita è disattivato. Maggiori informazioni su accesso anonimo.

Nome host pubblico

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Nome di dominio completo e schema (https o http) tramite cui il server Nexus sarà accessibile ai suoi clienti.

Accesso API per questo ruolo

    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 variabili controllano come il ruolo si connette all'API Nexus per fornire.
Solo per utenti esperti. È probabile che non si desideri modificare queste impostazioni predefinite.

Configurazione del reverse proxy

    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: true

Installa Reverse proxy SSL.
Per questo è necessario installare httpd. Nota: quando per httpd_setup_enable è impostato sutrue, nexus si collega a 127.0.0.1:8081, quindi non essere accessibile direttamente tramite la porta HTTP 8081 da un IP esterno.

Il nome host predefinito è nexus_public_hostname. Se hai bisogno di nomi diversi per qualche motivo, puoi impostare httpd_server_name con un valore diverso.

C httpd_copy_ssl_files: true (di default) i certificati menzionati devono esistere nella tua directory del playbook e saranno copiati sul server e configurati in apache.

Se desideri utilizzare certificati esistenti sul server, configura httpd_copy_ssl_files: false e fornisci le 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 è facoltativo e deve rimanere non configurato se non desideri impostare il file della catena

    httpd_default_admin_email: "admin@example.com"

Imposta l'indirizzo email dell'amministratore predefinito

Configurazione LDAP

Le connessioni LDAP e il dominio di sicurezza predefinito sono disattivati

    nexus_ldap_realm: false
    ldap_connections: []

Connessioni LDAP, ogni elemento appare nel seguente modo:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'My Company LDAP' # usato come chiave per aggiornare la configurazione ldap
        ldap_protocol: 'ldaps' # ldap o ldaps
        ldap_hostname: 'ldap.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false # Se utilizzare o meno i certificati nello store di fiducia di nexus
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_auth: 'none' # o semplice
        ldap_auth_username: 'username' # se auth = semplice
        ldap_auth_password: 'password' # se auth = semplice
        ldap_user_base_dn: 'ou=users'
        ldap_user_filter: '(cn=*)' # (opzionale)
        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

Esempio di configurazione LDAP per l'autenticazione anonima (binding anonima), questa è anche la configurazione "minima":

    nexus_ldap_realm: true
    ldap_connection:
      - ldap_name: 'Configurazione LDAP più semplice'
        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'

Esempio di configurazione LDAP per l'autenticazione semplice (utilizzando un account DSA):

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Configurazione LDAP con DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'semplice'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # è meglio mantenere le password in un vault 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_user_subtree: false

Esempio di configurazione LDAP per semplice autenticazione (utilizzando un account DSA) + gruppi mappati come ruoli:

    nexus_ldap_realm: true
    ldap_connections
      - ldap_name: 'Configurazione LDAP con DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'semplice'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # è meglio mantenere le password in un vault 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: false

Esempio di configurazione LDAP per autenticazione semplice (utilizzando l'account DSA) + gruppi abbinati dinamicamente come ruoli:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Configurazione LDAP con 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 }}" # è meglio tenere le password in un vault 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'

Privilegi

    nexus_privileges:
      - name: all-repos-read # utilizzato come chiave per aggiornare un privilegio
        # type: <uno tra application, repository-admin, repository-content-selector, repository-view, script o wildcard>
        description: 'Accesso in lettura e navigazione a tutti i repos'
        repository: '*'
        actions: # possono essere add, browse, create, delete, edit, read o * (tutti)
          - read
          - browse
        # pattern: pattern
        # domain: domain
        # script_name: name

Elenco privilegi per la configurazione. Consulta la documentazione e l'interfaccia grafica per verificare quali variabili devono essere impostate a seconda del tipo di privilegio.

Questi elementi sono collegati ai seguenti valori predefiniti:

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

Ruoli (si intende all'interno di Nexus)

    nexus_roles:
      - id: Developpers # può mappare a un id di gruppo LDAP, usato anche come chiave per aggiornare un ruolo
        name: developers
        description: Tutti gli sviluppatori
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # riferimenti ad altri nomi di ruolo

Elenco ruoli per la configurazione.

Utenti

    nexus_local_users: []
      # - username: jenkins # usato come chiave per l'aggiornamento
      #   state: present # valore predefinito se omesso, usa 'absent' per rimuovere l'utente
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - developers # ID ruolo

Elenco di utenti/account locali (non LDAP) da creare in Nexus.

Lista di utenti/account locali (non LDAP) da creare in Nexus.

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

Mappatura utenti/ruoli LDAP. Stato absent rimuoverà i ruoli dall'utente esistente, se già presente.
Gli utenti LDAP non vengono rimossi. Proverà a impostare un ruolo per un utente inesistente generando un errore.

Selettori di contenuto

  nexus_content_selectors:
  - name: docker-login
    description: Selettore per il privilegio di accesso a docker
    search_expression: format=="docker" and path=~"/v2/"

Per ulteriori informazioni sul selettore di contenuto, vedi. Documentazione.

Per utilizzare il selettore dei contenuti, aggiungi un nuovo privilegio con type: repository-content-selector e il corrispondentecontentSelector

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Accesso al registro Docker'
  repository: '*'
  actions:
  - read
  - browse

Blobstore e repository

    nexus_delete_default_repos: false

Elimina i repository dalla configurazione predefinita iniziale di Nexus. Questo passaggio viene eseguito solo durante la prima installazione (quando nexus_data_dir è stato rilevato vuoto).

Cancellazione dei repository dalla configurazione iniziale predefinita di Nexus. Questo passaggio viene eseguito solo durante la prima installazione (quando nexus_data_dir è vuoto).

    nexus_delete_default_blobstore: false

Elimina il blobstore predefinito dalla configurazione predefinita iniziale di Nexus. Questo può essere fatto solo se nexus_delete_default_repos: true e tutti i repository configurati (vedi sotto) hanno un esplicito blob_store: custom. Questo passaggio viene eseguito solo durante la prima installazione (quando nexus_data_dir è stato rilevato vuoto).

La rimozione del blobstore (artefatti binari) è disabilitata per impostazione predefinita dalla configurazione iniziale. Per rimuovere il blobstore (artefatti binari) disabilita nexus_delete_default_repos: true. Questo passaggio viene eseguito solo durante la prima installazione (quando nexus_data_dir è vuoto).

    nexus_blobstores: []
    # esempio di elemento 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 }}"

Blobstore per creare. Un percorso blobstore e un repository blobstore non possono essere aggiornati dopo la creazione iniziale (qualsiasi aggiornamento qui sarà ignorato durante la riconfigurazione).

La configurazione del blobstore su S3 è fornita come comodità e non fa parte dei test automatizzati che eseguiamo su travis. Si prega di notare che il salvataggio su S3 è consigliato solo per le istanze distribuite su AWS.

Creazione Blobstore. Il percorso per lo storage e il repository non possono essere aggiornati dopo la creazione iniziale (ogni aggiornamento qui verrà ignorato durante la reinstallazione).

La configurazione del blobstore su S3 è fornita per comodità. Si prega di notare che il salvataggio su S3 è consigliato solo per le istanze distribuite su 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
    # esempio con 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

Esempio di configurazione sopra un proxy server Maven.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # uno tra "allow", "allow_once" o "deny"

Maven repository ospitati configurazione. La configurazione della cache negativa è facoltativa e utilizzerà i valori sopra indicati se non specificata.

Configurazione repository ospitati Maven. La configurazione della cache negativa (-1) è facoltativa e utilizzerà per default i valori indicati sopra, se non specificata.

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

Configurazione gruppi Maven.

Tutti e tre i tipi di repository si combinano con i seguenti valori di default:

    _nexus_repos_maven_defaults:
      blob_store: default # Nota: non può essere aggiornato una volta che il repository è stato creato
      strict_content_validation: true
      version_policy: release # release, snapshot o mixed
      layout_policy: strict # rigoroso o permissivo
      write_policy: allow_once # uno tra "allow", "allow_once" o "deny"
      maximum_component_age: -1  # valore di default della GUI di Nexus. Solo per proxy
      maximum_metadata_age: 1440  # valore di default della GUI di Nexus. Solo per proxy
      negative_cache_enabled: true # valore di default della GUI di Nexus. Solo per proxy
      negative_cache_ttl: 1440 # valore di default della GUI di Nexus. Solo per proxy

Tipi di repository Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS e yum:
vedi defaults/main.yml per queste opzioni:

I repository Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS e yum sono disabilitati per default:
Vedi 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

Si prega di notare che potrebbe essere necessario abilitare alcune aree di sicurezza se si desidera utilizzare altri tipi di repository oltre a Maven. Questo è impostato su false per impostazione predefinita.

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # richiesto per l'accesso anonimo a Docker

Il Remote User Realm può essere abilitato anche tramite

nexus_rut_auth_realm: true

e l'intestazione può essere configurata specificando

nexus_rut_auth_header: "CUSTOM_HEADER"

Attività pianificate

    nexus_scheduled_tasks: []
    #  #  Esempio di attività per compattare il blobstore:
    #  - name: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: alerts@example.org  # opzionale
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # tutti gli attributi dell'attività sono memorizzati come stringhe da nexus internamente
    #  #  Esempio di attività per eliminare gli snapshot di Maven
    #  - name: Purge-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: alerts@example.org  # opzionale
    #    taskProperties:
    #      repositoryName: "*"  # * per tutti i repo. Cambia in un nome di repository se desideri solo uno specifico
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Esempio di attività per eliminare i manifest e le immagini docker non utilizzati
    #  - name: Purge unused docker manifests and images
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: alerts@example.org  # opzionale
    #    taskProperties:
    #      repositoryName: "*"  # * per tutti i repo. Cambia in un nome di repository se desideri solo uno specifico
    #  #  Esempio di attività per eliminare gli upload docker incompleti
    #  - name: Purge incomplete docker uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: alerts@example.org  # opzionale
    #    taskProperties:
    #      age: "24"

Attività pianificate per la configurazione. typeId e specifiche per l'attivitàtaskProperties/booleanTaskProperties può essere dedotto sia da:

  • dalla gerarchia dei tipi Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • controllando il modulo HTML per la creazione dell'attività nel tuo browser
  • dalla visualizzazione delle richieste AJAX nel browser durante la configurazione manuale del task.

Le proprietà del task devono essere dichiarate nel corretto blocco yaml a seconda del loro tipo:

  • taskProperties per tutte le proprietà stringa (cioè nomi dei repository, nomi degli archivi, periodi di tempo …).
  • booleanTaskProperties per tutte le proprietà booleane (cioè principalmente checkbox nell'interfaccia grafica del task di creazione del nexus).

Backup

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Vedi definizione delle espressioni cron nell'interfaccia del task di creazione del 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  # Mantieni 4 rotazioni di backup per impostazione predefinita (corrente + ultime 3)

La copia di backup non sarà configurata fino a quando non attiverai nexus_backup_configure in true.
In questo caso, il task programmato sarà configurato per essere eseguito in Nexus
con l'intervallo specificato in nexus_backup_cron (di default alle 21:00 ogni giorno).
Consulta [il modello groovy per questo task](templates / backup.groovy.j2) per maggiori informazioni.
Questo task programmato non dipende da altri nexus_scheduled_tasks, che hai
dichiarato nel tuo playbook.

Se desideri ruotare/eliminare i backup, imposta nexus_backup_rotate: true e imposta il numero di backup che desideri mantenere con nexus_backup_keep_rotations (di default 4).

Se utilizzi la rotazione e desideri risparmiare spazio su disco durante il processo di backup,
puoi impostare nexus_backup_rotate_first: true. Questo configurerà la rotazione/pre-rimozione prima del backup. Di default, la rotazione avviene dopo la creazione del backup. Tieni presente che in questo caso i backup più vecchi
verranno eliminati prima che venga effettuato il backup corrente.

Procedura di ripristino

Esegui il playbook con il parametro -e nexus_restore_point=
(ad esempio, 2017-12-17-21-00-00 per il 17 dicembre 2017 alle 21:00

Eliminazione di nexus

Attenzione: questo eliminerà completamente i dati attuali. Assicurati di eseguire un backup precedente, se necessario

Utilizza la variabile nexus_purge, se hai bisogno di ripartire da zero e reinstallare l'istanza di nexus eliminando tutti i dati.

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

Modifica la password dell'amministratore dopo la prima installazione

    nexus_default_admin_password: 'admin123'

Questo non dovrebbe essere modificato nel tuo playbook. Questa variabile è compilata con la password standard dell'amministratore di Nexus durante la prima installazione e garantisce che possiamo modificare la password dell'amministratore su nexus_admin_password.

Se desideri cambiare la password dell'amministratore dopo la prima installazione, puoi temporaneamente modificarla con la vecchia password dal terminale. Dopo aver cambiato nexus_admin_password nella tua console di gioco puoi eseguire:

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

Canale Telegram dedicato a Nexus Sonatype: https://t.me/ru_nexus_sonatype

Solo gli utenti registrati possono partecipare al sondaggio. Accedi, per favore.

Quali repository di artefatti stai utilizzando?

  • Sonatype Nexus gratuito

  • Sonatype Nexus a pagamento

  • Artifactory gratuito

  • Artifactory a pagamento

  • Harbor

  • Pulp

Nove utenti hanno votato. Tre utenti si sono astenuti.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster