Instalación y configuración de Nexus Sonatype utilizando el enfoque de infraestructura como código

Sonatype Nexus es una plataforma integrada que permite a los desarrolladores proxy, almacenar y gestionar dependencias de Java (Maven), imágenes de Docker, Python, Ruby, NPM, Bower, paquetes RPM, gitlfs, Apt, Go, Nuget, así como distribuir su software.

¿Para qué sirve Sonatype Nexus?

  • Para almacenar artefactos privados;
  • Para almacenar en caché artefactos descargados de internet;

Artefactos soportados en la distribución base de Sonatype Nexus:

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

Artefactos soportados por la comunidad:

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

Instalación de Sonatype Nexus utilizando https://github.com/ansible-ThoTeam/nexus3-oss

Requisitos

  • Lee sobre el uso de ansible en internet.
  • Instala ansible pip install ansible en la estación de trabajo donde se ejecuta el playbook.
  • Instala geerlingguy.java en la estación de trabajo donde se ejecuta el playbook.
  • Instala geerlingguy.apache en la estación de trabajo donde se ejecuta el playbook.
  • Este rol ha sido probado en CentOS 7, Ubuntu Xenial (16.04) y Bionic (18.04), Debian Jessie y Stretch
  • jmespath la biblioteca debe estar instalada en la estación de trabajo donde se ejecuta el playbook. Para instalar, ejecuta sudo pip install -r requirements.txt
  • Guarda el archivo del playbook (ejemplo a continuación) como nexus.yml
  • Ejecuta la instalación de nexus ansible-playbook -i host nexus.yml

Ejemplo de ansible-playbook para la instalación de nexus sin LDAP con repositorios de Maven (java), Docker, Python, Ruby, NPM, Bower, RPM y 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: 'Acceso para leer y navegar a todos los repositorios'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Despliegues al proyecto de la empresa'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # se mapea al grupo LDAP
        name: developers
        description: Todos los desarrolladores
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # utilizado como clave para actualizar
        first_name: Jenkins
        last_name: CI
        email: support@company.com
        password: "s3cr3t"
        roles:
          - Developpers # ID del rol aquí
    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 para crear el repositorio 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 para crear el repositorio 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 para crear el repositorio 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 para crear el repositorio 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 para crear el repositorio 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 para crear el repositorio 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 para crear el repositorio 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'] }

Capturas de pantalla:

Instalación y configuración de Nexus Sonatype utilizando el enfoque de infraestructura como código

Instalación y configuración de Nexus Sonatype utilizando el enfoque de infraestructura como código

Variables de rol

Variables de rol

Variables con valores predeterminados (ver default/main.yml):

Variables generales

    nexus_version: ''
    nexus_timezone: 'UTC'

De forma predeterminada, el rol instalará la última versión disponible de Nexus. Puede fijar una versión modificando la variable nexus_version. Consulte las versiones disponibles en https://www.sonatype.com/download-oss-sonatype.

Si cambia la versión a una más nueva, el rol intentará actualizar su Nexus instalado.

Si está utilizando una versión de Nexus más antigua que la última, debe asegurarse de no utilizar funciones que no están disponibles en la versión instalada (por ejemplo, la gestión de repositorios yum está disponible para Nexus mayores que 3.8.0, git lfs repo para Nexus mayores que 3.3.0, etc.)

nexus timezone — es el nombre de la zona horaria de Java, que puede ser útil junto con las expresiones cron que se indican a continuación para tareas programadas de nexus.

Puerto Nexus y ruta de contexto

    nexus_default_port: 8081
    nexus_default_context_path: '"/'"

Puerto y la ruta de contexto del proceso de conexión de Java. nexus_default_context_path debe contener una barra diagonal cuando se establece, por ejemplo: nexus_default_context_path: '"/nexus/"'.

Usuario y grupo del sistema operativo Nexus

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

El usuario y grupo utilizados para poseer los archivos de Nexus y ejecutar el servicio serán creados por el rol si no existen.

    nexus_os_user_home_dir: '"/home/nexus"'

