Instalarea și configurarea Nexus Sonatype folosind infrastructura ca abordare de cod

Sonatype Nexus este o platformă integrată prin care dezvoltatorii pot să proxy, să stocheze și să gestioneze dependențele Java (Maven), Docker, Python, Ruby, NPM, imagini Bower, pachete RPM, gitlfs, Apt, Go, Nuget și să-și distribuie securitatea software.

De ce aveți nevoie de Sonatype Nexus?

  • Pentru depozitarea artefactelor private;
  • Pentru stocarea în cache a artefactelor care sunt descărcate de pe Internet;

Artefacte acceptate în pachetul de bază Sonatype Nexus:

  • Java, Maven (borcan)
  • Docher
  • Python (pip)
  • rubin (bijuterie)
  • NPM
  • umbrar
  • Yum (rpm)
  • gitlfs
  • Crud
  • Apt (deb)
  • Go
  • Pepită

Artefacte sprijinite de comunitate:

  • Compozitor
  • Conan
  • CPAN
  • ELPA
  • Cârmă
  • 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 rulează playbook-ul.
  • Set geerlingguy.java pe stația de lucru unde rulează playbook-ul.
  • Set geerlingguy.apache pe stația de lucru unde rulează playbook-ul.
  • Acest rol a fost testat pe CentOS 7, Ubuntu Xenial (16.04) și Bionic (18.04), Debian Jessie și Stretch
  • jmespath Biblioteca trebuie instalată pe stația de lucru pe care rulează playbook-ul. A instala: 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 Maven (java), Docker, Python, Ruby, NPM, Bower, RPM și depozitele 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'] }

Imagini:

Instalarea și configurarea Nexus Sonatype folosind infrastructura ca abordare de cod

Instalarea și configurarea Nexus Sonatype folosind infrastructura ca abordare de cod

Roluri variabile

Variabile de rol

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

Variabile generale

    nexus_version: ''
    nexus_timezone: 'UTC'

În mod implicit, rolul va instala cea mai recentă versiune disponibilă de Nexus. Puteți remedia versiunea schimbând variabila nexus_version. Vezi versiunile disponibile la https://www.sonatype.com/download-oss-sonatype.

Dacă treceți la o versiune mai nouă, rolul va încerca să vă actualizeze instalarea Nexus.

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

nexus timezone este numele fusului orar Java, care poate fi util în combinație cu următoarele expresii cron pentru sarcinile nexus_scheduled.

Portul Nexus și calea contextului

    nexus_default_port: 8081
    nexus_default_context_path: '/'

Portul și calea contextului procesului de conectare Java. nexus_default_context_path trebuie să conțină o bară oblică înainte când este setat, de exemplu: nexus_default_context_path: '/nexus/'.

Utilizator și grup Nexus OS

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Utilizatorul și grupul folosit pentru a deține fișiere Nexus și a rula serviciul vor fi create de rol dacă lipsește unul.

    nexus_os_user_home_dir: '/home/nexus'

Permite modificarea directorului de pornire implicit 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') }}"

Cataloagele Nexus.

  • nexus_installation_dir conține fișiere executabile instalate
  • nexus_data_dir conține toate configurațiile, depozitele și artefactele descărcate. Căi personalizate pentru depozitul de blobs nexus_data_dir poate fi personalizat, vezi mai jos nexus_blobstores.
  • nexus_tmp_dir conține toate fișierele temporare. Calea implicită pentru redhat a fost mutată din /tmp pentru a depăși potențialele probleme cu procedurile automate de curățare. Vezi #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 setările implicite pentru Nexus. Vă rugăm să nu modificați aceste valori Daca nu ai citit secțiunea de memorie cu cerințele de sistem nexus și nu înțeleg ce fac.

Ca un al doilea avertisment, iată un extras din documentul de mai sus:

Nu este recomandat 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, rezultând în muncă inutilă pentru sistemul de operare.

Parola de administrator

    nexus_admin_password: 'changeme'

Parola contului „admin” pentru configurare. Acest lucru funcționează numai la prima instalare implicită. Consultați [Schimbarea parolei de administrator după prima instalare](# change-admin-password-after-first-install) dacă doriți să o schimbați ulterior folosind un rol.

Se recomandă insistent să nu stocați parola în text clar în manualul de joc, ci să utilizați [ansible-vault encryption] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (fie inline sau într-un fișier separat încărcat cu, de exemplu, include_vars)

Acces anonim în mod implicit

    nexus_anonymous_access: false

Accesul anonim este dezactivat implicit. Citiți mai multe despre acces anonim.

Nume de gazdă public

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Numele de domeniu complet calificat și schema (https sau http) sub care instanța Nexus va fi disponibilă clienților 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 aprovizionare.
Numai pentru utilizatori avansați. Probabil că 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: "[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

Set Proxy invers SSL.
Pentru a face acest lucru, trebuie să instalați httpd. Notă: când pentru httpd_setup_enable valoarea stabilitătrue, contacte nexus 127.0.0.1:8081, astfel nu fiind direct accesibil prin portul HTTP 8081 de la adresa IP externă.

Numele de gazdă implicit folosit este nexus_public_hostname. Dacă aveți nevoie de nume diferite dintr-un anumit motiv, puteți seta httpd_server_name cu alt sens.

С httpd_copy_ssl_files: true (implicit) certificatele de mai sus ar trebui să existe în directorul tău playbook și vor fi copiate pe server și configurate în apache.

Dacă doriți să utilizați certificate existente pe server, instalaț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 nesetat dacă nu doriți să personalizați fișierul în lanț

    httpd_default_admin_email: "[email protected]"

Setați adresa de e-mail implicită a administratorului

Configurare LDAP

Conexiunile LDAP și domeniul de securitate sunt dezactivate implicit

    nexus_ldap_realm: false
    ldap_connections: []

conexiuni LDAP, fiecare element arată astfel:

    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

Exemplu de configurare LDAP pentru autentificare anonimă (legare anonimă), aceasta este și o configurație „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ă (folosind contul 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

Exemplu de configurare LDAP pentru autentificare simplă (folosind contul DSA) + grupuri mapate ca roluri:

    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

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

    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'

Privilegiu

    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

listă privilegii pentru setari. Consultați documentația și GUI pentru a verifica ce variabile trebuie setate în funcție de tipul de privilegiu.

Aceste elemente sunt combinate cu următoarele valori implicite:

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

Roluri (în interiorul Nexus, aceasta înseamnă)

    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

listă roluri pentru setari.

utilizatori

    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

Lista de utilizatori/conturi locale (non-LDAP) de creat în nexus.

Lista de utilizatori/conturi locali (non-LDAP) de creat în Nexus.

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

Maparea Ldap a utilizatorilor/rolurilor. Stat absent va elimina roluri de la un utilizator existent, dacă unul există deja.
Utilizatorii Ldap nu sunt șterși. Încercarea de a seta un rol pentru un utilizator inexistent va avea ca rezultat o eroare.

Selectori de conținut

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

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

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

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

Blobstores și depozite

    nexus_delete_default_repos: false

Ștergeți arhivele din configurația implicită inițială a instalării nexus. Acest pas este executat numai la prima instalare (când nexus_data_dir a fost detectat gol).

Eliminarea depozitelor din configurația implicită implicită pentru Nexus. Acest pas este efectuat numai în timpul primei instalări (când nexus_data_dir gol).

    nexus_delete_default_blobstore: false

Ștergeți blobstore-ul implicit din configurația implicită inițială de instalare nexus. Acest lucru se poate face numai dacă nexus_delete_default_repos: true și toate depozitele configurate (vezi mai jos) au un explicit blob_store: custom. Acest pas este executat numai la prima instalare (când nexus_data_dir a fost detectat gol).

Eliminarea stocării blob (artefacte binare) este dezactivată implicit din configurația inițială. Pentru a elimina stocarea blob (artefacte binare), dezactivați nexus_delete_default_repos: true. Acest pas este efectuat numai în timpul primei instalări (când nexus_data_dir gol).

    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 a crea. O cale de blobstore și un depozit de blobstore nu pot fi actualizate după crearea inițială (orice actualizare aici va fi ignorată la reprovizionare).

Configurarea blobstore pe S3 este oferită ca o comoditate și nu face parte din testele automate pe care le rulăm pe travis. Rețineți că stocarea pe S3 este recomandată numai pentru instanțe implementate pe AWS.

Creare Blobstores. Calea de stocare și depozitul de stocare nu pot fi actualizate după crearea inițială (orice actualizare de aici va fi ignorată atunci când este instalată din nou).

Configurarea stocării blob pe S3 este oferită ca o comoditate. Rețineți că stocarea S3 este recomandată numai pentru instanțe implementate 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 server proxy Maven.

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

Maven depozite găzduite configurație. Configurația cache negativă este opțională și va fi implicit la valorile de mai sus dacă este omisă.

configurație depozite găzduite Maven. Configurația cache negativă (-1) este opțională și va fi implicit la valorile de mai sus dacă nu este specificată.

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

configurație grupuri Maven.

Toate cele trei tipuri de depozite sunt combinate cu următoarele valori implicite:

    _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

Tipuri de depozite Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS și yum:
vedea defaults/main.yml pentru aceste optiuni:

Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS și yum sunt dezactivate implicit:
vedea defaults/main.yml pentru aceste optiuni:

      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

Rețineți că poate fi necesar să activați anumite domenii de securitate dacă doriți să utilizați alte tipuri de depozite, altele decât Maven. Acest lucru este fals în mod implicit

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

Remote User Realm poate fi, de asemenea, activat folosind

nexus_rut_auth_realm: true

iar titlul poate fi personalizat prin definire

nexus_rut_auth_header: "CUSTOM_HEADER"

Sarcini programate

    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"

Sarcini programate pentru setari. typeId și specifică sarciniitaskProperties/booleanTaskProperties poți ghici fie:

  • din ierarhia de tip Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • verificarea formularului HTML de creare a sarcinilor din browser
  • de la vizualizarea solicitărilor AJAX în browser atunci când configurați manual o sarcină.

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

  • taskProperties pentru toate proprietățile șirului de caractere (adică nume de depozit, nume de depozit, perioade de timp...).
  • booleanTaskProperties pentru toate proprietățile logice (adică, în principal, casete de selectare din interfața grafică a sarcinii de creare a conexiunii).

Backup-uri

      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)

Backup-ul nu va fi configurat până când nu comutați nexus_backup_configure в true.
În acest caz, sarcina de script programată va fi configurată să ruleze pe Nexus
la intervalul specificat în nexus_backup_cron (implicit 21:00 în fiecare zi).
Consultați [șablon groovy pentru această sarcină](templates/backup.groovy.j2) pentru detalii.
Această sarcină programată este independentă de celelalte nexus_scheduled_taskscare tu
anunță în manualul tău de joc.

Dacă doriți să rotiți/ștergeți copiile de rezervă, instalați nexus_backup_rotate: true și configurați numărul de copii de siguranță pe care doriți să le salvați folosind nexus_backup_keep_rotations (implicit 4).

Când utilizați rotația, dacă doriți să economisiți spațiu suplimentar pe disc în timpul procesului de backup,
Puteți instala nexus_backup_rotate_first: true. Aceasta va configura prerotația/ștergerea înainte de backup. În mod implicit, rotația are loc după ce este creată o copie de rezervă. Vă rugăm să rețineți că în acest caz vechile copii de rezervă
va fi ștearsă înainte ca backupul curent să fie făcut.

Procedura de recuperare

Rulați playbook cu parametru -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(de exemplu, 2017-12-17-21-00-00 pentru 17 decembrie 2017 la ora 21:00

Îndepărtarea legăturii

Avertisment: Acest lucru va șterge complet datele dvs. actuale. Asigurați-vă că faceți o copie de rezervă mai devreme, dacă este necesar

Utilizați o variabilă nexus_purgedacă trebuie să reporniți de la zero și să reinstalați instanța nexus cu toate datele eliminate.

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

Schimbați parola de administrator după prima instalare

    nexus_default_admin_password: 'admin123'

Acest lucru nu trebuie schimbat în manualul dvs. de joc. Această variabilă este completată cu parola implicită de administrator Nexus la prima instalare și ne asigură că putem schimba parola de administrator în nexus_admin_password.

Dacă doriți să schimbați parola de administrator după prima instalare, o puteți schimba temporar la vechea parolă din linia de comandă. După schimbare nexus_admin_password în manualul tău de joc poți rula:

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

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

Numai utilizatorii înregistrați pot participa la sondaj. Loghează-te, Vă rog.

Ce depozite de artefacte folosiți?

  • Sonatype Nexus este gratuit

  • Sonatype Nexus plătit

  • Artifactory este gratuit

  • Artifactory plătit

  • Port

  • Pulpă

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

Sursa: www.habr.com

Adauga un comentariu