Instalarea și configurarea Nexus Sonatype folosind abordarea infrastructure as code

Sonatype Nexus – o platformă integrată prin care dezvoltatorii pot proxy, stoca și gestiona dependențele Java (Maven), imaginile Docker, Python, Ruby, NPM, Bower, pachetele RPM, gitlfs, Apt, Go, Nuget și pot distribui software-ul lor.

De ce este necesar Sonatype Nexus?

  • Pentru stocarea artefactelor private;
  • Pentru caching-ul artefactelor care sunt descărcate de pe internet;

Artefacte susținute în livrarea de bază a Sonatype Nexus:

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

Artefacte susținute de comunitate:

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

Instalarea Sonatype Nexus folosind https://github.com/ansible-ThoTeam/nexus3-oss

Cerințe

  • Citiți despre utilizarea ansible pe internet.
  • Instalați ansible pip install ansible pe stația de lucru unde se execută playbook-ul.
  • Instalați geerlingguy.java pe stația de lucru unde se execută playbook-ul.
  • Instalați geerlingguy.apache pe stația de lucru unde se execută playbook-ul.
  • Această rolă a fost testată pe CentOS 7, Ubuntu Xenial (16.04) și Bionic (18.04), Debian Jessie și Stretch
  • jmespath biblioteca trebuie să fie instalată pe stația de lucru unde se execută playbook-ul. Pentru instalare, executați sudo pip install -r requirements.txt
  • Salvați fișierul playbook (exemplul de mai jos) în fișierul nexus.yml
  • Rulați instalarea nexus ansible-playbook -i host nexus.yml

Exemplu de ansible-playbook pentru instalarea nexus fără LDAP cu repozitorii Maven (java), Docker, Python, Ruby, NPM, Bower, RPM și 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: 'Acces și navigare la toate repozitoarele'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Deploiement pentru proiectul companiei'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # mapează la grupul LDAP
        name: developers
        description: Toți dezvoltatorii
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # folosit ca cheia de actualizare
        first_name: Jenkins
        last_name: CI
        email: support@company.com
        password: "s3cr3t"
        roles:
          - Developpers # ID-ul rolului aici
    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. Schimbați nexus_config_yum în true pentru a crea un repository yum
    nexus_config_yum: true
    nexus_repos_yum_hosted:
      - name: private_yum_centos_7
        repodata_depth: 1
    nexus_repos_yum_proxy:
      - name: epel_centos_7_x86_64
        remote_url: http://download.fedoraproject.org/pub/epel/7/x86_64
        maximum_component_age: -1
        maximum_metadata_age: -1
        negative_cache_ttl: 60
      - name: centos-7-os-x86_64
        remote_url: http://mirror.centos.org/centos/7/os/x86_64/
        maximum_component_age: -1
        maximum_metadata_age: -1
        negative_cache_ttl: 60
    nexus_repos_yum_group:
      - name: yum_all
        member_repos:
          - private_yum_centos_7
          - epel_centos_7_x86_64

    # NPM. Schimbați nexus_config_npm în true pentru a crea un repository npm
    nexus_config_npm: true
    nexus_repos_npm_hosted: []
    nexus_repos_npm_group:
      - name: npm-public
        member_repos:
          - npm-registry
    nexus_repos_npm_proxy:
      - name: npm-registry
        remote_url: https://registry.npmjs.org/
        negative_cache_enabled: false

    # Docker. Schimbați nexus_config_docker în true pentru a crea un repository docker
    nexus_config_docker: true
    nexus_repos_docker_hosted:
      - name: docker-hosted
        http_port: "{{ nexus_docker_hosted_port }}"
        v1_enabled: True
    nexus_repos_docker_proxy:
      - name: docker-proxy
        http_port: "{{ nexus_docker_proxy_port }}"
        v1_enabled: True
        index_type: "HUB"
        remote_url: "https://registry-1.docker.io"
        use_nexus_certificates_to_access_index: false
        maximum_component_age: 1440
        maximum_metadata_age: 1440
        negative_cache_enabled: true
        negative_cache_ttl: 1440
    nexus_repos_docker_group:
      - name: docker-group
        http_port: "{{ nexus_docker_group_port }}"
        v1_enabled: True
        member_repos:
          - docker-hosted
          - docker-proxy

    # Bower. Schimbați nexus_config_bower în true pentru a crea un repository bower
    nexus_config_bower: true
    nexus_repos_bower_hosted:
      - name: bower-hosted
    nexus_repos_bower_proxy:
      - name: bower-proxy
        index_type: "proxy"
        remote_url: "https://registry.bower.io"
        use_nexus_certificates_to_access_index: false
        maximum_component_age: 1440
        maximum_metadata_age: 1440
        negative_cache_enabled: true
        negative_cache_ttl: 1440
    nexus_repos_bower_group:
      - name: bower-group
        member_repos:
          - bower-hosted
          - bower-proxy

    # Pypi. Schimbați nexus_config_pypi în true pentru a crea un repository pypi
    nexus_config_pypi: true
    nexus_repos_pypi_hosted:
      - name: pypi-hosted
    nexus_repos_pypi_proxy:
      - name: pypi-proxy
        index_type: "proxy"
        remote_url: "https://pypi.org/"
        use_nexus_certificates_to_access_index: false
        maximum_component_age: 1440
        maximum_metadata_age: 1440
        negative_cache_enabled: true
        negative_cache_ttl: 1440
    nexus_repos_pypi_group:
      - name: pypi-group
        member_repos:
          - pypi-hosted
          - pypi-proxy

    # rubygems. Schimbați nexus_config_rubygems în true pentru a crea un repository rubygems
    nexus_config_rubygems: true
    nexus_repos_rubygems_hosted:
      - name: rubygems-hosted
    nexus_repos_rubygems_proxy:
      - name: rubygems-proxy
        index_type: "proxy"
        remote_url: "https://rubygems.org"
        use_nexus_certificates_to_access_index: false
        maximum_component_age: 1440
        maximum_metadata_age: 1440
        negative_cache_enabled: true
        negative_cache_ttl: 1440
    nexus_repos_rubygems_group:
      - name: rubygems-group
        member_repos:
          - rubygems-hosted
          - rubygems-proxy

    # gitlfs. Schimbați nexus_config_gitlfs în true pentru a crea un repository gitlfs
    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'] }

