ansible-ThoTeam.nexus3-oss
Rôle Ansible : Nexus 3 OSS
Ce rôle installe et configure Nexus Repository Manager OSS version 3.x.
Toute 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.
L'intégration continue de ce rôle utilise fièrement des crédits OSS attribués par https://travis.com
Table des Matières
Remarque : Les liens dans la table des matières ne fonctionneront pas correctement lors de la consultation depuis le site d'Ansible Galaxy. Voir sur GitHub
(Créé avec gh-md-toc)
- Rôle Ansible : Nexus 3 OSS
- Table des Matières
- Historique / Crédits
- Exigences
- Variables de Rôle
- Variables générales
- Répertoire de téléchargement pour le package Nexus
- Port Nexus, chemin de contexte et IP d'écoute
- Utilisateur et groupe OS de Nexus
- Répertoires d'instance de Nexus
- Paramètres JVM de Nexus
- Installation de plugins
- Assistant d'intégration
- Mot de passe admin
- Accès anonyme par défaut
- Nom d'hôte public
- Accès API pour ce rôle
- Capacités de marque
- Capacité d'audit
- Visualiseur Log4j
- Configuration du reverse proxy
- Configuration LDAP
- Privilèges
- Rôles
- Utilisateurs
- Sélecteurs de contenu
- Politiques de nettoyage
- Blobstores et dépôts
- Tâches programmées
- Sauvegardes
- Variables spéciales de maintenance/debug
- Dépendances
- Exemple de Playbook
- Développement, Contribution et Tests
- Licence
- Informations sur l'auteur
Historique / Crédits
Ce rôle est un fork de ansible-nexus3-oss par @savoirfairelinux après qu'ils aient annoncé la fin de maintenance. Vous pouvez consulter les tickets suivants dans le dépôt d'origine pour des explications :
- https://github.com/savoirfairelinux/ansible-nexus3-oss/issues/36
- https://github.com/savoirfairelinux/ansible-nexus3-oss/issues/38
Nous souhaitons remercier les auteurs d'origine pour le travail accompli.
En Mémoriam [Lionel Lecha] (note de l'auteur principal) :
![]() |
Ce travail n'aurait jamais atteint la communauté en tant que projet Open Source sans la confiance inconditionnelle de Lionel Lecha, directeur de SMAP APPUI @La Poste lorsque j'ai commencé à automatiser le déploiement de Nexus pour son unité en 2018 en tant que sous-traitant. Lionel est décédé trop tôt le 17 février 2023 à l'âge de 60 ans. Merci pour toujours votre bonne humeur constante et votre confiance. |
Exigences
- Une version d'Ansible relativement à jour. Nous suivons les versions d'Ansible durant la maintenance/le développement et nous profiterons des nouvelles fonctionnalités si nécessaire (et mettrons à jour meta/main.yml pour la version minimale).
- OS compatible. Ce rôle est testé via Molecule sur Travis CI pour CentOS 8, Ubuntu Bionic (18.04), et Debian buster. D'autres scénarios de Molecule peuvent être exécutés localement pour CentOS 7, Ubuntu Xenial (16.04), et Debian stretch.
- Rsync doit être installé sur la machine cible (il n'est pas nécessaire sur l'hôte exécutant Ansible si différent).
- La bibliothèque
jmespath
doit être installée sur l'hôte exécutant le playbook (nécessaire pour le filtrejson_query
). Voirrequirements.txt
. - Java 8 (obligatoire)
- Oracle a annoncé la fin de vie de Java 8. Sonatype recommande maintenant openjdk8.
- Pour plus d'informations, voir exigences système de nexus3.
- Apache HTTPD (optionnel)
- Utilisé pour configurer un reverse proxy SSL.
- Les modules suivants doivent être activés dans votre configuration : mod_ssl, mod_rewrite, mod_proxy, mod_proxy_http, mod_headers.
(Voir la section Dépendances ci-dessous pour les rôles correspondants sur Galaxy)
Variables de Rôle
Variables Ansible, avec les valeurs par défaut (voir default/main.yml
) :
Variables générales
nexus_version: ''
nexus_timezone: 'UTC'
nexus_download_url: "http://download.sonatype.com/nexus/3"
# nexus_download_ssl_verify: <unset>
# nexus_version_running: <unset>
Le rôle installera la dernière version disponible de Nexus par défaut. Vous pouvez fixer la version en définissant la variable
nexus_version
. Voir les versions disponibles à l'adresse https://www.sonatype.com/download-oss-sonatype.
En cas de téléchargement lent via un proxy, un essai peut être utile pour éviter les délais d'attente. Vous pouvez ajouter des essais au téléchargement en définissant ces variables :
nexus_download_retries: 3 # 0 par défaut
nexus_download_delay: 15
Si vous fixez la version et la changez pour une autre, le rôle tentera de mettre à niveau votre installation.
Assurez-vous de changer pour une version ultérieure dans l'historique des versions. La rétrogradation échouera (à moins que vous ne réinstalliez
à partir de zéro en utilisant la nexus_purge
variable spéciale).
Si vous ne fixez pas la version et jouez le rôle sur une installation existante, la version installée actuelle sera utilisée
(détectant la cible de {{ nexus_installation_dir}}/nexus-latest
). Si vous souhaitez mettre à niveau Nexus, vous devrez passer
la variable spéciale nexus_upgrade=true
sur la ligne de commande d'ansible-playbook.
Voir Mettre à niveau Nexus vers la dernière version.
Si vous utilisez une version plus ancienne que la dernière, vous devez vous assurer de ne pas utiliser de fonctionnalités qui ne sont pas disponibles dans la version installée (par exemple, les dépôts hébergés par yum pour Nexus < 3.8.0, le dépôt git lfs pour Nexus < 3.3.0, etc.)
nexus_timezone
est un nom de fuseau horaire Java et peut être utile en combinaison avec les expressions cron de nexus_scheduled_tasks
ci-dessous.
Vous pouvez changer le site de téléchargement pour les packages en ajustant nexus_download_url
(par exemple, environnement fermé,
proxy/cache sur votre réseau...). Dans ce cas, la détection automatique de la dernière version échouera probablement
et vous devrez fixer la version à télécharger. Si vous souhaitez toujours profiter de la détection automatique de la dernière version,
un appel à <votre_emplacement_personnalisé>/latest-unix.tar.gz
doit renvoyer un HTTP 302 redirigeant vers la dernière version disponible
dans votre cache/proxy. Si votre emplacement de téléchargement utilise https avec un certificat auto-signé (ou d'une PKI privée) et
que vous avez des problèmes pour le faire valider (c'est-à-dire, des erreurs de téléchargement dans le rôle) et que vous faites pleinement confiance à la cible,
vous pouvez définir nexus_download_ssl_verify: false
.
nexus_version_running
est une variable utilisée en interne. En tant que telle, elle ne doit jamais être définie directement.
Elle n'existera que si Nexus est actuellement installé sur l'hôte et enregistrera la version actuelle avant d'exécuter
le rôle. Elle peut être utilisée plus tard dans votre playbook si nécessaire (par exemple, pour un e-mail de notification de mise à niveau).
Répertoire de téléchargement pour le package Nexus
nexus_download_dir: '/tmp'
Répertoire sur la cible où le package Nexus sera téléchargé.
Remarque importante : si vous avez l'intention d'exécuter le rôle régulièrement pour maintenir/provisionner votre installation Nexus, vous devez vous assurer que les fichiers téléchargés persistent entre les exécutions. Sur RHEL/CentOS spécifiquement, vous devez changer ce répertoire pour un emplacement qui n'est pas nettoyé automatiquement. Si le fichier de package ne persiste pas, il sera retéléchargé, ce qui pourrait entraîner un redémarrage inutile de Nexus.
Répertoire tmp local sur le contrôleur
nexus_local_tmp_dir: /tmp
Ce répertoire est utilisé pour créer une archive locale d'un script Groovy avant de les envoyer à la cible.
Sur un contrôleur Ansible partagé, vous devriez modifier ce chemin pour un que vous possédez (par exemple, /home/<user>/tmp
).
Important : ce répertoire doit exister.
Port, chemin de contexte et IP d'écoute de Nexus
nexus_default_port: 8081
nexus_application_host: '{{ httpd_setup_enable | ternary("127.0.0.1", "0.0.0.0") }}'
nexus_default_context_path: '/'
Port/IP d'écoute et chemin de contexte du processus Java Nexus.
- L'IP/Interface d'écoute (c'est-à-dire
nexus_application_host
) dépend par défaut de la configurationhttpd_setup_enable
. Nexus écoutera seulement sur localhost (127.0.0.1) si le reverse proxy est activé ou sur toutes les IP configurées (0.0.0.0) si ce n'est pas le cas. Vous pouvez changer ce paramètre selon vos besoins (c'est-à-dire ne pas installer de proxy et lier seulement à 127.0.0.1 si vous installez votre propre proxy). nexus_default_context_path
doit conserver la barre oblique de fin lorsqu'il est défini, par ex. :nexus_default_context_path: '/nexus/'
.
Utilisateur et groupe OS de Nexus
nexus_os_group: 'nexus'
nexus_os_gid: 1000
nexus_os_user: 'nexus'
nexus_os_uid: 1000
Utilisateur et groupe utilisés pour posséder les fichiers de Nexus et exécuter le service, ceux-ci seront créés par le rôle s'ils sont absents. Si définis, un uid et un gid seront utilisés lors de la création.
nexus_os_user_home_dir: '/home/nexus'
Permet de changer le répertoire personnel par défaut de l'utilisateur Nexus.
Répertoires d'instance de Nexus
nexus_installation_dir: '/opt'
nexus_data_dir: '/var/nexus'
nexus_tmp_dir: "{{ (ansible_os_family == 'RedHat') | ternary('/var/nexus-tmp', '/tmp/nexus') }}"
Répertoires Nexus.
nexus_installation_dir
contient les exécutions installées.nexus_data_dir
contient toute la configuration, les dépôts et les artefacts téléchargés. Les chemins blobstores personnalisés en dehors denexus_data_dir
peuvent être configurés, voirnexus_blobstores
ci-dessous.nexus_tmp_dir
contient tous les fichiers temporaires. Le chemin par défaut pour RedHat a été déplacé hors de/tmp
pour surmonter les problèmes potentiels avec les procédures de nettoyage automatique. Voir #168.
Paramètres JVM de Nexus
nexus_min_heap_size: "1200M"
nexus_max_heap_size: "{{ nexus_min_heap_size }}"
nexus_max_direct_memory: "2G"
Ce sont les valeurs par défaut pour Nexus. Veuillez ne pas modifier ces valeurs à moins que vous n'ayez lu la section mémoire des exigences système de Nexus et que vous compreniez ce que vous faites.
En second avertissement, voici un extrait du document ci-dessus :
Augmenter la mémoire heap de la JVM au-delà des valeurs recommandées dans le but d'améliorer les performances n'est pas conseillé. Cela peut effectivement avoir l'effet inverse, faisant que le système d'exploitation se débatte inutilement.
nexus_custom_jvm_settings: []
Paramètres supplémentaires à passer à la JVM. Ceux-ci sont vides par défaut et ne devraient pas contenir d'options liées à la mémoire ci-dessus
(c'est-à-dire tout ce qui commence par Xms, Xmx, ou XX:MaxDirectMemorySize=). Chaque option doit être définie comme un élément de la liste
sans le tiret de début (-
).
Voici un exemple pour changer le collecteur de déchets à G1 et régler les logs GC avec rotation.
nexus_custom_jvm_settings:
- XX:+UseG1GC
- XX:+PrintGCDetails
- Xloggc:{{ nexus_installation_dir }}log/gc.log
- XX:+UseGCLogFileRotation
- XX:NumberOfGCLogFiles=10
- XX:GCLogFileSize=50m
Installation de plugins
nexus_plugin_urls: []
Mettre une liste d'URLs pointant vers des plugins construits pour votre version de Nexus. Seuls les bundles *.kar peuvent être installés de cette manière.
Assistant d'intégration
nexus_onboarding_wizard: false
Contrôle si l'assistant d'intégration Nexus s'exécute lorsque l'utilisateur admin se connecte pour la première fois.
Mot de passe admin
nexus_admin_password: 'changeme'
Le mot de passe du compte 'admin' à configurer. Cela ne fonctionne que lors de la première installation par défaut. Veuillez consulter Changer le mot de passe admin après la première installation si vous souhaitez le modifier plus tard avec le rôle.
Il est fortement conseillé de ne pas conserver votre mot de passe en texte clair dans votre playbook et d'utiliser le chiffrement ansible-vault (soit en ligne soit dans un fichier séparé chargé avec include_vars par exemple).
Accès anonyme par défaut
nexus_anonymous_access: false
Autoriser l'accès anonyme à Nexus.
Nom d'hôte public
nexus_public_hostname: 'nexus.vm'
nexus_public_scheme: https
Le nom de domaine pleinement qualifié et le schéma sous lequel l'instance Nexus sera accessible à ses clients.
Accès API pour ce rôle
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 }}"
nexus_api_timeout: 60
Ces vars contrôlent comment le rôle se connecte à l'API Nexus pour le provisionnement. Pour les usages avancés uniquement. Vous ne voudrez probablement pas changer ces paramètres par défaut.
Remarque : le nexus_api_timeout
a été ajouté dans v2.4.19 et remplace le default
uri
module timeout de 30s pour tous les appels à l'API.
Capacités de marque
nexus_branding_header: ""
nexus_branding_footer: "Dernière provisionnée {{ ansible_date_time.iso8601 }}"
En-tête et pied de page de marque, ceux-ci peuvent contenir du HTML.
Capacité d'audit
nexus_audit_enabled: false
La capacité d'audit de Nexus est désactivée par défaut. Vous pouvez l'activer en le définissant sur true
. Veuillez noter que les données d'audit sont stockées dans la base de données de Nexus, persistent à travers les redémarrages et ne sont pas automatiquement tournées/nettoyées.
Visualiseur Log4j
nexus_log4j_visualizer_enabled: false
Par défaut, le visualiseur Log4j est désactivé. Vous pouvez l'activer en le définissant sur true
. Cela ajoutera la capacité log4j-visualizer à votre instance Nexus.
Configuration du reverse proxy
httpd_setup_enable: false
httpd_server_name: "{{ nexus_public_hostname }}"
httpd_default_admin_email: "[email protected]"
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
Configurer un reverse proxy SSL.
Ceci nécessite que httpd soit installé. Remarque : lorsque httpd_setup_enable
est défini sur true
, Nexus lie par défaut à 127.0.0.1:8081
donc pas directement accessible sur le port HTTP 8081 depuis une IP externe. (Si vous souhaitez changer cela, vous pouvez explicitement
définir nexus_application_host: 0.0.0.0
).
Le nom d'hôte par défaut utilisé est nexus_public_hostname
. Si vous avez besoin de noms différents pour une raison quelconque, vous pouvez définir
httpd_server_name
sur une valeur différente.
Avec httpd_copy_ssl_files: true
(par défaut), les certificats ci-dessus doivent exister dans votre répertoire de playbook et seront copiés vers le serveur et configurés dans Apache. httpd_ssl_certificate_chain_file
est optionnel et doit rester non défini si vous ne souhaitez pas configurer un fichier de chaîne.
Si vous souhaitez utiliser des certificats existants sur le serveur, définissez httpd_copy_ssl_files: false
et fournissez les variables suivantes :
# Ceux-ci spécifient au vhost où trouver sur le système distant les fichiers de certificat.
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
est optionnel et doit rester non défini si vous ne souhaitez pas configurer un fichier de chaîne.
httpd_default_admin_email: "[email protected]"
Définir l'adresse e-mail admin par défaut d'httpd.
Configuration LDAP
Les connexions LDAP et le domaine de sécurité sont désactivés par défaut.
nexus_ldap_realm: false
ldap_connections: []
Configuration des connexions LDAP, chaque élément se présente comme suit :
nexus_ldap_realm: true
ldap_connections:
- ldap_name: 'Mon LDAP d'Entreprise' # utilisé comme clé pour mettre à jour la configuration ldap
ldap_protocol: 'ldaps' # ldap ou ldaps
ldap_hostname: 'ldap.monentreprise.com'
ldap_port: 636
ldap_use_trust_store: false # S'il faut ou non utiliser des certificats dans le magasin de confiance de Nexus
ldap_search_base: 'dc=monentreprise,dc=net'
ldap_auth: 'none' # ou simple
ldap_auth_username: 'utilisateur' # si auth = simple
ldap_auth_password: 'motdepasse' # si auth = simple
ldap_user_base_dn: 'ou=users'
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=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
Exemple de configuration LDAP pour une authentification anonyme (anonyme bind), qui est également la configuration "minimal" :
nexus_ldap_realm: true
ldap_connection:
- 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_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'
Exemple de configuration LDAP pour une authentification simple (en utilisant un compte DSA) :
nexus_ldap_realm: true
ldap_connections:
- ldap_name: 'Configuration LDAP avec DSA'
ldap_protocol: 'ldaps'
ldap_hostname: 'annuaire.monentreprise.com'
ldap_port: 636
ldap_use_trust_store: false
ldap_auth: 'simple'
ldap_auth_username: 'cn=mynexus,ou=dsa,dc=monentreprise,dc=net'
ldap_auth_password: "{{ vault_ldap_dsa_password }}" # mieux vaut garder les mots de passe dans un coffre Ansible
ldap_search_base: 'dc=monentreprise,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
Exemple de configuration LDAP pour une authentification simple (en utilisant un compte DSA) + groupes mappés en rôles :
nexus_ldap_realm: true
ldap_connections:
- ldap_name: 'Configuration LDAP avec DSA'
ldap_protocol: 'ldaps'
ldap_hostname: 'annuaire.monentreprise.com'
ldap_port: 636
ldap_use_trust_store: false
ldap_auth: 'simple'
ldap_auth_username: 'cn=mynexus,ou=dsa,dc=monentreprise,dc=net'
ldap_auth_password: "{{ vault_ldap_dsa_password }}" # mieux vaut garder les mots de passe dans un coffre Ansible
ldap_search_base: 'dc=monentreprise,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=monentreprise,dc=net'
ldap_group_subtree: false
Exemple de configuration LDAP pour une authentification simple (en utilisant un compte DSA) + groupes mappés en rôles dynamiquement :
nexus_ldap_realm: true
ldap_connections:
- ldap_name: 'Configuration LDAP avec DSA'
ldap_protocol: 'ldaps'
ldap_hostname: 'annuaire.monentreprise.com'
ldap_port: 636
ldap_use_trust_store: false
ldap_auth: 'simple'
ldap_auth_username: 'cn=mynexus,ou=dsa,dc=monentreprise,dc=net'
ldap_auth_password: "{{ vault_ldap_dsa_password }}" # mieux vaut garder les mots de passe dans un coffre Ansible
ldap_search_base: 'dc=monentreprise,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'
@nliebelt a proposé une configuration avec des explications dans un problème pour configurer Nexus pour Active Directory.
Privilèges
nexus_privileges:
- name: all-repos-read # utilisé comme clé pour mettre à jour un privilège
# type: <un des application, repository-admin, repository-content-selector, repository-view, script ou wildcard>
description: 'Accès en lecture et navigation à tous les dépôts'
repository: '*'
actions: # peut être add, browse, create, delete, edit, read ou * (tous)
- read
- browse
# pattern: pattern
# domain: domain
# script_name: name
Liste des privilèges à configurer. Veuillez consulter la documentation et l'interface utilisateur pour vérifier quelles variables doivent être définies selon le type de privilège.
Ces éléments sont combinés avec les valeurs par défaut suivantes :
_nexus_privilege_defaults:
type: repository-view
format: maven2
actions:
- read
Rôles
nexus_roles:
- id: Developpers # peut se mapper à un id de groupe LDAP, utilisé également comme clé pour mettre à jour un rôle
name: developers
description: Tous les développeurs
privileges:
- nx-search-read
- all-repos-read
roles: [] # références à d'autres noms de rôle
En plus de créer des rôles, il est également possible de définir un rôle par défaut qui sera appliqué aux utilisateurs et aux requêtes anonymes lorsque Nexus ne trouve pas ou ne mappe pas le rôle correspondant. Le rôle par défaut peut être défini en utilisant :
nexus_default_role: "developers" # utilise le rôle 'developers' pour tous les utilisateurs/requêtes sans un rôle explicitement assigné. Par défaut : ""
Liste des rôles à configurer.
Utilisateurs
nexus_local_users: []
# - username: jenkins # utilisé comme clé pour mettre à jour
# state: present # valeur par défaut si omise, utilisez 'absent' pour supprimer l'utilisateur
# first_name: Jenkins
# last_name: CI
# email: [email protected]
# password: "s3cr3t"
# roles:
# - developers # id de rôle
Liste des utilisateurs/comptes locaux (non LDAP) à créer dans Nexus. L'état absent
supprimera l'utilisateur s'il existe.
nexus_ldap_users: []
# - username: j.doe
# state: present
# roles:
# - "nx-admin"
Mappages des utilisateurs/roles LDAP. L'état absent
supprimera les rôles de l'utilisateur existant s'ils sont déjà présents.
Les utilisateurs LDAP ne sont pas supprimés. Essayer de définir des rôles sur un utilisateur non existant entraînera une erreur.
Sélecteurs de contenu
nexus_content_selectors:
- name: docker-login
description: Sélecteur pour le privilège de connexion à Docker
search_expression: format=="docker" and path=~"/v2/"
Pour plus d'infos sur le sélecteur de contenu, voir la documentation.
Pour utiliser un sélecteur de contenu, ajoutez un nouveau privilège avec type: repository-content-selector
et le contentSelector
approprié.
- name: docker-login-privilege
type: repository-content-selector
contentSelector: docker-login
description: 'Connexion au registre Docker'
repository: '*'
actions:
- read
- browse
Politiques de nettoyage
nexus_repos_cleanup_policies:
# - name: mvn_cleanup
# format: maven2
# mode:
# notes: ""
# criteria:
# lastBlobUpdated: 60
# lastDownloaded: 120
# preRelease: RELEASES
# regexKey: "foo.*"
Définitions des politiques de nettoyage. Peut être ajoutées aux définitions des dépôts avec l'option cleanup_policies
.
Blobstores et dépôts
nexus_delete_default_repos: false
Supprimer certains dépôts de la configuration par défaut initiale de l'installation de Nexus. Cette étape n'est exécutée qu'à la première installation (quand nexus_data_dir
a été détecté comme vide).
nexus_delete_default_blobstore: false
Supprimer le blobstore par défaut de la configuration par défaut initiale de l'installation de Nexus. Cela ne peut être fait que si nexus_delete_default_repos: true
et que 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 (quand nexus_data_dir
a été détecté comme vide).
nexus_blobstores: []
# exemple d'élément 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 à créer. Un chemin de blobstore et un blobstore de dépôt ne peuvent pas être mis à jour après la création initiale (toute mise à jour ici sera ignorée lors de la re-provisionnement).
La configuration d'un blobstore sur S3 est fournie à titre de convenance et ne fait pas partie des tests automatisés que nous exécutons sur Travis. Veuillez noter que le stockage sur S3 n'est recommandé que pour les instances déployées sur AWS.
nexus_repos_maven_proxy:
- name: central
remote_url: 'https://repo1.maven.org/maven2/'
layout_policy: permissive
# cleanup_policies:
# - mvn_cleanup
# maximum_component_age: -1
# maximum_metadata_age: 1440
# negative_cache_enabled: true
# negative_cache_ttl: 1440
# La disposition de contenu n'est prise en charge que pour les proxys bruts et maven2 et peut être définie sur attachment ou inline. Inline est le par défaut Nexus, même lorsque la propriété n'est pas explicitement définie.
# content_disposition: inline
- name: jboss
remote_url: 'https://repository.jboss.org/nexus/content/groups/public-jboss/'
# cleanup_policies:
# - mvn_cleanup
# maximum_component_age: -1
# maximum_metadata_age: 1440
# negative_cache_enabled: true
# negative_cache_ttl: 1440
# La disposition de contenu n'est prise en charge que pour les proxys bruts et maven2 et peut être définie sur attachment ou inline. Inline est le par défaut Nexus, même lorsque la propriété n'est pas explicitement définie.
# content_disposition: inline
# exemple avec un login/mot de passe :
# - 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
# La disposition de contenu n'est que prise en charge pour les proxys bruts et maven2 et peut être définie sur attachment ou inline, inline étant le par défaut, même lorsque la propriété n'est pas explicitement définie.
# Pour définir des paramètres de requête HTTP :
# # enable_circular_redirects: true
# # enable_cookies: true
Configuration des dépôts Maven proxy.
nexus_repos_maven_hosted:
- name: private-release
version_policy: release
write_policy: allow_once # un des "allow", "allow_once" ou "deny"
# cleanup_policies:
# - mvn_cleanup
Configuration des dépôts Maven hébergés. La configuration du cache négatif est optionnelle et utilisera les valeurs ci-dessus par défaut si omise.
nexus_repos_maven_group:
- name: public
member_repos:
- central
- jboss
Configuration des dépôts Maven groupes.
Tous les trois types de dépôts 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 # un des "allow", "allow_once" ou "deny"
maximum_component_age: -1 # Défault de l'interface Nexus. Pour les proxys uniquement
maximum_metadata_age: 1440 # Défault de l'interface Nexus. Pour les proxys uniquement
negative_cache_enabled: true # Dédefault de l'interface Nexus. Pour les proxys uniquement
negative_cache_ttl: 1440 # Dédefault de l'interface Nexus. Pour les proxys uniquement
Dépôts Docker
nexus_repos_docker_group:
- name: some-docker-group
sub_domain: hub-proxy # Lorsqu'il est défini, cela exposera une URL de sous-domaine par exemple : https://hub-proxy.votre-instance-nexus.com
writable_member_repo: docker-hosted-repo
blob_store: docker-blob
v1_enabled: False
member_repos:
- docker-hosted-repo
nexus_repos_docker_hosted:
- name: some-docker-repo
blob_store: docker-blob
v1_enabled: false
write_policy: allow_once # Valeurs : "allow", "allow_once" ou "deny"
# Lorsqu'il est défini, cela ignorera la politique d'écriture définie et permettra de redéployer des images de conteneur uniquement avec le tag 'latest'.
allow_redeploy_latest: true
Types de dépôts Maven, Pypi, Docker, Raw, Rubygems, Bower, NPM, Git-LFS, yum, apt, helm, r, p2, conda et go :
voir defaults/main.yml
pour ces options. Pour des raisons historiques et pour maintenir la compatibilité arrière,
maven est configuré par défaut.
nexus_config_maven: true
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
nexus_config_apt: false
nexus_config_helm: false
nexus_config_r: false
nexus_config_p2: false
nexus_config_conda: false
nexus_config_go: false
Tous sont faux à moins que vous ne les remplaciez par un playbook / group_var / cli, tous utilisent le même mécanisme que maven.
Veuillez noter que vous devrez peut-être activer certains domaines de sécurité si vous souhaitez utiliser d'autres types de dépôts que Maven. Ceux-ci sont par défaut sur faux.
nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false # requis pour l'accès Docker anonyme
Le domaine d'utilisateur distant peut également être activé avec
nexus_rut_auth_realm: true
et l'en-tête peut être configuré en définissant
nexus_rut_auth_header: "CUSTOM_HEADER"
Tâches programmées
Voici quelques exemples rapides et instructions pour configurer des tâches programmées. Pour plus d'informations sur les types de tâches disponibles et les types de calendrier, veuillez vous référer à la section spécifique dans le wiki du dépôt.
nexus_scheduled_tasks: []
# # Exemple de tâche pour compacter le blobstore :
# - name: compact-docker-blobstore
# cron: '0 0 22 * * ?'
# typeId: blobstore.compact
# task_alert_email: [email protected] # optionnel
# taskProperties:
# blobstoreName: {{ nexus_blob_names.docker.blob }} # tous les attributs de la tâche sont stockés comme des chaînes en interne par nexus
# # Exemple de tâche pour purger les snapshots maven
# - name: Purge-maven-snapshots
# cron: '0 50 23 * * ?'
# typeId: repository.maven.remove-snapshots
# task_alert_email: [email protected] # optionnel
# taskProperties:
# repositoryName: "*" # * pour tous les dépôts. Changez pour un nom de dépôt si vous ne voulez qu'un dépôt spécifique
# minimumRetained: "2"
# snapshotRetentionDays: "2"
# gracePeriodInDays: "2"
# booleanTaskProperties:
# removeIfReleased: true
# # Exemple de tâche pour purger les manifestes et images Docker inutilisées
# - name: Purge unused docker manifests and images
# cron: '0 55 23 * * ?'
# typeId: "repository.docker.gc"
# task_alert_email: [email protected] # optionnel
# taskProperties:
# repositoryName: "*" # * pour tous les dépôts. Changez pour un nom de dépôt si vous ne voulez qu'un dépôt spécifique
# # Exemple de tâche pour purger les téléchargements Docker incomplets
# - name: Purge incomplete docker uploads
# cron: '0 0 0 * * ?'
# typeId: "repository.docker.upload-purge"
# task_alert_email: [email protected] # optionnel
# taskProperties:
# age: "24"
Tâches programmées à configurer. typeId
et taskProperties
/booleanTaskProperties
spécifiques à la tâche peuvent être devinés soit :
- à partir de la hiérarchie de types Java de
org.sonatype.nexus.scheduling.TaskDescriptorSupport
- en inspectant le formulaire HTML de création de tâche dans votre navigateur
- en observant les requêtes AJAX du navigateur lors de la configuration manuelle d'une tâche.
Les propriétés de tâche doivent être déclarées dans le bon bloc yaml en fonction de leur type :
taskProperties
pour toutes les propriétés de type chaîne (c'est-à-dire, noms de dépôts, noms de blobstore, périodes de temps...).booleanTaskProperties
pour toutes les propriétés booléennes (c'est-à-dire principalement des cases à cocher dans l'interface de création de tâche Nexus).
Sauvegardes
nexus_backup_configure: false
nexus_backup_schedule_type: cron
nexus_backup_cron: '0 0 21 * * ?' # Voir la définition des expressions cron dans l'interface de création de tâches de Nexus
# nexus_backup_start_date_time: "aaaa-MM-jj'T'HH:mm:ss"
# nexus_backup_weekly_days: ['LUN', 'MAR', 'MER', 'JEU', 'VEN', 'SAM']
# nexus_backup_monthly_days: {{ range(1,32) | list + [999] }}
nexus_backup_dir: '/var/nexus-backup'
nexus_backup_dir_create: true
nexus_restore_log: '{{ nexus_backup_dir }}/nexus-restore.log'
nexus_backup_rotate: false
nexus_backup_rotate_first: false
nexus_backup_keep_rotations: 4 # Conserver 4 rotations de sauvegarde par défaut (actuelle + dernières 3)
La sauvegarde ne sera pas configurée à moins que vous ne définissiez nexus_backup_configure: true
.
Dans ce cas, une tâche de script sera configurée dans Nexus.
Le calendrier de la tâche sera défini par défaut comme cron
et s'exécutera chaque jour à 21h00. Vous pouvez définir n'importe quel
calendrier que vous souhaitez en ajustant les variables nexus_backup_schedule_type
, nexus_backup_cron
,
nexus_backup_start_date_time
, nexus_backup_weekly_days
et nexus_backup_monthly_days
. Pour comprendre
leur utilisation en fonction du type de calendrier que vous choisissez, veuillez consulter Tâches programmées.
Voir le modèle Groovy pour cette tâche pour plus de détails.
Cette tâche programmée est indépendante des autres nexus_scheduled_tasks
que vous
déclarez dans votre playbook.
Si vous souhaitez faire des rotations de sauvegardes, définissez nexus_backup_rotate: true
et ajustez
le nombre de rotations que vous souhaitez conserver avec nexus_backup_keep_rotations
(par défaut 4).
Lorsque vous utilisez la rotation, si vous souhaitez économiser de l'espace disque supplémentaire pendant le processus de sauvegarde,
vous pouvez définir nexus_backup_rotate_first: true
. Cela configurera une pré-rotation
plutôt que la rotation postérieure par défaut. Veuillez noter qu'ainsi, l'ancienne sauvegarde est/les anciennes sauvegardes sont
supprimées avant que la sauvegarde actuelle ne soit effectuée avec succès.
Si vous souhaitez sauvegarder dans un répertoire monté (comme s3fs), vous pouvez définir nexus_backup_dir_create
sur false.
Procédure de restauration
Exécutez votre playbook avec le paramètre -e nexus_restore_point=<AAAA-MM-JJ-HH-mm-ss>
(par exemple 2017-12-17-21-00-00 pour le 17 décembre 2017 à 21h00m00s).
Limitations possibles
Les copies de blobstore sont effectuées directement par Nexus via la tâche programmée du script. Cela n'a été testé que sur des blobstores assez petits (moins de 50 Go) et doit être utilisé avec prudence et testé attentivement sur des installations plus grandes avant de passer en production. En tout cas, vous êtes libre de mettre en œuvre votre propre scénario de sauvegarde en dehors de ce rôle.
Variables spéciales de maintenance/debug
Celles-ci ne sont pas présentes dans defaults/main.yml
et sont destinées à être utilisées uniquement sur la ligne de commande à des fins de maintenance/debug.
Purge du nexus
Avertissement : ceci va complètement effacer les données actuelles. Assurez-vous de sauvegarder au préalable si nécessaire.
Utilisez la variable nexus_purge
si vous avez besoin de repartir de zéro et de réinstaller une instance de nexus vide.
ansible-playbook -i votre/inventory.ini votre_playbook_nexus.yml -e nexus_purge=true
Forcer l'enregistrement des scripts Groovy
Celui-ci est sûr et prolongera uniquement l'exécution du playbook si cela n'était pas nécessaire.
Pour des raisons de performance, nous utilisons une petite astuce avec plusieurs rsync pour détecter quels scripts de maintenance Groovy doivent être enregistrés dans Nexus. À certaines occasions (par exemple, mauvais mot de passe admin, récupération d'une sauvegarde d'une instance Nexus précédente avec des scripts non enregistrés...), cela peut entraîner une situation où le rôle échoue en tentant d'exécuter les scripts Groovy nécessaires.
Le symptôme : vous obtenez des erreurs HTTP 404 lorsque le rôle essaie d'exécuter des scripts comme dans l'exemple suivant (utilisez l'option -v
pour le playbook Ansible) :
fatal: [nexus3-oss]: FAILED! => {"changed": false, "connection": "close", "content": "", "date": "Tue, 11 Sep 2018 07:57:44 GMT", "msg": "Le code d'état était 404 et non [200, 204]: HTTP Error 404: Not Found", "redirected": false, "server": "Nexus/3.13.0-01 (OSS)", "status": 404, "url": "http://localhost:8081/service/rest/v1/script/update_admin_password/run", "x_content_type_options": "nosniff", "x_siesta_faultid": "914acef2-f644-4bd6-9a7d-ce19255ea3dd"}
Dans de tels cas, vous pouvez forcer l'enregistrement (ou la ré-inscription) des scripts Groovy avec la variable nexus_force_groovy_scripts_registration
:
ansible-playbook -i votre/inventory.ini votre_playbook.yml -e nexus_force_groovy_scripts_registration=true
Changer le mot de passe admin après la première installation
nexus_default_admin_password: 'admin123'
Cela ne devrait pas être modifié dans votre playbook. Cette variable est remplie avec le mot de passe admin par défaut de Nexus à la première installation et garantit que nous pouvons changer le mot de passe admin en nexus_admin_password
.
Si vous souhaitez changer votre mot de passe admin après la première installation, vous pouvez temporairement changer cela pour votre ancien mot de passe depuis la ligne de commande. Après avoir modifié nexus_admin_password
dans votre playbook, vous pouvez exécuter :
ansible-playbook -i votre/inventory.ini votre_playbook.yml -e nexus_default_admin_password=ancienMotDePasse
Mettre à niveau Nexus vers la dernière version
nexus_upgrade: true
Cette variable n'a aucun effet si nexus_version
est fixée dans vos vars.
À moins que vous ne définissiez cette variable, le rôle conservera la version Nexus installée actuelle lorsqu'il sera exécuté contre une hôte déjà provisionnée. Passer cette variable supplémentaire déclenchera la détection automatique de la dernière version de Nexus et la mise à niveau si une nouvelle version est disponible.
Définir cette variable comme partie de votre playbook rompt l'idempotence. (c'est-à-dire que votre playbook apportera des modifications à votre système si une nouvelle version est disponible bien que aucun paramètre n'ait changé).
Nous vous conseillons fortement d'utiliser cette variable uniquement comme variable supplémentaire pour l'appel ansible-playbook :
ansible-playbook -i votre/inventory.ini votre_playbook.yml -e nexus_upgrade=true
Corriger l'échec de la mise à niveau en attendant le port Nexus
Si vous avez un grand dépôt Nexus, vous pouvez parfois voir un message d'erreur lors de la mise à niveau :
RUNNING HANDLER [nexus3-oss : wait-for-nexus-port] *************
fatal: [nexushost]: FAILED! => {"changed": false, "elapsed": 300, "msg": "Timeout when waiting for 127.0.0.1:8081"}
Ceci est probablement dû au fait que le processus de mise à niveau de Nexus (c'est-à-dire la migration interne d'OrientDB) prend plus de temps que le délai par défaut de 300 secondes. Vous pouvez surmonter cette situation en définissant un délai d'attente personnalisé en secondes et/ou un nombre de tentatives pour la tâche de gestionnaire.
ansible-playbook -i votre/inventory.ini votre_playbook.yml \
-e nexus_upgrade=true \
-e nexus_wait_for_port_timeout=600 \
-e nexus_wait_for_port_retries=2
Ignorer les tâches de provisionnement
nexus_run_provisionning: false
Cette variable est non définie par défaut et sera par défaut sur true
. La définir sur false
fera que le rôle ignorera toutes les tâches de
provisionnement et ne créera donc pas de mise à jour :
- configurations LDAP
- sélecteurs de contenu
- privilèges
- rôles
- utilisateurs (sauf vérification/mise à jour du mot de passe admin)
- blobstores
- dépôts
- tâches (la sauvegarde sera toujours configurée si activée).
Cela peut faire gagner du temps si vous avez beaucoup de dépôts/utilisateurs/rôles configurés et que vous souhaitez jouer le rôle pour simplement vérifier que Nexus est correctement installé, ou restaurer une sauvegarde, ou mettre à niveau la version de Nexus.
Nous vous conseillons fortement d'utiliser cette variable uniquement comme variable supplémentaire pour l'appel ansible-playbook :
ansible-playbook -i votre/inventory.ini votre_playbook.yml -e nexus_run_provisionning=false
Forcer la vérification récursive des droits des répertoires de blobstores
Introduit dans la version 2.4.9
nexus_blobstores_recurse_owner: true
Dans les versions antérieures à 2.4.9, la tâche pour créer les répertoires de blobstores effectuait une vérification récursive des droits de tous les fichiers. Cela ne posait pas de problèmes lors de la création (où le répertoire est vide) ou avec des installations de petits blobstores, mais pouvait entraîner des retards extrêmement longs pour les grands blobstores avec beaucoup de fichiers.
La vérification récursive des droits a été désactivée par défaut pour éviter ce délai supplémentaire. Si pour une raison quelconque vous devez vous assurer que tous les fichiers dans les répertoires de blobstores sont possédés par l'utilisateur Nexus, vous pouvez forcer la vérification :
ansible-playbook -i votre/inventory.ini votre_playbook.yml -e nexus_blobstores_recurse_owner=true
Dépendances
Les exigences Java et httpd / peuvent être satisfaites avec les rôles Galaxy suivants :
N'hésitez pas à les utiliser ou à mettre en œuvre votre propre scénario d'installation à votre convenance.
Exemple de Playbook
---
- name: Nexus
hosts: nexus
become: yes
vars:
nexus_timezone: 'Canada/Eastern'
nexus_admin_password: "{{ vault_nexus_admin_password }}"
nexus_public_hostname: '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: 'Company LDAP'
ldap_protocol: 'ldaps'
ldap_hostname: 'ldap.company.com'
ldap_port: 636
ldap_search_base: 'dc=company,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: 'Accès en 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: Developpers # se mappe au groupe LDAP
name: developers
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:
- Developpers # 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: 'secret-username'
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
nexus_repos_docker_group:
- name: some-docker-group
sub_domain: hub-proxy
writable_member_repo: docker-hosted-repo
blob_store: docker-blob
v1_enabled: False
member_repos:
- docker-hosted-repo
nexus_repos_npm_proxy:
- name: npm-proxy-name
blob_store: company-artifacts
blocked: false # Par défaut c'est faux
auto_block: true # Par défaut c'est vrai
connection_timeout: 200 # Par défaut non défini
connection_retries: 5 # Par défaut non défini
user_agent_suffix: custom-agent # Par défaut non défini
remote_url: https://some-private-registry.dev/
remote_username: 'secret-username'
remote_password: "{{ vault_alfresco_secret_password }}"
# Vous pouvez également utiliser un jeton préemptif en définissant la propriété bearerToken
# bearerToken: "{{ vault_alfresco_secret_bearertoken }}"
roles:
- { role: geerlingguy.java, vars: Voir la doc de rôle pour votre distribution/version }
# Seulement pour Debian/Ubuntu
# - { role: geerlingguy.apache, apache_create_vhosts: no, apache_mods_enabled: ["proxy.load", "proxy_http.load", "headers.load", "ssl.load", "rewrite.load"], apache_remove_default_vhost: true, tags: ["geerlingguy.apache"] }
# Seulement pour 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'] }
Développement, Contribution et Tests
Contributions
Toutes les contributions à ce rôle sont les bienvenues, que ce soit pour des correctifs, de nouvelles fonctionnalités ou de la documentation.
Si vous souhaitez contribuer :
- Forkez le dépôt sous votre propre nom/organisation via l'interface GitHub.
- Créez une branche dans votre propre dépôt avec un nom significatif. Nous suggérons la convention de nommage suivante :
feat/<someFeature>
pour les fonctionnalitésfix/<someBugFix>
pour les corrections de boguesdocfix/<someDocFix>
pour les corrections modifiant uniquement la documentation
- Si vous commencez un changement de fonctionnalité important, ouvrez une demande de tirage tôt en décrivant ce que vous voulez faire afin que nous puissions en discuter si nécessaire. Cela vous évitera de faire beaucoup de travail sur beaucoup de code pour des changements que nous ne pourrons finalement pas fusionner.
- S'il y a des erreurs de construction sur votre demande de tirage, jetez un coup d'œil au journal de Travis et corrigez les erreurs pertinentes.
De plus, si vous avez le temps à consacrer à la revue de code, à la fusion pour les versions, etc., envoyez un e-mail à contact@thoteam.com pour entrer en contact.
Test
Ce rôle inclut des tests et une intégration CI via Travis. Pour le moment, nous testons :
- syntaxe des scripts Groovy
- syntaxe YAML et normes de codage (yamllint)
- bonnes pratiques Ansible (ansible lint)
- un ensemble de déploiements de base sur 2 plateformes Linux différentes
- Rockylinux 9 (comme un parent proche des produits RHEL puisque CentOS est obsolète)
- Debian 12 Bookworm.
D'autres tests sont disponibles pour les plateformes plus anciennes/différentes mais ne sont pas exécutés sur CI pour des raisons de performance :
- Rockylinux 8
- Debian 11 bullseye
- Ubuntu 20.04 Focal
- Ubuntu 22.04 Jammy
Syntaxe Groovy
Ce rôle contient un ensemble de fichiers Groovy utilisés pour provisionner Nexus.
Si vous soumettez des modifications aux fichiers Groovy, veuillez exécuter la vérification de syntaxe Groovy localement avant de pousser vos modifications :
./tests/test_groovySyntax.sh
Cela garantira que vous poussez des fichiers Groovy avec la bonne syntaxe limitant le nombre d'erreurs vérifiées sur Travis.
Vous aurez besoin du paquet Groovy installé localement pour exécuter ce test.
Scénarios par défaut de Molecule
Le rôle est testé sur Travis avec molecule. Vous pouvez exécuter ces tests localement. La meilleure façon d'y parvenir est grâce à un environnement virtuel Python. Vous pouvez trouver plus de détails dans requirements.txt
.
# Remarque : le chemin suivant devrait être en dehors du répertoire de travail
virtualenv /path/to/some/pyenv
. /path/to/some/pyenv/bin/activate
pip install -r requirements.txt
molecule [create|converge|destroy|test] -s <nom du scénario>
deactivate
Veuillez consulter la documentation de Molecule (un bon début est molecule --help
) pour un usage ultérieur.
Les scénarios actuellement proposés font référence aux plateformes testées (voir le répertoire molecule/
). Si vous lancez un scénario et laissez le conteneur en cours d'exécution (c'est-à-dire en utilisant converge
pour un simple déploiement), vous pouvez accéder à l'instance en cours d'exécution via votre navigateur à https://localhost:molecule/<scénario>/molecule.yml
pour plus de détails.
À titre de commodité, voici la correspondance entre les scénarios et les ports configurés :
- default-rockylinux8 => https://localhost:8090
- default-rockylinux9 => https://localhost:8091
- default-debian_bullseye => https://localhost:8092
- default-debian_bookworm => https://localhost:8093
- default-ubuntu_20.04 => https://localhost:8094
- default-ubuntu_22.04 => https://localhost:8095
Pour accélérer les tests, Molecule utilise des images Docker pré-construites.
- Git repo : https://github.com/docker-ThoTeam/molecule_apache_openjdk8
- Registre Docker hub : https://hub.docker.com/repository/docker/thoteam/molecule_apache_openjdk8
Veuillez noter que ces images sont construites et poussées sur une base de meilleures efforts chaque fois que nécessaire pour les changements dans ce dépôt.
Licence
GNU GPLv3.
Informations sur l'auteur
Voir : https://github.com/ansible-ThoTeam
[Lionel Lecha] : https://www.linkedin.com/in/lionellecha/
Nexus Repository Manager 3.x (Sonatype)
ansible-galaxy install ansible-ThoTeam.nexus3-oss