Permitir cambiar el directorio de inicio predeterminado para el usuario nexus

Directorios de instancias de Nexus

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

Directorios de Nexus.

  • nexus_installation_dir contiene los archivos ejecutables instalados
  • nexus_data_dir contiene toda la configuración, los repositorios y los artefactos cargados. Las rutas personalizadas de blobstores nexus_data_dir pueden estar configuradas, consulte a continuación nexus_blobstores.
  • nexus_tmp_dir contiene todos los archivos temporales. La ruta predeterminada para redhat se trasladó desde /tmp para evitar problemas potenciales con los procedimientos automáticos de limpieza. Consulte #168.

Configuración de uso de memoria de Nexus JVM

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

Estos son los valores predeterminados para Nexus. Por favor, no cambie estos valores. Si no ha leído la sección de requisitos del sistema de memoria nexus y no entiende lo que hacen.

Como segunda advertencia, aquí hay un extracto del documento mencionado anteriormente:

No se recomienda aumentar la memoria del heap de la JVM más allá de los valores recomendados en un intento de mejorar el rendimiento. Esto puede tener el efecto contrario, causando un trabajo innecesario del sistema operativo.

Contraseña del administrador

    nexus_admin_password: 'changeme'

Contraseña de la cuenta 'admin' para la configuración. Esto solo funciona en una primera instalación por defecto. Por favor, consulte [Cambiar la contraseña del administrador después de la primera instalación](# change-admin-password-after-first-install) si desea cambiarla más tarde con un rol.

Se desaconseja encarecidamente almacenar su contraseña en texto plano en el playbook, y utilizar [cifrado ansible-vault](https://docs.ansible.com/ansible/latest/user_guide/vault.html) (ya sea integrado o en un archivo separado, cargado, por ejemplo, mediante include_vars)

Acceso anónimo por defecto

    nexus_anonymous_access: false

El acceso anónimo por defecto está deshabilitado. Más sobre acceso anónimo.

Nombre público del host

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

El nombre de dominio completo y el esquema (https o http) a través del cual la instancia de Nexus será accesible para sus clientes.

Acceso a la API para este rol

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

Estas variables controlan cómo el rol se conecta a la API de Nexus para proporcionar.
Solo para usuarios avanzados. Es probable que no desee cambiar estas configuraciones predeterminadas.

Configuración 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

Instala Proxy inverso SSL.
Para esto, se debe instalar httpd. Nota: cuando para httpd_setup_enable se establece entrue, nexus se conecta a 127.0.0.1:8081, así no siendo accesible directamente a través del puerto HTTP 8081 desde una dirección IP externa.

El nombre de host utilizado por defecto es nexus_public_hostname. Si necesita nombres diferentes por alguna razón, puede establecer httpd_server_name con un valor diferente.

Con httpd_copy_ssl_files: true (por defecto) los certificados mencionados anteriormente deben existir en su directorio de playbook y serán copiados al servidor y configurados en Apache.

Si desea utilizar certificados existentes en el servidor, establezca httpd_copy_ssl_files: false y proporcione las siguientes variables:

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

ubicación_del_certificado_ssl_httpd_en_cadena es opcional y debe dejarse sin configurar si no desea configurar el archivo de cadena

    httpd_default_admin_email: "admin@example.com"

Establecer la dirección de correo electrónico del administrador por defecto

Configuración de LDAP

Las conexiones LDAP y el ámbito de seguridad están desactivados por defecto

    nexus_ldap_realm: false
    ldap_connections: []

Conexiones LDAP, cada elemento se ve de la siguiente manera:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP de Mi Empresa' # se usa como clave para actualizar la configuración ldap
        ldap_protocol: 'ldaps' # ldap o ldaps
        ldap_hostname: 'ldap.miempresa.com'
        ldap_port: 636
        ldap_use_trust_store: false # Si se deben usar certificados en el almacén de confianza de nexus
        ldap_search_base: 'dc=miempresa,dc=net'
        ldap_auth: 'none' # o simple
        ldap_auth_username: 'username' # si auth = simple
        ldap_auth_password: 'password' # si auth = simple
        ldap_user_base_dn: 'ou=users'
        ldap_user_filter: '(cn=*)' # (opcional)
        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

Ejemplo de configuración de LDAP para autenticación anónima (enlace anónimo), también es una configuración «mínima»:

    nexus_ldap_realm: true
    ldap_connection:
      - ldap_name: 'Configuración LDAP más simple'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.miempresa.com'
        ldap_search_base: 'dc=miempresa,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'

Ejemplo de configuración de LDAP para autenticación simple (usando una cuenta DSA):

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Configuración LDAP con DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.miempresa.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=miempresa,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # es mejor mantener las contraseñas en un almacén ansible
        ldap_search_base: 'dc=miempresa,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

Ejemplo de configuración de LDAP para autenticación simple (usando una cuenta DSA) + grupos, mapeados como roles:

    nexus_ldap_realm: true
    ldap_connections
      - ldap_name: 'Configuración 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 }}" # Es mejor guardar las contraseñas en un vault de 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

Ejemplo de configuración LDAP para autenticación simple (usando una cuenta DSA) + grupos asignados dinámicamente como roles:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Configuración 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 }}" # Es mejor guardar las contraseñas en un vault de 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'

