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

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

A cosa serve Sonatype Nexus?

  • Per l'archiviazione di artefatti privati;
  • Per memorizzare nella cache artefatti scaricati da Internet;

Artefatti supportati nella fornitura base di Sonatype Nexus:

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

Artefatti supportati dalla comunità:

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

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

Requisiti

  • Leggi informazioni sull'uso di ansible su Internet.
  • Installa ansible pip install ansible sul workstation dove viene eseguito il playbook.
  • Installare geerlingguy.java sul workstation dove viene eseguito il playbook.
  • Installare geerlingguy.apache sul 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, esegui sudo pip install -r requirements.txt
  • Salva il file del playbook (esempio sotto) nel file nexus.yml
  • Avvia l'installazione di nexus ansible-playbook -i host nexus.yml

Esempio di ansible-playbook per installare 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 repository'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Distribuzioni al progetto aziendale'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # mappa al gruppo LDAP
        name: developers
        description: Tutti gli 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@company.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. Cambia nexus_config_yum a true per creare il 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. Cambia nexus_config_npm a true per creare il 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. Cambia nexus_config_docker a true per creare il 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. Cambia nexus_config_bower a true per creare il 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. Cambia nexus_config_pypi a true per creare il 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. Cambia nexus_config_rubygems a true per creare il 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. Cambia nexus_config_gitlfs a true per creare il 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

Variabili di ruolo

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

Variabili generali

    nexus_version: ''
    nexus_timezone: 'UTC'

Di default, il ruolo installerà l'ultima versione disponibile di Nexus. Puoi fissare la versione modificando la variabile nexus_version. Vedi 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 usare funzionalità non disponibili nella release installata (ad esempio, la pubblicazione di repository yum è disponibile per nexus superiore alla 3.8.0, git lfs repo per nexus superiore alla 3.3.0, ecc.)

Fuso orario nexus è il nome del fuso orario Java, che può essere utile in combinazione con le espressioni cron riportate di seguito per le attività pianificate di nexus.

Porta Nexus e percorso del contesto

    nexus_default_port: 8081
    nexus_default_context_path: ' / '

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

Utente e gruppo OS di Nexus

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

L'utente e il gruppo utilizzati per la proprietà dei file di Nexus e l'esecuzione del servizio verranno creati dal ruolo se non esistono.

    nexus_os_user_home_dir: ' /home/nexus '

Consenti di modificare la directory home predefinita per l'utente nexus

Directory delle installazioni 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 personalizzati dei blobstore nexus_data_dir possono essere configurati, vedi sotto 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 automatiche di pulizia. Vedi #168.

Configurazione dell'uso della memoria della 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 JVM heap oltre i valori raccomandati nel tentativo di migliorare le prestazioni. Questo potrebbe avere in realtà l'effetto opposto, portando a un lavoro non necessario del sistema operativo.

Password dell'amministratore

    nexus_admin_password: 'changeme'

Questa è la password dell'account «admin» per la configurazione. Questo funziona solo per la prima installazione predefinita. Si prega di consultare [Cambiare la password dell'amministratore dopo la prima installazione](# change-admin-password-after-first-install) se si desidera modificarla successivamente con un ruolo.

È fortemente sconsigliato conservare la propria password in chiaro nel playbook e 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 è disabilitato. 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), attraverso cui l'istanza di 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 di Nexus per fornire.
Solo per utenti esperti. Probabilmente non si desidera modificare queste impostazioni predefinite.

Configurazione del proxy inverso

    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

Installare Proxy inverso 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 essendo direttamente accessibile tramite la porta HTTP 8081 con un indirizzo IP esterno.

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

C httpd_copy_ssl_files: true (per impostazione predefinita) i certificati sopra citati devono esistere nella tua directory playbook e saranno copiati sul server e configurati in apache.

Se desideri utilizzare certificati esistenti sul server, imposta 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 essere lasciato non impostato se non si desidera configurare il file della catena

    httpd_default_admin_email: "admin@example.com"

Imposta l'indirizzo e-mail dell'amministratore predefinito

Configurazione LDAP

Le connessioni LDAP e l'area di sicurezza predefinita sono disattivate

    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 nel trust store 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 (bound anonimo), questa è anche una 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: 'simple'
        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 l'autenticazione semplice (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: '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_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 un account DSA) + gruppi mappati 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: 
        description: 'Accesso per leggere e navigare tutti i repo'
        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. Controlla la documentazione e l'interfaccia grafica per verificare quali variabili devono essere impostate a seconda del tipo di privilegio.

Questi elementi sono combinati con i 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, utilizzato 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 # utilizzato come chiave per aggiornare
      #   state: present # valore predefinito se omesso, usa 'assente' per rimuovere l'utente
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - developers # ID ruolo

Elenco di utenti/conti locali (non LDAP) da creare in nexus.

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

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

