savoirfairelinux.nexus3-oss

Rol de Ansible: Nexus 3 OSS

Este rol instala y configura el Gestor de Repositorios Nexus OSS versión 3.x en CentOS/RHEL.

Toda la configuración puede ser actualizada volviendo a ejecutar el rol, excepto por las configuraciones relacionadas con los blobstores, que son inmutables en Nexus.

Requisitos

  • Solo ha sido probado en CentOS 7 y Ubuntu 16.04 (Xenial)
  • Java 8 de Oracle (obligatorio)
  • Apache HTTPD (opcional, se usa para configurar un proxy inverso SSL)

(vea la sección de Dependencias a continuación para encontrar roles compatibles en Galaxy)

Variables del Rol

Variables de Ansible, junto con los valores predeterminados (ver default/main.yml):

nexus_version: '3.1.0-04'
nexus_timezone: 'UTC'
nexus_package: "nexus-{{ nexus_version }}-unix.tar.gz"

La versión de Nexus y el paquete a instalar; vea las versiones disponibles en https://www.sonatype.com/download-oss-sonatype. nexus_timezone es un nombre de zona horaria de Java y puede ser útil en combinación con las expresiones cron de nexus_scheduled_tasks a continuación.

nexus_download_dir: '/tmp'

Directorio en el objetivo donde se descargará el paquete de Nexus.

nexus_default_port: 8081
nexus_default_context_path: '/'

Puerto y ruta de contexto del proceso Java de Nexus. nexus_default_context_path debe mantener la barra final cuando se establece, por ejemplo: nexus_default_context_path: '/nexus/'.

nexus_os_group: 'nexus'
nexus_os_user: 'nexus'

Usuario y grupo que poseen los archivos de Nexus y ejecutan el servicio, estos serán creados por el rol si están ausentes.

nexus_installation_dir: '/opt'
nexus_data_dir: '/var/nexus'
nexus_tmp_dir: '/tmp/nexus'

Directorios de Nexus, nexus_installation_dir contiene los ejecutables instalados, nexus_data_dir contiene toda la configuración, repositorios y artefactos subidos. Nota: se pueden configurar rutas de blobstores personalizadas fuera de nexus_data_dir, vea nexus_blobstores a continuación.

nexus_admin_password: 'changeme'

La contraseña de la cuenta 'admin' para establecer. Nota: el cambio de contraseña de admin después de la provisión o instalación inicial no está implementado por este rol aún.

nexus_anonymous_access: false

Permitir acceso anónimo a Nexus.

public_hostname: 'nexus.vm'

El nombre de dominio totalmente calificado bajo el cual la instancia de Nexus será accesible para sus clientes.

nexus_branding_header: ""
nexus_branding_footer: "Última provisión {{ ansible_date_time.iso8601 }}"

Encabezado y pie de página de marca, que pueden contener HTML.

httpd_setup_enable: false
httpd_ssl_certificate_file: 'files/nexus.vm.crt'
httpd_ssl_certificate_key_file: 'files/nexus.vm.key'

Configurar un proxy inverso SSL, esto requiere que httpd esté instalado. Nota: cuando httpd_setup_enable está configurado como true, Nexus se vincula a 127.0.0.1:8081, por lo tanto, no será accesible directamente en el puerto HTTP 8081 desde una IP externa.

ldap_connections: []

Configuración de conexiones LDAP, cada elemento es como sigue:

  - ldap_name: 'Mi LDAP de Empresa' # usado como clave para actualizar la configuración de ldap
    ldap_protocol: 'ldaps' # ldap o ldaps
    ldap_hostname: 'ldap.miempresa.com'
    ldap_port: 636
    ldap_search_base: 'dc=miempresa,dc=net'
    ldap_auth: 'none' # o simple
    ldap_auth_username: 'usuario' # si auth = simple
    ldap_auth_password: 'contraseña' # 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 LDAP para autenticación anónima (vinculación anónima), esta es también la configuración "mínima":

  - 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_user_id_attribute: 'uid'
    ldap_user_real_name_attribute: 'cn'
    ldap_user_email_attribute: 'mail'
    ldap_user_object_class: 'inetOrgPerson'

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

  - ldap_name: 'Configuración LDAP con DSA'
    ldap_protocol: 'ldaps'
    ldap_hostname: 'annuaire.miempresa.com'
    ldap_port: 636
    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 vault de 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 LDAP para autenticación simple (usando una cuenta DSA) + grupos mapeados como roles:

  - ldap_name: 'Configuración LDAP con DSA'
    ldap_protocol: 'ldaps'
    ldap_hostname: 'annuaire.miempresa.com'
    ldap_port: 636
    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 vault de 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_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=miempresa,dc=net'
    ldap_group_subtree: false
nexus_privileges:
  - name: all-repos-read # usado como clave para actualizar un privilegio
    description: 'Acceso de lectura y navegación a todos los repositorios'
    repository: '*'
    actions: # pueden ser add, browse, create, delete, edit, read o * (todos)
      - read
      - browse