Privilegios

    nexus_privileges:
      - name: all-repos-read # utilizado como clave para actualizar un privilegio
        # type: 
        description: 'Acceso de Lectura y Navegación a todos los repos'
        repository: '*'
        actions: # puede ser add, browse, create, delete, edit, read o  * (todos)
          - read
          - browse
        # patrón: patrón
        # dominio: dominio
        # script_name: nombre

Lista de privilegios para configurarlo. Consulte la documentación y la interfaz gráfica para verificar qué variables deben establecerse según el tipo de privilegio.

Estos elementos se combinan con los siguientes valores por defecto:

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

Roles (dentro de Nexus se refiere a)

    nexus_roles:
      - id: Developpers # puede mapear a un id de grupo LDAP, también se usa como clave para actualizar un rol
        name: developers
        description: Todos los desarrolladores
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # referencias a otros nombres de rol

Lista roles para configurarlo.

Usuarios

    nexus_local_users: []
      # - username: jenkins # utilizado como clave para actualizar
      #   state: present # valor por defecto si se omite, use 'absent' para eliminar usuario
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - developers # rol ID

Lista de usuarios/cuentas locales (no LDAP) para crear en nexus.

Lista de usuarios/cuentas locales (no LDAP) para crear en Nexus.

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

Mapeo de usuarios/roles LDAP. Estado ausente eliminar roles de un usuario existente, si ya existe.
Los usuarios LDAP no se eliminan. Intentar establecer un rol para un usuario que no existe dará lugar a un error.

Selectores de contenido

  nexus_content_selectors:
  - name: docker-login
    description: Selector para privilegios de inicio de sesión de Docker
    search_expression: format=="docker" and path=~"/v2/"

Para más información sobre el selector de contenido, consulte la documentación.

Para utilizar el selector de contenido, añada un nuevo privilegio con type: repository-content-selector y el correspondientecontentSelector

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Inicio de sesión en el registro de Docker'
  repository: '*'
  actions:
  - read
  - browse

Blobstores y repositorios

    nexus_delete_default_repos: false

Eliminar los repositorios de la configuración predeterminada inicial de Nexus. Este paso solo se ejecuta en la primera instalación (cuando nexus_data_dir se ha detectado vacío).

Eliminación de repositorios de la configuración predeterminada de Nexus. Este paso solo se realiza en la primera instalación (cuando nexus_data_dir está vacío).

    nexus_delete_default_blobstore: false