Mappatura degli utenti/ruoli LDAP. Stato absent rimuove i ruoli da un utente esistente se già presente.
Gli utenti LDAP non vengono rimossi. Tentare di impostare un ruolo per un utente inesistente genererà 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 vedere. Documentazione.

Per utilizzare il selettore di contenuto, 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 dell'installazione di nexus. Questo passaggio viene eseguito solo durante la prima installazione (quando nexus_data_dir è stato rilevato come vuoto).

Rimozione dei repository dalla configurazione predefinita originaria per Nexus. Questo passaggio viene eseguito solo alla prima installazione (quando nexus_data_dir è vuoto).

    nexus_delete_default_blobstore: false

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

La rimozione del blobstore (artefatti binari) è disattivata per impostazione predefinita nella configurazione iniziale. Per rimuovere il blobstore (artefatti binari) disattiva 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 }}"

Blobstores da creare. Un percorso blobstore e un blobstore di repository non possono essere aggiornati dopo la creazione iniziale (qualsiasi aggiornamento qui sarà ignorato durante la riprovisionamento).

La configurazione del blobstore su S3 è fornita per comodità e non fa parte dei test automatizzati che eseguiamo su travis. Si prega di notare che l'archiviazione su S3 è consigliata solo per le istanze distribuite su AWS.

Creazione Blobstores. Il percorso del blobstore e del repository non possono essere aggiornati dopo la creazione iniziale (qualsiasi aggiornamento qui sarà ignorato durante la riprovisionamento).

La configurazione del blobstore per oggetti BLOB su S3 è fornita per comodità. Si prega di notare che l'archiviazione su S3 è consigliata solo per 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 nome utente/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

Ecco un esempio di configurazione il server proxy 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 predefiniti sopra indicati se omessa.

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

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

Configurazione gruppi Maven.

Tutti e tre i tipi di repository vengono uniti con i seguenti valori predefiniti:

    _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 # strict o permissive
      write_policy: allow_once # uno tra "allow", "allow_once" o "deny"
      maximum_component_age: -1  # valore predefinito della gui di Nexus. Solo per proxy
      maximum_metadata_age: 1440  # valore predefinito della gui di Nexus. Solo per proxy
      negative_cache_enabled: true # valore predefinito della gui di Nexus. Solo per proxy
      negative_cache_ttl: 1440 # valore predefinito 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 disattivati per impostazione predefinita:
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. È 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 realm utente remoto può essere abilitato tramite

nexus_rut_auth_realm: true

e l'intestazione può essere configurata definendo

nexus_rut_auth_header: "CUSTOM_HEADER"

Compiti programmati

    nexus_scheduled_tasks: []
    #  #  Esempio di attività per compattare lo 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 delle 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 uno specifico
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Esempio di attività per eliminare manifest e 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 uno specifico
    #  #  Esempio di attività per eliminare 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"

Compiti programmati per la configurazione. typeId e specifici per il compitotaskProperties/booleanTaskProperties può essere indovinato o:

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

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

  • taskProperties per tutte le proprietà stringa (cioè nomi dei repository, nomi degli store, periodi di tempo …).
  • booleanTaskProperties per tutte le proprietà booleane (cioè principalmente caselle di controllo nell'interfaccia grafica per la creazione delle attività di Nexus).

Backup

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Vedi la definizione delle espressioni cron nella GUI per la creazione delle attività di 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 (attuale + ultime 3)

Il backup non sarà configurato finché non attivi nexus_backup_configure in true.
In questo caso, l'attività programmata sarà configurata per essere eseguita in Nexus
con l'intervallo specificato in nexus_backup_cron (di default 21:00 ogni giorno).
Vedi [Template groovy per questa attività](templates \/ backup.groovy.j2) per maggiori dettagli.
Questa attività programmata non dipende da altri nexus_scheduled_tasks, che tu
dichiari nel tuo playbook.

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

Quando utilizzi la rotazione, se desideri risparmiare spazio su disco aggiuntivo durante il processo di backup,
Puoi impostare nexus_backup_rotate_first: true. Questo configurerà la rotazione preliminare/cancellazione prima del backup. Per impostazione predefinita, 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 attuale.

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 in precedenza, se necessario.

Utilizza la variabile nexus_purge, se devi 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

Cambia la password dell'amministratore dopo la prima installazione

    nexus_default_admin_password: 'admin123'

Non dovrebbe essere modificato nel tuo playbook. Questa variabile è popolata con la password predefinita dell'amministratore Nexus alla prima installazione e garantisce che possiamo cambiare la password dell'amministratore in nexus_admin_password.

Se desideri cambiare la password dell'amministratore dopo la prima installazione, puoi temporaneamente cambiarla con la vecchia password dalla linea di comando. Dopo la modifica nexus_admin_password nel tuo playbook puoi eseguire:

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

Canale Telegram su 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

Hanno votato 9 utenti. Si sono astenuti 3 utenti.

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