savoirfairelinux.nexus3-oss

Rôle Ansible : Nexus 3 OSS

Ce rôle installe et configure Nexus Repository Manager OSS version 3.x sur CentOS/RHEL.

Toute la configuration peut être mise à jour en relançant le rôle, sauf pour les paramètres liés aux blobstores, qui sont immuables dans Nexus.

Exigences

  • Testé uniquement sur CentOS 7 et Ubuntu 16.04 (Xenial)
  • Oracle Java 8 (obligatoire)
  • Apache HTTPD (facultatif, utilisé pour configurer un SSL reverse-proxy)

(voyez la section Dépendances ci-dessous pour les rôles correspondants sur Galaxy)

Variables du Rôle

Variables Ansible, avec les valeurs par défaut (voir default/main.yml) :

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

La version et le package de Nexus à installer, voir les versions disponibles sur https://www.sonatype.com/download-oss-sonatype. nexus_timezone est un nom de fuseau horaire Java et peut être utile en combinaison avec les expressions cron nexus_scheduled_tasks ci-dessous.

nexus_download_dir: '/tmp'

Répertoire sur la cible où le package Nexus sera téléchargé.

nexus_default_port: 8081
nexus_default_context_path: '/'

Port et chemin de contexte du processus Java Nexus. nexus_default_context_path doit garder le slash final lorsqu'il est défini, par exemple : nexus_default_context_path: '/nexus/'.

nexus_os_group: 'nexus'
nexus_os_user: 'nexus'

Utilisateur et groupe utilisés pour posséder les fichiers Nexus et exécuter le service, ceux-ci seront créés par le rôle s'ils sont absents.

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

Répertoires Nexus, nexus_installation_dir contient les exécutables installés, nexus_data_dir contient toute la configuration, les dépôts et les artefacts téléchargés. Remarque : les chemins de blobstores personnalisés à l'extérieur de nexus_data_dir peuvent être configurés, voir nexus_blobstores ci-dessous.

nexus_admin_password: 'changeme'

Le mot de passe du compte 'admin' à configurer. Remarque : le changement de mot de passe admin après la première installation n'est pas encore implémenté par ce rôle.

nexus_anonymous_access: false

Permettre l'accès anonyme à Nexus.

public_hostname: 'nexus.vm'

Le nom de domaine entièrement qualifié sous lequel l'instance Nexus sera accessible à ses clients.

nexus_branding_header: ""
nexus_branding_footer: "Dernière provisionné {{ ansible_date_time.iso8601 }}"

En-tête et pied de page de marque, ceux-ci peuvent contenir du HTML.

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

Configurer un SSL Reverse-proxy, cela nécessite que httpd soit installé. Remarque : lorsque httpd_setup_enable est défini sur true, Nexus se lie à 127.0.0.1:8081 et n'est donc pas directement accessible sur le port HTTP 8081 depuis une IP externe.

ldap_connections: []

Configuration de connexion(s) LDAP, chaque élément est le suivant :

  - ldap_name: 'Mon LDAP d'entreprise' # utilisé comme clé pour mettre à jour la config ldap
    ldap_protocol: 'ldaps' # ldap ou ldaps
    ldap_hostname: 'ldap.monentreprise.com'
    ldap_port: 636
    ldap_search_base: 'dc=monentreprise,dc=net'
    ldap_auth: 'none' # ou simple
    ldap_auth_username: 'nom_utilisateur' # si auth = simple
    ldap_auth_password: 'mot_de_passe' # si auth = simple
    ldap_user_base_dn: 'ou=utilisateurs'
    ldap_user_filter: '(cn=*)' # (optionnel)
    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=groupes'
    ldap_group_object_class: 'posixGroup'
    ldap_group_id_attribute: 'cn'
    ldap_group_member_attribute: 'memberUid'
    ldap_group_member_format: '${username}'
    ldap_group_subtree: false

Exemple de configuration LDAP pour l'authentification anonyme (liaison anonyme), voici la "configuration minimale" :

  - ldap_name: 'Configuration LDAP la plus simple'
    ldap_protocol: 'ldaps'
    ldap_hostname: 'annuaire.monentreprise.com'
    ldap_search_base: 'dc=monentreprise,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'

Exemple de configuration LDAP pour l'authentification simple (utilisant un compte DSA) :

  - ldap_name: 'Configuration LDAP avec DSA'
    ldap_protocol: 'ldaps'
    ldap_hostname: 'annuaire.monentreprise.com'
    ldap_port: 636
    ldap_auth: 'simple'
    ldap_auth_username: 'cn=monnexus,ou=dsa,dc=monentreprise,dc=net'
    ldap_auth_password: "{{ vault_ldap_dsa_password }}" # il est préférable de garder les mots de passe dans un coffre Ansible
    ldap_search_base: 'dc=monentreprise,dc=net'
    ldap_user_base_dn: 'ou=utilisateurs'
    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

Exemple de configuration LDAP pour l'authentification simple (utilisant un compte DSA) + groupes mappés en rôles :

  - ldap_name: 'Configuration LDAP avec DSA'
    ldap_protocol: 'ldaps'
    ldap_hostname: 'annuaire.monentreprise.com'
    ldap_port: 636
    ldap_auth: 'simple'
    ldap_auth_username: 'cn=monnexus,ou=dsa,dc=monentreprise,dc=net'
    ldap_auth_password: "{{ vault_ldap_dsa_password }}" # il est préférable de garder les mots de passe dans un coffre Ansible
    ldap_search_base: 'dc=monentreprise,dc=net'
    ldap_user_base_dn: 'ou=utilisateurs'
    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=groupes'
    ldap_group_object_class: 'groupOfNames'
    ldap_group_id_attribute: 'cn'
    ldap_group_member_attribute: 'member'
    ldap_group_member_format: 'uid=${username},ou=utilisateurs,dc=monentreprise,dc=net'
    ldap_group_subtree: false
nexus_privileges:
  - name: all-repos-read # utilisé comme clé pour mettre à jour un privilège
    description: 'Accès lecture et navigation à tous les dépôts'
    repository: '*'
    actions: # peuvent être add, browse, create, delete, edit, read ou * (tous)
      - read
      - browse

Liste des privilèges à configurer. Ces éléments sont combinés avec les valeurs par défaut suivantes :

    _nexus_privilege_defaults:
      type: repository-view
      format: maven2
      actions:
        - read
    nexus_roles:
      - id: Developpeurs # peut correspondre à un ID de groupe LDAP, utilisé comme clé pour mettre à jour un rôle
        name: developpeurs
        description: Tous les développeurs
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # références à d'autres noms de rôle

Liste des rôles à configurer.

nexus_local_users: []

Utilisateurs/Comptes locaux (non-LDAP) à créer dans Nexus, les éléments se présentent comme suit :

  - username: jenkins # utilisé comme clé pour mettre à jour
    first_name: Jenkins
    last_name: CI
    email: [email protected]
    password: "s3cr3t"
    roles:
      - developpeurs # ID de rôle
nexus_delete_default_repos: false

Supprimer les dépôts de la configuration initiale de Nexus. Cette étape n'est exécutée qu'à la première installation (lorsque nexus_data_dir a été détecté comme vide).

nexus_delete_default_blobstore: false

Supprimer le blobstore par défaut de la configuration initiale de Nexus. Cela ne peut être fait que si nexus_delete_default_repos: true et tous les dépôts configurés (voir ci-dessous) ont un blob_store: custom explicite. Cette étape n'est exécutée qu'à la première installation (lorsque nexus_data_dir a été détecté comme vide).

nexus_blobstores: []
# exemple d'élément blobstore :
# - name: separate-storage
#   path: /mnt/custom/path

Blobstores à créer. Un chemin de blobstore et un dépôt de blobstore ne peuvent pas être mis à jour après leur création initiale (toute mise à jour ici sera ignorée lors de la reprise).

nexus_scheduled_tasks: []
#  exemple de tâche pour compacter le blobstore :
#  - name: compact-blobstore
#    cron: '0 0 22 * * ?'
#    typeId: blobstore.compact
#    taskProperties:
#      blobstoreName: 'default' # tous les attributs de tâche sont stockés sous forme de chaînes par Nexus en interne

Tâches planifiées à configurer. typeId et taskProperties spécifiques aux tâches peuvent être devinés à partir de la hiérarchie des types Java org.sonatype.nexus.scheduling.TaskDescriptorSupport ou en regardant les requêtes AJAX du navigateur lors de la configuration manuelle d'une tâche.

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/'
# exemple avec un login/mot de passe :
# - name: secret-remote-repo
#   remote_url: 'https://monentreprise.com/repo/secure/private/go/away'
#   remote_username: 'nom_utilisateur'
#   remote_password: 'secret'

Configuration des référentiels proxy Maven.

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

Configuration des référentiels hébergés Maven.

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

Configuration des groupes de référentiels Maven.

Tous les trois types de référentiels sont combinés avec les valeurs par défaut suivantes :

    _nexus_repos_maven_defaults:
      blob_store: default # Remarque : ne peut pas être mis à jour une fois le dépôt créé
      strict_content_validation: true
      version_policy: release # release, snapshot ou mixed
      layout_policy: strict # strict ou permissive
      write_policy: allow_once # allow_once ou allow

Types de référentiels : Docker, Pypi, Raw, Rubygems, Bower, NPM, et Git-LFS : voir defaults/main.yml pour ces options :

  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

Tous sont falses à moins de les remplacer par playbook / group_var / cli, ces derniers utilisent tous le même mécanisme que Maven.

Dépendances

Ce rôle nécessite Ansible 2.1 ou supérieur.

Les exigences java et httpd /peuvent/ être satisfaites avec les rôles Galaxy suivants :

Exemple 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 l'entreprise'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'ldap.entreprise.com'
        ldap_port: 636
        ldap_search_base: 'dc=entreprise,dc=net'
        ldap_user_base_dn: 'ou=utilisateurs'
        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=groupes'
        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: 'Accès lecture et navigation à tous les dépôts'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Déploiements vers le projet d\'entreprise'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpeurs # correspond au groupe LDAP
        name: developpeurs
        description: Tous les développeurs
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # utilisé comme clé pour mettre à jour
        first_name: Jenkins
        last_name: CI
        email: [email protected]
        password: "s3cr3t"
        roles:
          - Developpeurs # ID de rôle ici
    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: 'nom-utilisateur-secret'
        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

Licence

GNU GPLv3

Informations sur l'auteur

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

À propos du projet

Nexus Repository Manager 3.x for RedHat/CentOS

Installer
ansible-galaxy install savoirfairelinux.nexus3-oss
Licence
gpl-3.0
Téléchargements
24.2k
Propriétaire
Savoir-faire Linux