Eliminar el blobstore predeterminado de la configuración predeterminada inicial de Nexus. Esto solo se puede hacer si nexus_delete_default_repos: true y todos los repositorios configurados (ver más abajo) tienen un blob_store: custom. Este paso solo se ejecuta en la primera instalación (cuando nexus_data_dir se ha detectado vacío).

La eliminación del almacenamiento de blobs (artefactos binarios) está desactivada por defecto en la configuración inicial. Para eliminar el almacenamiento de blobs (artefactos binarios) desactive nexus_delete_default_repos: true. Este paso solo se realiza en la primera instalación (cuando nexus_data_dir está vacío).

    nexus_blobstores: []
    # artículo de ejemplo de 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 para crear. Un path de blobstore y un blobstore de repositorio no se pueden actualizar después de la creación inicial (cualquier actualización aquí será ignorada en la re-provisión).

La configuración del blobstore en S3 se proporciona como conveniencia y no forma parte de las pruebas automatizadas que realizamos en travis. Tenga en cuenta que el almacenamiento en S3 solo se recomienda para instancias desplegadas en AWS.

Creando Blobstores. El camino hacia el almacenamiento y el blobstore del repositorio no pueden ser actualizados después de la creación inicial (cualquier actualización aquí será ignorada en la reinstalación).

La configuración del almacenamiento de objetos BLOB en S3 se proporciona para conveniencia. Tenga en cuenta que el almacenamiento en S3 solo se recomienda para instancias desplegadas en 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
    # ejemplo con un nombre de usuario/contraseña :
    # - 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

Ejemplo de configuración anterior servidor proxy Maven.

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

Maven repositorios alojados configuración. La configuración de caché negativa es opcional y se establecerá de forma predeterminada en los valores anteriores si se omite.

Configuración repositorios alojados Maven. La configuración del caché negativo (-1) es opcional y utilizará los valores mencionados anteriormente de forma predeterminada si no se proporciona.

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

Configuración grupo Maven.

Los tres tipos de repositorios se combinan con los siguientes valores predeterminados:

    _nexus_repos_maven_defaults:
      blob_store: default # Nota: no se puede actualizar una vez que se ha creado el repositorio
      strict_content_validation: true
      version_policy: release # release, snapshot o mixed
      layout_policy: strict # strict o permissive
      write_policy: allow_once # uno de "allow", "allow_once" o "deny"
      maximum_component_age: -1  # valor predeterminado de la interfaz de usuario de Nexus. Solo para proxies
      maximum_metadata_age: 1440  # valor predeterminado de la interfaz de usuario de Nexus. Solo para proxies
      negative_cache_enabled: true # valor predeterminado de la interfaz de usuario de Nexus. Solo para proxies
      negative_cache_ttl: 1440 # valor predeterminado de la interfaz de usuario de Nexus. Solo para proxies

tipos de repositorios de Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS y yum:
ver defaults/main.yml para estas opciones:

Los repositorios de Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS y yum están desactivados por defecto:
Vea defaults/main.yml para estas opciones:

      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

Tenga en cuenta que es posible que deba habilitar ciertas áreas de seguridad si desea usar otros tipos de repositorios además de Maven. Esto es false por defecto

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # requerido para acceso anónimo a docker

El Realm de usuario remoto también se puede habilitar mediante

nexus_rut_auth_realm: true

y el encabezado se puede configurar especificando

nexus_rut_auth_header: "CUSTOM_HEADER"

Tareas programadas

    nexus_scheduled_tasks: []
    #  #  Ejemplo de tarea para compactar el blobstore:
    #  - name: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: alerts@example.org  # opcional
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # todos los atributos de tarea se almacenan como cadenas dentro de nexus
    #  #  Ejemplo de tarea para purgar los snapshots de maven
    #  - name: Purge-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: alerts@example.org  # opcional
    #    taskProperties:
    #      repositoryName: "*"  # * para todos los repos. Cambie a un nombre de repositorio si solo desea uno específico
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Ejemplo de tarea para purgar manifiestos y imágenes de docker no utilizados
    #  - name: Purge unused docker manifests and images
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: alerts@example.org  # opcional
    #    taskProperties:
    #      repositoryName: "*"  # * para todos los repos. Cambie a un nombre de repositorio si solo desea uno específico
    #  #  Ejemplo de tarea para purgar subidas de docker incompletas
    #  - name: Purge incomplete docker uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: alerts@example.org  # opcional
    #    taskProperties:
    #      age: "24"