Lista de privilegios para configurar. Estos elementos se combinan con los siguientes valores predeterminados:

    _nexus_privilege_defaults:
      type: repository-view
      format: maven2
      actions:
        - read
    nexus_roles:
      - id: Desarrolladores # puede mapearse 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 de roles para configurar.

nexus_local_users: []

Usuarios / cuentas locales (no-LDAP) que crear en Nexus, los elementos son como sigue:

  - username: jenkins # usado como clave para actualizar
    first_name: Jenkins
    last_name: CI
    email: [email protected]
    password: "s3cr3t"
    roles:
      - developers # ID de rol
nexus_delete_default_repos: false

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

nexus_delete_default_blobstore: false

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

nexus_blobstores: []
# ejemplo de elemento de blobstore :
# - name: almacenamiento-separado
#   path: /mnt/custom/path

Blobstores a crear. Una ruta de blobstore y un blobstore de repositorio no pueden ser actualizados tras su creación inicial (cualquier actualización aquí será ignorada en la reprovisión).

nexus_scheduled_tasks: []
#  ejemplo de tarea para compactar blobstore :
#  - name: compact-blobstore
#    cron: '0 0 22 * * ?'
#    typeId: blobstore.compact
#    taskProperties:
#      blobstoreName: 'default' # todos los atributos de tarea se almacenan como cadenas internamente por Nexus

Tareas programadas a configurar. typeId y taskProperties específicos de la tarea se pueden adivinar según la jerarquía de tipos de Java de org.sonatype.nexus.scheduling.TaskDescriptorSupport o al observar las solicitudes AJAX en el navegador mientras se configura manualmente una tarea.

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/'
# ejemplo con un nombre de usuario/contraseña :
# - name: repositorio-remoto-secreto
#   remote_url: 'https://empresa.com/repo/seguro/privado/ir/away'
#   remote_username: 'usuario'
#   remote_password: 'secreto'

Configuración de repositorios proxy Maven.

nexus_repos_maven_hosted:
  - name: private-release
    version_policy: release
    write_policy: allow_once

Configuración de repositorios alojados Maven.

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

Configuración de repositorios de grupo Maven.

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

    _nexus_repos_maven_defaults:
      blob_store: default # Nota : no puede ser actualizado una vez que el repo ha sido creado
      strict_content_validation: true
      version_policy: release # release, snapshot o mixed
      layout_policy: strict # strict o permissive
      write_policy: allow_once # allow_once o allow

Tipos de repositorios Docker, Pypi, Raw, Rubygems, Bower, NPM y Git-LFS: 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

Todos estos son falsos a menos que los sobrescriba desde el playbook / group_var / cli, todos utilizan el mismo mecanismo que Maven.

Dependencias

Este rol requiere Ansible 2.1 o superior.

Los requisitos de Java y httpd /pueden/ ser cumplidos con los siguientes roles de Galaxy:

Ejemplo de Playbook

---
- name: Nexus
  hosts: nexus
  become: yes

  vars:
    nexus_version: '3.1.0-04'
    nexus_timezone: 'Canada/Eastern'
    nexus_admin_password: "{{ vault_nexus_admin_password }}"
    httpd_server_name: 'nexus.vm'
    httpd_setup_enable: true
    httpd_ssl_certificate_file: "{{ vault_httpd_ssl_certificate_file }}"
    httpd_ssl_certificate_key_file: "{{ vault_httpd_ssl_certificate_key_file }}"
    ldap_connections:
      - ldap_name: 'LDAP de Empresa'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'ldap.empresa.com'
        ldap_port: 636
        ldap_search_base: 'dc=empresa,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_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}'
    nexus_privileges:
      - name: all-repos-read
        description: 'Acceso de lectura y navegación a todos los repositorios'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Despliegues a company-project'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Desarrolladores # 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 # usado como clave para actualizar
        first_name: Jenkins
        last_name: CI
        email: [email protected]
        password: "s3cr3t"
        roles:
          - Desarrolladores # ID de 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: alfresco
        remote_url: 'https://artifacts.alfresco.com/nexus/content/groups/private/'
        remote_username: 'nombre-usuario-secreto'
        remote_password: "{{ vault_alfresco_private_password }}"
      - 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

  roles:
    - role: ansiblebit.oracle-java
      oracle_java_set_as_default: yes
    - role: geerlingguy.apache
      apache_create_vhosts: no
    - role: savoirfairelinux.nexus3-oss

Licencia

GNU GPLv3

Información del Autor

Vea https://github.com/savoirfairelinux/ansible-nexus3-oss

Acerca del proyecto

Nexus Repository Manager 3.x for RedHat/CentOS

Instalar
ansible-galaxy install savoirfairelinux.nexus3-oss
Licencia
gpl-3.0
Descargas
24.2k
Propietario
Savoir-faire Linux