Capturi de ecran:

Instalarea și configurarea Nexus Sonatype folosind abordarea infrastructure as code

Instalarea și configurarea Nexus Sonatype folosind abordarea infrastructure as code

Variabilele rolurilor

Variabilele rolurilor

Variabile cu valori implicite (vezi default/main.yml):

Variabile generale

    nexus_version: ''
    nexus_timezone: 'UTC'

Implicit, rolul va instala cea mai recentă versiune disponibilă a Nexus. Puteți fixa versiunea modificând variabila nexus_version. Consultați versiunile disponibile la https://www.sonatype.com/download-oss-sonatype.

Dacă schimbați versiunea la una mai nouă, rolul va încerca să actualizeze Nexus-ul instalat.

Dacă utilizați o versiune mai veche de Nexus decât cea mai recentă, trebuie să vă asigurați că nu folosiți funcții care nu sunt disponibile în versiunea instalată (de exemplu, găzduirea repositoarelor yum este disponibilă pentru Nexus mai mare decât 3.8.0, git lfs repo pentru Nexus mai mare decât 3.3.0 etc.)

timezone nexus — este numele fusului orar Java, care poate fi util în combinație cu expresiile cron de mai jos pentru sarcinile programate nexus.

Portul Nexus și calea de context

    nexus_default_port: 8081
    nexus_default_context_path: ' / '

Portul și calea de context a conexiunii procesului Java. nexus_default_context_path trebuie să conțină o bară oblică atunci când este setat, de exemplu: nexus_default_context_path: '/nexus/'.

Utilizatorul și grupul OS Nexus

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Utilizatorul și grupul care sunt folosiți pentru a deține fișierele Nexus și a rula serviciul vor fi creați de rol, dacă nu există.

    nexus_os_user_home_dir: '/home/nexus'

Permiteți modificarea căii de bază pentru utilizatorul nexus

Directoarele instanțelor Nexus

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

Directoarele Nexus.

  • nexus_installation_dir conține fișiere executabile instalate
  • nexus_data_dir conține toate configurațiile, repositoarele și artefactele descărcate. Cărțile blob personalizate nexus_data_dir pot fi configurate, consultați mai jos nexus_blobstores.
  • nexus_tmp_dir conține toate fișierele temporare. Calea implicită pentru redhat a fost mutată din /tmp pentru a evita problemele potențiale cu procedurile automate de curățare. Consultați #168.

Configurarea utilizării memoriei Nexus JVM

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

Acestea sunt valorile implicite pentru Nexus. Vă rugăm să nu modificați aceste valori Dacă nu ați citit secțiunea cerințelor de memorie ale nexus și nu înțelegeți ce fac.

Ca al doilea avertisment, iată un extras din documentul menționat mai sus:

Nu se recomandă să creșteți memoria heap JVM dincolo de valorile recomandate în încercarea de a îmbunătăți performanța. Acest lucru poate avea, de fapt, efectul opus, provocând o muncă inutilă a sistemului de operare.

Parola administratorului

    nexus_admin_password: 'changeme'

Parola contului «admin» pentru configurare. Aceasta funcționează doar la prima instalare în mod implicit. Vă rugăm să consultați [Schimbați parola administratorului după prima instalare](# change-admin-password-after-first-install) dacă doriți să o modificați mai târziu cu ajutorul rolului.

Se recomandă cu tărie să nu vă păstrați parola în text clar în playbook, ci să folosiți [criptarea ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (fie încorporată, fie într-un fișier separat încărcat, de exemplu, cu include_vars)

Acces anonim implicit

    nexus_anonymous_access: false

Accesul anonim implicit este dezactivat. Mai multe informații despre accesul anonim.

Nume public al gazdelor

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Numele complet al domeniului și schema (https sau http) prin care instanța Nexus va fi accesibilă pentru clienții săi.

Acces API pentru acest rol

    nexus_api_hostname: localhost
    nexus_api_scheme: http
    nexus_api_validate_certs: "{{ nexus_api_scheme == 'https' }}"
    nexus_api_context_path: "{{ nexus_default_context_path }}"
    nexus_api_port: "{{ nexus_default_port }}"

Aceste variabile controlează modul în care rolul se conectează la API-ul Nexus pentru a oferi.
Numai pentru utilizatori avansați. Cel mai probabil, nu doriți să modificați aceste setări implicite

Configurarea unui proxy invers

    httpd_setup_enable: false
    httpd_server_name: "{{ nexus_public_hostname }}"
    httpd_default_admin_email: "admin@example.com"
    httpd_ssl_certificate_file: 'files/nexus.vm.crt'
    httpd_ssl_certificate_key_file: 'files/nexus.vm.key'
    # httpd_ssl_certificate_chain_file: "{{ httpd_ssl_certificate_file }}"
    httpd_copy_ssl_files: true

Instalați Proxy invers SSL.
Pentru aceasta, trebuie să instalați httpd. Notă: când pentru httpd_setup_enable este setat latrue, nexus se leagă de 127.0.0.1:8081, astfel nu fiind accesibil direct prin portul HTTP 8081 de pe un IP extern.

Numele gazdei utilizat implicit este nexus_public_hostname. Dacă aveți nevoie de nume diferite dintr-un anumit motiv, puteți seta httpd_server_name cu o altă valoare.

Cu httpd_copy_ssl_files: true (în mod implicit) certificatul menționat mai sus ar trebui să existe în directorul dvs. playbook și va fi copiat pe server și configurat în apache.

Dacă doriți să utilizați certificatele existente pe server, setați httpd_copy_ssl_files: false și furnizați următoarele variabile:

    # 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 este opțional și ar trebui lăsat neconfigurat, dacă nu doriți să configurați fișierul de lanț

    httpd_default_admin_email: "admin@example.com"

Setați adresa de email a administratorului implicit

Configurare LDAP

Conexiunile LDAP și domeniul de securitate implicit sunt dezactivate

    nexus_ldap_realm: false
    ldap_connections: []

Conexiuni LDAP, fiecare element arată astfel:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'My Company LDAP' # folosit ca o cheie pentru a actualiza config-ul ldap
        ldap_protocol: 'ldaps' # ldap sau ldaps
        ldap_hostname: 'ldap.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false # Dacă se folosesc sau nu certificate în magazinul de încredere nexus
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_auth: 'none' # sau simplu
        ldap_auth_username: 'username' # dacă auth = simplu
        ldap_auth_password: 'password' # dacă auth = simplu
        ldap_user_base_dn: 'ou=users'
        ldap_user_filter: '(cn=*)' # (opțional)
        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

Exemplu de configurare LDAP pentru autentificare anonimă (legare anonimă), aceasta este de asemenea o configurare „minimă”:

    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'

Exemplu de configurare LDAP pentru autentificare simplă (utilizând un cont 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 }}" # mai bine păstrați parolele într-un vault ansible
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_user_base_dn: 'ou=users'
        ldap_user_object_class: 'inetOrgPerson'
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_user_subtree: false

Exemplu de configurare LDAP pentru autentificare simplă (utilizând un cont DSA) + grupuri asociate ca roluri:

    nexus_ldap_realm: true
    ldap_connections
      - ldap_name: 'Configurare LDAP cu 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 }}" # mai bine păstrați parolele într-un vault ansible
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_user_base_dn: 'ou=users'
        ldap_user_object_class: 'inetOrgPerson'
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_map_groups_as_roles: true
        ldap_group_base_dn: 'ou=groups'
        ldap_group_object_class: 'groupOfNames'
        ldap_group_id_attribute: 'cn'
        ldap_group_member_attribute: 'member'
        ldap_group_member_format: 'uid=${username},ou=users,dc=mycompany,dc=net'
        ldap_group_subtree: false

Exemplu de configurare LDAP pentru autentificare simplă (folosind un cont DSA) + grupuri, mapate dinamic ca roluri:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Configurare LDAP cu 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 }}" # mai bine păstrați parolele într-un vault ansible
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_user_base_dn: 'ou=users'
        ldap_user_object_class: 'inetOrgPerson'
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_map_groups_as_roles: true
        ldap_map_groups_as_roles_type: 'dynamic'
        ldap_user_memberof_attribute: 'memberOf'

Permisiuni

    nexus_privileges:
      - name: all-repos-read # folosit ca cheie pentru a actualiza o permisiune
        # type: <unu dintre application, repository-admin, repository-content-selector, repository-view, script sau wildcard>
        description: 'Acces de citire & navigare la toate repo-urile'
        repository: '*'
        actions: # pot fi add, browse, create, delete, edit, read sau * (toate)
          - read
          - browse
        # pattern: pattern
        # domain: domain
        # script_name: name

Lista de privilegii pentru configurare. Consultați documentația și interfața grafică pentru a verifica ce variabile trebuie setate în funcție de tipul de permisiune.

Aceste elemente se combină cu următoarele valori implicite:

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

Roluri (în cadrul Nexus se vorbește despre)

    nexus_roles:
      - id: Developpers # poate fi mapat la un id de grup LDAP, folosit de asemenea ca cheie pentru a actualiza un rol
        name: developers
        description: Toți dezvoltatorii
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # referințe la alte nume de rol

Lista roluri pentru configurare.

Utilizatori

    nexus_local_users: []
      # - username: jenkins # folosit ca cheie pentru a actualiza
      #   state: present # valoare implicită dacă este omis, folosiți 'absent' pentru a elimina utilizatorul
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - developers # id-ul rolului

Lista utilizatorilor/conturilor locale (non-LDAP) care trebuie create în nexus.

Lista utilizatorilor/conturilor locale (non-LDAP) care trebuie create în Nexus.

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

Mapping-ul utilizatorilor/rolurilor LDAP. Stare inexistent va elimina rolurile dintr-un utilizator existent, dacă acesta există deja.
Utilizatorii LDAP nu sunt șterși. O încercare de a stabili un rol pentru un utilizator inexistent va genera o eroare.

Selectorii de conținut

  nexus_content_selectors:
  - name: docker-login
    description: Selector pentru privilegiul de autentificare Docker
    search_expression: format=="docker" and path=~"/v2/"

Pentru mai multe informații despre selectorul de conținut, consultați Documentația.

Pentru a utiliza selectorul de conținut, adăugați un nou privilegiu cu type: repository-content-selector și corespunzătorcontentSelector

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Autentificare în registrul Docker'
  repository: '*'
  actions:
  - read
  - browse

Blobstores și repozitorii

    nexus_delete_default_repos: false

Ștergeți repozitoriile din configurația inițială de instalare Nexus. Acest pas se execută doar la instalarea pentru prima dată (când nexus_data_dir a fost detectat ca fiind gol).