Tareas programadas para configurarlo. typeId y específicos para la tareataskProperties/booleanTaskProperties puede adivinarse o:

  • de la jerarquía de tipos de Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • verificando el formulario HTML de creación de tareas en su navegador
  • a través de la visualización de solicitudes AJAX en el navegador al configurar manualmente la tarea.

Las propiedades de la tarea deben declararse en el bloque yaml correcto según su tipo:

  • taskProperties para todas las propiedades de cadena (es decir, nombres de repositorio, nombres de blobstore, períodos de tiempo …).
  • booleanTaskProperties para todas las propiedades booleanas (es decir, principalmente casillas de verificación en la interfaz gráfica de la tarea de creación de nexus).

Copias de seguridad

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Consulte la definición de expresiones cron en la interfaz de creación de tareas de 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  # Mantener 4 rotaciones de respaldo por defecto (actual + últimas 3)

La copia de seguridad no se configurará hasta que active nexus_backup_configure en true.
En este caso, la tarea programada se configurará para ejecutarse en Nexus
con el intervalo especificado en nexus_backup_cron (por defecto 21:00 todos los días).
Vea [Plantilla groovy para esta tarea](templates / backup.groovy.j2) para más detalles.
Esta tarea programada no depende de otros nexus_scheduled_tasks, que usted
debe declarar en su playbook.

Si desea rotar/eliminar copias de seguridad, establezca nexus_backup_rotate: true y configure la cantidad de copias de seguridad que le gustaría conservar con nexus_backup_keep_rotations (por defecto 4).

Al usar la rotación, si desea ahorrar espacio en disco adicional durante el proceso de copia de seguridad,
puede establecer nexus_backup_rotate_first: true. Esto configurará la rotación/eliminación previa antes de la copia de seguridad. Por defecto, la rotación ocurre después de crear la copia de seguridad. Tenga en cuenta que, en este caso, las copias de seguridad antiguas
se eliminarán antes de que se realice la copia de seguridad actual.

Procedimiento de recuperación

Ejecute el playbook con el parámetro -e nexus_restore_point=
(por ejemplo, 2017-12-17-21-00-00 para el 17 de diciembre de 2017 a las 21:00)

Eliminación de nexus

Advertencia: esto eliminará completamente los datos actuales. Asegúrese de hacer una copia de seguridad previamente, si es necesario.

Utilice la variable nexus_purge, si necesita reiniciar desde cero y reinstalar la instancia de nexus eliminando todos los datos.

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

Cambiar la contraseña del administrador después de la primera instalación

    nexus_default_admin_password: 'admin123'

Esto no debe ser cambiado en su playbook. Esta variable se llena con la contraseña estándar del administrador de Nexus en la primera instalación y garantiza que podemos cambiar la contraseña del administrador a nexus_admin_password.

Si desea cambiar la contraseña del administrador después de la primera instalación, puede cambiarla temporalmente a la contraseña anterior desde la línea de comandos. Después de cambiar nexus_admin_password en su libro de juego puede ejecutar:

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

Canal de Telegram sobre Nexus Sonatype: https://t.me/ru_nexus_sonatype

Solo los usuarios registrados pueden participar en la encuesta. Inicie sesión, por favor.

¿Qué repositorios de artefactos está utilizando?

  • Sonatype Nexus gratuito

  • Sonatype Nexus de pago

  • Artifactory gratuito

  • Artifactory de pago

  • Harbor

  • Pulp

Votaron 9 usuarios. 3 usuarios se abstuvieron.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster