Installation et configuration de Nexus Sonatype en utilisant l'approche infrastructure as code

Sonatype Nexus est une plateforme intégrée grâce à laquelle les développeurs peuvent proxy, stocker et gérer les dépendances Java (Maven), Docker, Python, Ruby, NPM, les images Bower, les packages RPM, gitlfs, Apt, Go, Nuget, et distribuer leur sécurité logicielle.

Pourquoi avez-vous besoin de Sonatype Nexus ?

  • Pour stocker des artefacts privés ;
  • Pour mettre en cache les artefacts téléchargés depuis Internet ;

Artefacts pris en charge dans le package de base Sonatype Nexus :

  • Java, Maven (jar)
  • Docker
  • Python (pépin)
  • Rubis (gemme)
  • NPM
  • Tonnelle
  • Miam (tr/min)
  • gitlfs
  • raw
  • Apte (déb)
  • Go
  • Pépite

Artefacts pris en charge par la communauté :

  • Compositeur
  • Conan
  • RPC
  • EL PA
  • Casque
  • P2
  • R

Installation de Sonatype Nexus à l'aide de https://github.com/ansible-ThoTeam/nexus3-oss

Exigences

  • Découvrez comment utiliser Ansible sur Internet.
  • Installer Ansible pip install ansible sur le poste de travail sur lequel le playbook s'exécute.
  • Fixer geerlingguy.java sur le poste de travail sur lequel le playbook s'exécute.
  • Fixer geerlingguy.apache sur le poste de travail sur lequel le playbook s'exécute.
  • Ce rôle a été testé sur CentOS 7, Ubuntu Xenial (16.04) et Bionic (18.04), Debian Jessie et Stretch
  • jmespath La bibliothèque doit être installée sur le poste de travail sur lequel le playbook est exécuté. À installer: sudo pip install -r requirements.txt
  • Enregistrez le fichier playbook (exemple ci-dessous) dans le fichier nexus.yml
  • Exécuter l'installation de Nexus ansible-playbook -i host nexus.yml

Exemple de playbook ansible pour installer Nexus sans LDAP avec les référentiels Maven (java), Docker, Python, Ruby, NPM, Bower, RPM et 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: 'Read & Browse access to all repos'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Deployments to company-project'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # maps to the LDAP group
        name: developers
        description: All developers
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # used as key to update
        first_name: Jenkins
        last_name: CI
        email: [email protected]
        password: "s3cr3t"
        roles:
          - Developpers # role ID here
    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. Change nexus_config_yum to true for create yum repository
    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. Change nexus_config_npm to true for create npm repository
    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. Change nexus_config_docker to true for create docker repository
    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. Change nexus_config_bower to true for create bower repository
    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. Change nexus_config_pypi to true for create pypi repository
    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. Change nexus_config_rubygems to true for create rubygems repository
    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. Change nexus_config_gitlfs to true for create gitlfs repository
    nexus_config_gitlfs: true
    nexus_repos_gitlfs_hosted:
      - name: gitlfs-hosted

  roles:
    - { role: geerlingguy.java }
    # Debian/Ubuntu only
    # - { role: geerlingguy.apache, apache_create_vhosts: no, apache_mods_enabled: ["proxy_http.load", "headers.load"], apache_remove_default_vhost: true, tags: ["geerlingguy.apache"] }
    # RedHat/CentOS only
    - { 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'] }

Captures d'écran:

Installation et configuration de Nexus Sonatype en utilisant l'approche infrastructure as code

Installation et configuration de Nexus Sonatype en utilisant l'approche infrastructure as code

Rôles variables

Variables de rôle

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

Variables générales

    nexus_version: ''
    nexus_timezone: 'UTC'

Par défaut, le rôle installera la dernière version disponible de Nexus. Vous pouvez corriger la version en changeant la variable nexus_version. Voir les versions disponibles sur https://www.sonatype.com/download-oss-sonatype.

Si vous passez à une version plus récente, le rôle tentera de mettre à jour votre installation Nexus.

Si vous utilisez une version de Nexus plus ancienne que la dernière, vous devez vous assurer que vous n'utilisez pas de fonctionnalités qui ne sont pas disponibles dans la version installée (par exemple, l'hébergement de référentiels Yum est disponible pour Nexus supérieur à 3.8.0, repo git lfs pour les liens supérieurs à 3.3.0, etc.)