Ștergerea repozitoriilor din configurația inițială implicită pentru Nexus. Acest pas se execută doar la prima instalare (când nexus_data_dir este gol).

    nexus_delete_default_blobstore: false

Ștergeți blobstore-ul implicit din configurația inițială de instalare Nexus. Acest lucru poate fi realizat doar dacă nexus_delete_default_repos: true și toate repozitoriile configurate (vezi mai jos) au un blob_store: custom. Acest pas se execută doar la instalarea pentru prima dată (când nexus_data_dir a fost detectat ca fiind gol).

Ștergerea blobstore-ului (artefactelor binare) este dezactivată implicit în configurația inițială. Pentru a șterge blobstore-ul (artefactelor binare), dezactivați nexus_delete_default_repos: true. Acest pas se execută doar la prima instalare (când nexus_data_dir este gol).

    nexus_blobstores: []
    # exemplu de element 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 de creat. Un path de blobstore și un blobstore de repozitoriu nu pot fi actualizate după crearea inițială (orice actualizare aici va fi ignorată la reprovisionare).

Configurarea blobstore-ului pe S3 este oferită ca o comoditate și nu face parte din testele automate pe care le rulăm pe travis. Vă rugăm să rețineți că stocarea pe S3 este recomandată doar pentru instanțele desfășurate pe AWS.

Creare Blobstores. Calea către blobstore și repozitoriu nu pot fi actualizate după crearea inițială (orice actualizare aici va fi ignorată la reprovisionare).

Configurarea blobstore-ului BLOB pe S3 este oferită pentru comoditate. Vă rugăm să rețineți că stocarea pe S3 este recomandată doar pentru instanțele desfășurate pe 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

Mai sus este un exemplu de configurație proxy server Maven.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # unul dintre "allow", "allow_once" sau "deny"

Maven repoziții găzduite configurație. Configurarea cache-ului negativ este opțională și va folosi valorile de mai sus dacă este omisă.

Configurație repoziții găzduite Maven. Configurarea cache-ului negativ (-1) este opțională și va folosi valorile specificate anterior, dacă nu este specificată.

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

Configurație grupuri Maven.

Toate cele trei tipuri de repoziție se combină cu următoarele valori implicite:

    _nexus_repos_maven_defaults:
      blob_store: default # Notă: nu poate fi actualizat odată ce repoziția a fost creată
      strict_content_validation: true
      version_policy: release # release, snapshot sau mixed
      layout_policy: strict # strict sau permissive
      write_policy: allow_once # unul dintre "allow", "allow_once" sau "deny"
      maximum_component_age: -1  # implicit Nexus gui. Numai pentru proxi
      maximum_metadata_age: 1440  # implicit Nexus gui. Numai pentru proxi
      negative_cache_enabled: true # implicit Nexus gui. Numai pentru proxi
      negative_cache_ttl: 1440 # implicit Nexus gui. Numai pentru proxi

Tipuri de repoziții Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS și yum:
vedeți defaults/main.yml pentru aceste opțiuni:

Repozițiile Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS și yum sunt dezactivate în mod implicit:
Vedeți defaults/main.yml pentru aceste opțiuni:

      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

Vă rugăm să rețineți că ar putea fi necesar să activați anumite domenii de securitate dacă doriți să utilizați alte tipuri de repoziții în afară de maven. Acesta este implicit false

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # necesar pentru accesul anonim la docker

Realm-ul utilizatorului la distanță poate fi activat și prin

nexus_rut_auth_realm: true

și antetul poate fi configurat prin definirea

nexus_rut_auth_header: "CUSTOM_HEADER"

Sarcini programate

    nexus_scheduled_tasks: []
    #  #  Exemplu de sarcină pentru compactarea blobstore-ului:
    #  - name: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: alerts@example.org  # opțional
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # toate atributele sarcinii sunt stocate ca șiruri de caractere de nexus intern
    #  #  Exemplu de sarcină pentru curățarea snapshot-urilor maven
    #  - name: Purge-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: alerts@example.org  # opțional
    #    taskProperties:
    #      repositoryName: "*"  # * pentru toate repozitoarele. Schimbați-l cu un nume de repozitor dacă doriți doar unul specific
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Exemplu de sarcină pentru curățarea manifest-urilor și imaginilor docker neutilizate
    #  - name: Purge unused docker manifests and images
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: alerts@example.org  # opțional
    #    taskProperties:
    #      repositoryName: "*"  # * pentru toate repozitoarele. Schimbați-l cu un nume de repozitor dacă doriți doar unul specific
    #  #  Exemplu de sarcină pentru curățarea încărcărilor incomplete docker
    #  - name: Purge incomplete docker uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: alerts@example.org  # opțional
    #    taskProperties:
    #      age: "24"