nexus timezone est le nom du fuseau horaire Java, qui peut être utile en combinaison avec les expressions cron suivantes pour les tâches nexus_scheduled.

Port Nexus et chemin de contexte

    nexus_default_port: 8081
    nexus_default_context_path: '/'

Le port et le chemin de contexte du processus de connexion Java. nexus_default_context_path doit contenir une barre oblique lorsqu'elle est définie, par exemple : nexus_default_context_path: '/nexus/'.

Utilisateur et groupe Nexus OS

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

L'utilisateur et le groupe utilisés pour posséder les fichiers Nexus et exécuter le service seront créés par le rôle s'il en manque un.

    nexus_os_user_home_dir: '/home/nexus'

Autoriser la modification du répertoire personnel par défaut pour l'utilisateur Nexus

Répertoires d'instances Nexus

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

Catalogues Nexus.

  • nexus_installation_dir contient des fichiers exécutables installés
  • nexus_data_dir contient toute la configuration, les référentiels et les artefacts téléchargés. Chemins d’accès blobstore personnalisés nexus_data_dir peut être personnalisé, voir ci-dessous nexus_blobstores.
  • nexus_tmp_dir contient tous les fichiers temporaires. Le chemin par défaut pour RedHat a été déplacé de /tmp pour surmonter les problèmes potentiels liés aux procédures de nettoyage automatiques. Voir #168.

Configuration de l'utilisation de la mémoire Nexus JVM

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

Ce sont les paramètres par défaut pour Nexus. Veuillez ne pas modifier ces valeurs Si vous n'avez pas lu section mémoire requise pour la configuration système Nexus et je ne comprends pas ce qu'ils font.

En guise de deuxième avertissement, voici un extrait du document ci-dessus :

Il n'est pas recommandé d'augmenter la mémoire du tas JVM au-delà des valeurs recommandées pour tenter d'améliorer les performances. Cela peut en réalité avoir l’effet inverse, entraînant un travail inutile pour le système d’exploitation.

Mot de passe administrateur

    nexus_admin_password: 'changeme'

Le mot de passe du compte « admin » pour la configuration. Cela ne fonctionne que sur la première installation par défaut. Veuillez consulter [Modifier le mot de passe administrateur après la première installation](# change-admin-password-after-first-install) si vous souhaitez le modifier ultérieurement à l'aide d'un rôle.

Il est fortement recommandé de ne pas stocker votre mot de passe sous forme de texte clair dans le playbook, mais d'utiliser le [chiffrement ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (soit en ligne, soit dans un fichier séparé chargé par exemple avec include_vars)

Accès anonyme par défaut

    nexus_anonymous_access: false

L'accès anonyme est désactivé par défaut. En savoir plus sur accès anonyme.

Nom d'hôte public

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Le nom de domaine complet et le schéma (https ou http) sous lesquels l'instance Nexus sera disponible pour 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 }}"

Ces variables contrôlent la manière dont le rôle se connecte à l'API Nexus pour le provisionnement.
Pour les utilisateurs avancés uniquement. Vous ne souhaitez probablement pas modifier ces paramètres par défaut

Mise en place d'un proxy inverse

    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

Fixer Proxy inverse SSL.
Pour ce faire, vous devez installer httpd. Remarque : quand pour httpd_setup_enable valeur de consignetrue, Nexus contacte 127.0.0.1:8081, donc aucun étant directement accessible via le port HTTP 8081 depuis l'adresse IP externe.

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 avec une signification différente.

С httpd_copy_ssl_files: true (par défaut) les certificats ci-dessus doivent exister dans votre répertoire playbook et seront copiés sur le serveur et configurés dans Apache.

Si vous souhaitez utiliser des certificats existants sur le serveur, installez httpd_copy_ssl_files: false et fournissez les variables suivantes :

    # These specifies to the vhost where to find on the remote server file
    # system the certificate files.
    httpd_ssl_cert_file_location: "/etc/pki/tls/certs/wildcard.vm.crt"
    httpd_ssl_cert_key_location: "/etc/pki/tls/private/wildcard.vm.key"
    # httpd_ssl_cert_chain_file_location: "{{ httpd_ssl_cert_file_location }}"

httpd_ssl_cert_chain_file_location est facultatif et ne doit pas être défini si vous ne souhaitez pas personnaliser le fichier de chaîne

    httpd_default_admin_email: "[email protected]"

Définir l'adresse e-mail de l'administrateur par défaut

Configuration LDAP

Les connexions LDAP et le domaine de sécurité sont désactivés par défaut

    nexus_ldap_realm: false
    ldap_connections: []

Connexions LDAP, chaque élément ressemble à ceci :

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'My Company LDAP' # used as a key to update the ldap config
        ldap_protocol: 'ldaps' # ldap or ldaps
        ldap_hostname: 'ldap.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false # Wether or not to use certs in the nexus trust store
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_auth: 'none' # or simple
        ldap_auth_username: 'username' # if auth = simple
        ldap_auth_password: 'password' # if auth = simple
        ldap_user_base_dn: 'ou=users'
        ldap_user_filter: '(cn=*)' # (optional)
        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 l'authentification anonyme (liaison anonyme), il s'agit également d'une configuration "minimale" :

    nexus_ldap_realm: true
    ldap_connection:
      - ldap_name: 'Simplest LDAP config'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_user_object_class: 'inetOrgPerson'

Exemple de configuration LDAP pour une authentification simple (à l'aide d'un compte DSA) :

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP config with 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 }}" # better keep passwords in an ansible vault
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_user_base_dn: 'ou=users'
        ldap_user_object_class: 'inetOrgPerson'
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_user_subtree: false

Exemple de configuration LDAP pour une authentification simple (à l'aide d'un compte DSA) + groupes mappés en tant que rôles :

    nexus_ldap_realm: true
    ldap_connections
      - ldap_name: 'LDAP config with 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 }}" # better keep passwords in an ansible vault
        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

Exemple de configuration LDAP pour une authentification simple (à l'aide d'un compte DSA) + groupes mappés dynamiquement en tant que rôles :

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP config with 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 }}" # better keep passwords in an ansible vault
        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'

Privilèges

    nexus_privileges:
      - name: all-repos-read # used as key to update a privilege
        # type: <one of application, repository-admin, repository-content-selector, repository-view, script or wildcard>
        description: 'Read & Browse access to all repos'
        repository: '*'
        actions: # can be add, browse, create, delete, edit, read or  * (all)
          - read
          - browse
        # pattern: pattern
        # domain: domain
        # script_name: name

Liste privilèges pour les réglages. Consultez la documentation et l'interface graphique pour vérifier quelles variables doivent être définies en fonction du 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 (dans Nexus, cela signifie)

    nexus_roles:
      - id: Developpers # can map to a LDAP group id, also used as a key to update a role
        name: developers
        description: All developers
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # references to other role names

Liste les rôles pour les réglages.

Membres

    nexus_local_users: []
      # - username: jenkins # used as key to update
      #   state: present # default value if ommited, use 'absent' to remove user
      #   first_name: Jenkins
      #   last_name: CI
      #   email: [email protected]
      #   password: "s3cr3t"
      #   roles:
      #     - developers # role ID

Liste d'utilisateurs/comptes locaux (non LDAP) à créer dans Nexus.

Liste des utilisateurs/comptes locaux (non LDAP) à créer dans Nexus.

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

Cartographie LDAP des utilisateurs/rôles. État absent supprimera les rôles d'un utilisateur existant s'il en existe déjà un.
Les utilisateurs Ldap ne sont pas supprimés. Essayer de définir un rôle pour un utilisateur inexistant entraînera une erreur.

Sélecteurs de contenu

  nexus_content_selectors:
  - name: docker-login
    description: Selector for docker login privilege
    search_expression: format=="docker" and path=~"/v2/"

Pour plus d'informations sur le sélecteur de contenu, voir Documentation.

Pour utiliser le sélecteur de contenu, ajoutez un nouveau privilège avec type: repository-content-selector et pertinentcontentSelector

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Login to Docker registry'
  repository: '*'
  actions:
  - read
  - browse

Blobstores et référentiels

    nexus_delete_default_repos: false

Supprimez les référentiels de la configuration initiale par défaut de l'installation Nexus. Cette étape n'est exécutée que lors de la première installation (lorsque nexus_data_dir a été détecté vide).

Suppression des référentiels de la configuration par défaut pour Nexus. Cette étape n'est effectuée que lors de la première installation (lorsque nexus_data_dir vide).

    nexus_delete_default_blobstore: false

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

La suppression du stockage blob (artefacts binaires) est désactivée par défaut dans la configuration initiale. Pour supprimer le stockage blob (artefacts binaires), désactivez nexus_delete_default_repos: true. Cette étape n'est effectuée que lors de la première installation (lorsque nexus_data_dir vide).

    nexus_blobstores: []
    # example blobstore item :
    # - 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 référentiel ne peuvent pas être mis à jour après la création initiale (toute mise à jour ici sera ignorée lors du réapprovisionnement).

La configuration de blobstore sur S3 est fournie à titre de commodité 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.

Création Blobstores. Le chemin de stockage et le référentiel de stockage ne peuvent pas être mis à jour après la création initiale (toute mise à jour ici sera ignorée lors de la nouvelle installation).

La configuration du stockage blob sur S3 est fournie pour plus de commodité. Veuillez noter que le stockage 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
        # 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
    # example with a login/password :
    # - name: secret-remote-repo
    #   remote_url: 'https://company.com/repo/secure/private/go/away'
    #   remote_username: 'username'
    #   remote_password: 'secret'
    #   # maximum_component_age: -1
    #   # maximum_metadata_age: 1440
    #   # negative_cache_enabled: true
    #   # negative_cache_ttl: 1440

Ci-dessus est un exemple de configuration Serveur proxy Maven.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # one of "allow", "allow_once" or "deny"

Maven référentiels hébergés configuration. La configuration du cache négatif est facultative et prendra par défaut les valeurs ci-dessus si elle est omise.

Configuration référentiels hébergés Maven. La configuration du cache négatif (-1) est facultative et prendra par défaut les valeurs ci-dessus si elle n'est pas spécifiée.

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

Configuration groupes Maven.

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

    _nexus_repos_maven_defaults:
      blob_store: default # Note : cannot be updated once the repo has been created
      strict_content_validation: true
      version_policy: release # release, snapshot or mixed
      layout_policy: strict # strict or permissive
      write_policy: allow_once # one of "allow", "allow_once" or "deny"
      maximum_component_age: -1  # Nexus gui default. For proxies only
      maximum_metadata_age: 1440  # Nexus gui default. For proxies only
      negative_cache_enabled: true # Nexus gui default. For proxies only
      negative_cache_ttl: 1440 # Nexus gui default. For proxies only

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

Les référentiels Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS et yum sont désactivés par défaut :
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
      nexus_config_yum: false

Veuillez noter que vous devrez peut-être activer certaines étendues de sécurité si vous souhaitez utiliser d'autres types de référentiels autres que Maven. C'est faux par défaut

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # required for docker anonymous access

Le domaine des utilisateurs distants peut également être activé à l'aide de

nexus_rut_auth_realm: true

et le titre peut être personnalisé en définissant

nexus_rut_auth_header: "CUSTOM_HEADER"

Tâches planifiées

    nexus_scheduled_tasks: []
    #  #  Example task to compact blobstore :
    #  - name: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: [email protected]  # optional
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # all task attributes are stored as strings by nexus internally
    #  #  Example task to purge maven snapshots
    #  - name: Purge-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: [email protected]  # optional
    #    taskProperties:
    #      repositoryName: "*"  # * for all repos. Change to a repository name if you only want a specific one
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Example task to purge unused docker manifest and images
    #  - name: Purge unused docker manifests and images
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: [email protected]  # optional
    #    taskProperties:
    #      repositoryName: "*"  # * for all repos. Change to a repository name if you only want a specific one
    #  #  Example task to purge incomplete docker uploads
    #  - name: Purge incomplete docker uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: [email protected]  # optional
    #    taskProperties:
    #      age: "24"

Tâches planifiées pour les réglages. typeId et spécifique à une tâchetaskProperties/booleanTaskProperties vous pouvez deviner soit :

  • de la hiérarchie des types Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • vérifier le formulaire de création de tâche HTML dans votre navigateur
  • de visualiser les requêtes AJAX dans le navigateur lors de la configuration manuelle d'une tâche.

Les propriétés des tâches doivent être déclarées dans le bon bloc yaml en fonction de leur type:

  • taskProperties pour toutes les propriétés de chaîne (c'est-à-dire les noms de référentiel, les noms de référentiel, les périodes...).
  • booleanTaskProperties pour toutes les propriétés logiques (c'est-à-dire principalement les cases à cocher dans l'interface graphique de la tâche de création de lien).

Sauvegardes

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # See cron expressions definition in nexus create task gui
      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  # Keep 4 backup rotation by default (current + last 3)

La sauvegarde ne sera pas configurée jusqu'à ce que vous changiez nexus_backup_configure в true.
Dans ce cas, la tâche de script planifiée sera configurée pour s'exécuter sur Nexus
à l'intervalle spécifié dans nexus_backup_cron (par défaut 21h00 tous les jours).
Voir [modèle groovy pour cette tâche](templates/backup.groovy.j2) pour plus de détails.
Cette tâche planifiée est indépendante des autres nexus_scheduled_tasksque vous
annoncez-le dans votre playbook.

Si vous souhaitez effectuer une rotation/supprimer des sauvegardes, installez nexus_backup_rotate: true et configurez le nombre de sauvegardes que vous souhaitez enregistrer en utilisant 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 installer nexus_backup_rotate_first: true. Cela configurera la pré-rotation/suppression avant la sauvegarde. Par défaut, la rotation se produit après la création d'une sauvegarde. Veuillez noter que dans ce cas, les anciennes sauvegardes
sera supprimé avant que la sauvegarde actuelle ne soit effectuée.

Procédure de récupération

Exécuter le playbook avec le paramètre -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(par exemple, 2017-12-17-21-00-00 du 17 décembre 2017 à 21h00

Supprimer le lien

Attention : cela supprimera complètement vos données actuelles. Assurez-vous de faire une sauvegarde plus tôt si nécessaire

Utiliser une variable nexus_purgesi vous devez redémarrer à partir de zéro et réinstaller l'instance Nexus avec toutes les données supprimées.

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

Changer le mot de passe administrateur après la première installation

    nexus_default_admin_password: 'admin123'

Cela ne devrait pas être modifié dans votre playbook. Cette variable est renseignée avec le mot de passe administrateur Nexus par défaut lors de la première installation et garantit que nous pouvons modifier le mot de passe administrateur en nexus_admin_password.

Si vous souhaitez modifier le mot de passe administrateur après la première installation, vous pouvez le remplacer temporairement par l'ancien mot de passe à partir de la ligne de commande. Après changement nexus_admin_password dans votre playbook, vous pouvez exécuter :

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

Chaîne Telegram sur Nexus Sonatype : https://t.me/ru_nexus_sonatype

Seuls les utilisateurs enregistrés peuvent participer à l'enquête. se connecters'il te plait.

Quels référentiels d'artefacts utilisez-vous ?

  • Sonatype Nexus est gratuit

  • Sonatype Nexus payant

  • Artifactory est gratuit

  • Artefact payé

  • Port

  • Pâte à papier

9 utilisateurs ont voté. 3 utilisateurs se sont abstenus.

Source: habr.com

Ajouter un commentaire