Sarcini programate pentru configurare. typeId și specifice sarciniitaskProperties/booleanTaskProperties se poate ghici fie:

  • din ierarhia tipurilor Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • verificând formularul HTML de creare a sarcinii în browserul dumneavoastră
  • din vizualizarea cererilor AJAX în browser în timpul configurării manuale a sarcinii.

Proprietățile sarcinii trebuie să fie declarate în blocul yaml corect în funcție de tipul lor:

  • taskProperties pentru toate proprietățile de tip șir (de exemplu, numele repozitoarelor, numele blobstore-urilor, perioade de timp…).
  • booleanTaskProperties pentru toate proprietățile logice (de exemplu, în principal casetele de selectare din interfața grafică a sarcinii de creare a nexus-ului).

Backup-uri

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Consultați definiția expresiilor cron în interfața de creare a sarcinilor nexus
      nexus_backup_dir: '\/var\/nexus-backup'
      nexus_restore_log: '{{ nexus_backup_dir }}\/nexus-restore.log'
      nexus_backup_rotate: false
      nexus_backup_rotate_first: false
      nexus_backup_keep_rotations: 4  # Păstrați 4 rotații de backup în mod prestabilit (curent + ultimele 3)

Backup-ul nu va fi configurat până nu îl activați nexus_backup_configure în true.
În acest caz, sarcina programată a scriptului va fi configurată pentru a rula în Nexus
la intervalul specificat în nexus_backup_cron (implicit 21:00 în fiecare zi).
Consultați [Șablonul groovy pentru această sarcină](templates / backup.groovy.j2) pentru mai multe informații.
Această sarcină programată nu depinde de altele nexus_scheduled_tasks, pe care le-ați
declara în playbook-ul dumneavoastră.

Dacă doriți să rotiți/ștergeți backup-urile, setați nexus_backup_rotate: true și configurați numărul de backup-uri pe care doriți să le păstrați folosind nexus_backup_keep_rotations (implicit 4).

Când folosiți rotația, dacă doriți să economisiți spațiu suplimentar pe disc în timpul procesului de backup,
Puteți seta nexus_backup_rotate_first: true. Aceasta va configura rotația preliminară/ștergerea înainte de backup. Implicit, rotația are loc după ce a fost creat backup-ul. Rețineți că, în acest caz, backup-urile vechi
vor fi șterse înainte ca backup-ul curent să fie realizat.

Procedura de recuperare

Rulați playbook-ul cu parametrul -e nexus_restore_point=
(de exemplu, 2017-12-17-21-00-00 pentru 17 decembrie 2017 la 21:00

Ștergerea nexus

Atenție: aceasta va șterge complet datele curente. Asigurați-vă că ați făcut un backup înainte, dacă este necesar

Folosiți variabila nexus_purge, dacă trebuie să reporniți de la zero și să reinstalați instanța nexus cu ștergerea tuturor datelor.

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

Schimbați parola administratorului după prima instalare

    nexus_default_admin_password: 'admin123'

Aceasta nu ar trebui să fie modificată în playbook-ul dumneavoastră. Această variabilă este populată cu parola standard de administrator Nexus la prima instalare și asigură că putem schimba parola administratorului la nexus_admin_password.

Dacă doriți să schimbați parola administratorului după prima instalare, puteți să o modificați temporar la parola veche din linia de comandă. După modificare nexus_admin_password în playbook-ul dumneavoastră puteți rula:

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

Canal Telegram pentru Nexus Sonatype: https://t.me/ru_nexus_sonatype

Numai utilizatorii înregistrați pot participa la sondaj. Conectați-vă, vă rugăm.

Ce stocuri de artefacte utilizați?

  • Sonatype Nexus gratuit

  • Sonatype Nexus plătit

  • Artifactory gratuit

  • Artifactory plătit

  • Harbor

  • Pulp

Au votat 9 utilizatori. 3 utilizatori s-au abținut.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster