Namestitev in konfiguracija Nexus Sonatype z uporabo pristopa infrastructure as code

Sonatype Nexus je integrirana platforma, ki omogoča razvijalcem, da proksirajo, shranjujejo in upravljajo odvisnosti Java (Maven), slike Docker, Python, Ruby, NPM, Bower, RPM pakete, gitlfs, Apt, Go, Nuget ter distribuirajo svojo programsko opremo.

Zakaj potrebujemo Sonatype Nexus?

  • Za shranjevanje privatnih artefaktov;
  • Za predpomnjenje artefaktov, ki se prenašajo iz interneta;

Artefakti, podprti v osnovni različici Sonatype Nexus:

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

Artefakti, podprti s strani skupnosti:

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

Namestitev Sonatype Nexus z uporabo https://github.com/ansible-ThoTeam/nexus3-oss

Zahteve

  • Preberite o uporabi ansible na internetu.
  • Namestite ansible pip install ansible na delovni postaji, kjer se izvaja playbook.
  • Namestite geerlingguy.java na delovni postaji, kjer se izvaja playbook.
  • Namestite geerlingguy.apache na delovni postaji, kjer se izvaja playbook.
  • Ta vloga je bila testirana na CentOS 7, Ubuntu Xenial (16.04) in Bionic (18.04), Debian Jessie in Stretch
  • jmespath knjiznica mora biti nameščena na delovni postaji, kjer se izvaja playbook. Za namestitev izvedite sudo pip install -r requirements.txt
  • Shrani datoteko playbook (primer spodaj) v datoteko nexus.yml
  • Zaženi namestitev nexus ansible-playbook -i host nexus.yml

Primer ansible-playbook za namestitev nexus brez LDAP z Maven (java), Docker, Python, Ruby, NPM, Bower, RPM in 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: 'Dostop za branje in brskanje po vseh repozitorijih'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Namestitve za company-project'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # maps to the LDAP group
        name: developers
        description: Vsi razvijalci
        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: support@company.com
        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'] }

Zaslonske slike:

Namestitev in konfiguracija Nexus Sonatype z uporabo pristopa infrastructure as code

Namestitev in konfiguracija Nexus Sonatype z uporabo pristopa infrastructure as code

Spremenljive vloge

Spremenljive vloge

Spremenljive z privzetimi vrednostmi (glej default/main.yml):

Splošne spremenljive

    nexus_version: ''
    nexus_timezone: 'UTC'

Privzeta vloga bo namestila zadnjo razpoložljivo različico Nexus. Različico lahko popravite tako, da spremenite spremenljivko nexus_version. Oglejte si razpoložljive različice na https://www.sonatype.com/download-oss-sonatype.

Če spremnite različico na novejšo, bo vloga poskusila nadgraditi vaš nameščen Nexus.

Če uporabljate starejšo različico Nexus od najnovejše, se morate prepričati, da ne uporabljate funkcij, ki niso na voljo v nameščenem izdanju (na primer, gostovanje yum repozitorijev je na voljo za Nexus več kot 3.8.0, git lfs repo za Nexus več kot 3.3.0 itd.)

nexus timezone je ime časovnega pasu Java, ki je lahko koristno v kombinaciji s spodaj navedenimi cron izrazi za nexus_scheduled tasks.

Nexus vrata in kontekstna pot

    nexus_default_port: 8081
    nexus_default_context_path: ' / '

Vrata in kontekstna pot za proces Java povezave. nexus_default_context_path mora vsebovati poševno črto, ko je nastavljena, na primer: nexus_default_context_path: ' /nexus/ '.

Uporabnik in skupina OS Nexus

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Uporabnik in skupina, ki se uporabljata za lastništvo datotek Nexus in zagon storitve, bosta ustvarjena z vlogo, če ju ni.

    nexus_os_user_home_dir: ' /home/nexus'

Dovoli spreminjanje privzetega domačega imenika za uporabnika nexus

Imeniki primerkov Nexus

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

Imeniki Nexus.

  • nexus_installation_dir vsebuje nameščene izvršljive datoteke
  • nexus_data_dir vsebuje vse nastavitve, repozitorije in prenesene artefakte. Prilagojene poti blobstores nexus_data_dir se lahko nastavi, glej spodaj nexus_blobstores.
  • nexus_tmp_dir vsebuje vse začasne datoteke. Privzeta pot za redhat je bila premaknjena iz /tmp da bi se izognili morebitnim težavam z avtomatskimi postopki čiščenja. Glej #168.

Nastavitev uporabe pomnilnika Nexus JVM

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

To so privzete nastavitve za Nexus. Prosim, ne spreminjajte teh vrednosti Če niste prebrali razdelka o pomnilniških sistemskih zahtevah nexus in ne razumete, kaj počnejo.

Kot drugo opozorilo, tukaj je odlomek iz zgoraj omenjenega dokumenta:

Ni priporočamo povečevanja pomnilnika JVM heap nad priporočene vrednosti v pokušaju izboljšave zmogljivosti. To lahko v resnici vodi do nasprotnega učinka, zaradi česar pride do nepotrebnega dela operacijskega sistema.

Administratorska koda

    nexus_admin_password: 'changeme'

Koda za račun 'admin' za nastavitev. To deluje le pri prvi namestitvi privzeto. Prosim, glejte [Spremeni kodo administratorja po prvi namestitvi](# change-admin-password-after-first-install), če jo želite spremeniti kasneje z vlogo.

Močno ne priporočamo shranjevanja svoje kode v nešifriranem besedilu v playbooku, ampak uporabite [šifriranje ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (bodisi vgrajeno ali v ločeno datoteko, naloženo na primer s pomočjo include_vars)

Anonimni dostop je privzeto

    nexus_anonymous_access: false

Privzeti anonimni dostop je izključen. Več o anonimnem dostopu.

Javno ime gostitelja

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Polno domensko ime in shema (https ali http), po kateri bo primer Nexus dostopen za njegove stranke.

Dostop API za to vlogo

    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 }}"

Te spremenljivke nadzorujejo, kako se vloga poveže z API Nexus za zagotavljanje.
Samo za napredne uporabnike. Verjetno ne želite spreminjati teh privzetih nastavitev.

Nastavitev povratnega proxyja

    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

Namestite Povratni proxy SSL.
Za to je treba namestiti httpd. Opomba: ko je za httpd_setup_enable določenotrue, nexus poveže z 127.0.0.1:8081, s čimer ne je neposredno dostopen preko HTTP-pota 8081 z zunanjim IP-naslovom.

Privzeto uporabljeno ime gostitelja je nexus_public_hostname. Če potrebujete različna imena iz kakršnega koli razloga, lahko nastavite httpd_server_name na drugačno vrednost.

Z httpd_copy_ssl_files: true (privzeto) zgoraj omenjeni certifikati morajo obstajati v vaši playbook direktoriji in bodo kopirani na strežnik ter nastavljeni v apache.

Če želite uporabiti obstoječe certifikate na strežniku, nastavite httpd_copy_ssl_files: false in in dajte naslednje spremenljivke:

    # 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 je neobvezen in ga je treba pustiti ne nastavljene, če ne želite konfigurirati datoteke verige

    httpd_default_admin_email: "admin@example.com"

Nastavite privzeti e-poštni naslov skrbnika

Konfiguracija LDAP

Povezave LDAP in privzeti varnostni domene so onemogočeni

    nexus_ldap_realm: false
    ldap_connections: []

Povezave LDAP, vsak element izgleda takole:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'My Company LDAP' # uporablja se kot ključ za posodobitev ldap konfiguracije
        ldap_protocol: 'ldaps' # ldap ali ldaps
        ldap_hostname: 'ldap.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false # Ali uporabiti certifikate v zaupnem skladišču nexus
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_auth: 'none' # ali preprosto
        ldap_auth_username: 'username' # če je auth = preprosto
        ldap_auth_password: 'password' # če je auth = preprosto
        ldap_user_base_dn: 'ou=users'
        ldap_user_filter: '(cn=*)' # (neobvezno)
        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

Primer konfiguracije LDAP za anonimno avtentikacijo (anonimno vezavo), to je tudi "minimalna" konfiguracija:

    nexus_ldap_realm: true
    ldap_connection:
      - ldap_name: 'Najenostavnejša LDAP konfiguracija'
        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'

Primer konfiguracije LDAP za preprosto avtentikacijo (z uporabo DSA računa):

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP konfiguracija z 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 }}" # bolje je ohranjati gesla v 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

Primer konfiguracije LDAP za preprosto avtentikacijo (z uporabo DSA računa) + skupine, povezane kot vloge:

    nexus_ldap_realm: true
    ldap_connections
      - ldap_name: 'LDAP konfiguracija s 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 }}" # bolje je čuvati lozinke u ansible vault-u
        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

Primer konfiguracije LDAP za jednostavnu autentifikaciju (uz korišćenje DSA naloga) + grupe, dinamički mapirane kao uloge:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP konfiguracija s 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 }}" # bolje je čuvati lozinke u ansible vault-u
        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'

Privilegije

    nexus_privileges:
      - name: all-repos-read # korišćen kao ključ za ažuriranje privilegije
        # type: <jedan od application, repository-admin, repository-content-selector, repository-view, script ili wildcard>
        description: 'Pristup za čitanje & pretraživanje svim repozitorijumima'
        repository: '*'
        actions: # mogu biti add, browse, create, delete, edit, read ili  * (sve)
          - read
          - browse
        # pattern: obrazac
        # domain: domena
        # script_name: ime

Lista privilegija za konfiguraciju. Pogledajte dokumentaciju i grafički interfejs da proverite koje varijable treba postaviti u zavisnosti od vrste privilegije.

Ovi elementi se kombinuju sa sledećim podrazumevajućim vrednostima:

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

Uloge (u okviru Nexusa)

    nexus_roles:
      - id: Developpers # može se mapirati na id LDAP grupe, takođe korišćen kao ključ za ažuriranje uloge
        name: developers
        description: Svi programeri
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # reference na imena drugih uloga

Lista uloga za konfiguraciju.

Korisnici

    nexus_local_users: []
      # - username: jenkins # korišćen kao ključ za ažuriranje
      #   state: present # podrazumevana vrednost ako nije navedeno, koristi 'absent' za uklanjanje korisnika
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - developers # id uloge

Lista lokalnih (ne-LDAP) korisnika/naloga koje treba kreirati u nexusu.

Seznam lokalnih (ne LDAP) uporabnikov/računov za ustvarjanje v Nexus.

      nexus_ldap_users: []
      # - uporabniško ime: j.doe
      #   stanje: prisoten
      #   vloge:
      #     - "nx-admin"

Preslikava Ldap uporabnikov/vlog. Stanje absent odstrani vloge iz obstoječega uporabnika, če že obstaja.
Ldap uporabniki se ne odstranijo. Poskus dodelitve vloge neobstoječemu uporabniku bo povzročil napako.

Izbor vsebine

  nexus_content_selectors:
  - ime: docker-login
    opis: Izbor za privilegij prijave v Docker
    izraz_iskanja: format=="docker" and path=~"/v2/"

Za več informacij o selektorju vsebine si oglejte Dokumentacijo.

Da bi uporabljali selektor vsebine, dodajte novo privilegij s type: repository-content-selector in ustreznimcontentSelector

- ime: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  opis: 'Prijava v Docker register'
  repozitorij: '*'
  dejanja:
  - branje
  - brskanje

Blobstore in repozitoriji

    nexus_delete_default_repos: false

Izbriši repozitorije iz začetne privzete konfiguracije namestitve Nexus. Ta korak se izvede le pri prvi namestitvi (ko nexus_data_dir je bil zaznan prazen).

Odstranjevanje repozitorijev iz izvorne privzete konfiguracije za Nexus. Ta korak se izvede le pri prvi namestitvi (ko nexus_data_dir je prazen).

    nexus_delete_default_blobstore: false

Izbriši privzeti blobstore iz začetne privzete konfiguracije namestitve Nexus. To je mogoče storiti le, če nexus_delete_default_repos: true in vsi konfigurirani repozitoriji (glejte spodaj) imajo izrecno blob_store: custom. Ta korak se izvede le pri prvi namestitvi (ko nexus_data_dir je bil zaznan prazen).

Izbriševanje blobshranjevanja (binarnih artefaktov) je privzeto izključeno iz izvirne konfiguracije. Za odstranitev blobshranjevanja (binarnih artefaktov) izključite nexus_delete_default_repos: true. Ta korak se izvede le pri prvi namestitvi (ko nexus_data_dir je prazen).

    nexus_blobstores: []
    # primer elementa blobstore:
    # - ime: separate-storage
    #   type: file
    #   pot: /mnt/custom/path
    # - ime: s3-blobstore
    #   type: S3
    #   config:
    #     bucket: s3-blobstore
    #     accessKeyId: "{{ VAULT_ENCRYPTED_KEY_ID }}"
    #     secretAccessKey: "{{ VAULT_ENCRYPTED_ACCESS_KEY }}"

Blobstore za ustvarjanje. Pot do blobstore in repozitorijsko blobstore ni mogoče posodobiti po začetnem ustvarjanju (vsaka posodobitev tukaj bo ignorirana pri ponovnem zagotavljanju).

Konfiguracija blobstore na S3 je zagotovljena kot udobje in ni del avtomatiziranih testov, ki jih izvajamo na travisu. Upoštevajte, da se shranjevanje na S3 priporoča samo za instance, nameščene na AWS.

Ustvarjanje Blobstore. Pot do blobshranjevanja in repozitorij blobshranjevanja ni mogoče posodobiti po prvotni namestitvi (vsaka posodobitev tukaj bo ignorirana pri ponovni namestitvi).

Konfiguracija shranjevanja BLOB-objektov na S3 se zagotavlja za udobje. Upoštevajte, da se shranjevanje na S3 priporoča samo za instance, nameščene na 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
    # пример с логином/паролем :
    # - 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

Пример конфигурации выше прокси-сервер Maven.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # одно из "allow", "allow_once" или "deny"

Maven размещенные репозитории конфигурация. Конфигурация отрицательного кэша является необязательной и будет по умолчанию использовать вышеуказанные значения, если не указана.

Конфигурация размещенных (hosted) репозиториев Maven. Конфигурация отрицательного кэша (-1) является необязательной и будет по умолчанию использовать вышеуказанные значения, если не указана.

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

Конфигурация группы Maven.

Все три типа репозитория объединяются со следующими значениями по умолчанию:

    _nexus_repos_maven_defaults:
      blob_store: default # Примечание : не может быть обновлен, как только репозиторий был создан
      strict_content_validation: true
      version_policy: release # release, snapshot или mixed
      layout_policy: strict # строгий или разрешающий
      write_policy: allow_once # одно из "allow", "allow_once" или "deny"
      maximum_component_age: -1  # стандартное значение GUI Nexus. Только для прокси
      maximum_metadata_age: 1440  # стандартное значение GUI Nexus. Только для прокси
      negative_cache_enabled: true # стандартное значение GUI Nexus. Только для прокси
      negative_cache_ttl: 1440 # стандартное значение GUI Nexus. Только для прокси

Типы репозиториев Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS и yum:
см. defaults/main.yml для этих опций:

Хранилища Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS и yum по умолчанию выключены:
Смотрите defaults/main.yml для этих опций:

      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

Обратите внимание, что вам может потребоваться включить определенные области безопасности, если вы хотите использовать другие типы репозиториев, кроме maven. Это по умолчанию false

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # требуется для анонимного доступа к docker

Remote User Realm также может быть включена с помощью

nexus_rut_auth_realm: true

и заголовок может быть настроен путем определения

nexus_rut_auth_header: "CUSTOM_HEADER"

Запланированные задачи

    nexus_scheduled_tasks: []
    #  #  Пример задачи для сжатия blobstore :
    #  - name: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: alerts@example.org  # необязательно
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # все атрибуты задачи хранятся как строки в nexus
    #  #  Пример задачи для удаления maven снимков
    #  - name: Purge-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: alerts@example.org  # необязательно
    #    taskProperties:
    #      repositoryName: "*"  # * для всех репозиториев. Измените на имя репозитория, если вы хотите только конкретный
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Пример задачи для очистки неиспользуемых docker манифестов и изображений
    #  - name: Purge unused docker manifests and images
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: alerts@example.org  # необязательно
    #    taskProperties:
    #      repositoryName: "*"  # * для всех репозиториев. Измените на имя репозитория, если вы хотите только конкретный
    #  #  Пример задачи для очистки неполных загрузок docker
    #  - name: Purge incomplete docker uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: alerts@example.org  # необязательно
    #    taskProperties:
    #      age: "24"

Запланированные задачи za konfiguraciju. typeId и специфичные для задачиtaskProperties/booleanTaskProperties можно угадать либо:

  • из иерархии типов Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • проверяя HTML-форму создания задачи в вашем браузере
  • от просмотра запросов AJAX в браузере при ручной настройке задачи.

Свойства задачи должны быть объявлены в правильном блоке yaml в зависимости от их типа:

  • taskProperties для всех строковых свойств (т. е. имен репозиториев, имен хранилищ, периодов времени …).
  • booleanTaskProperties для всех логических свойств (т. е. в основном чекбоксы в графическом интерфейсе задачи создания нексуса).

Резервные копии

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Смотрите определение cron выражений в GUI создания задач 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  # Хранить 4 ротации резервных копий по умолчанию (текущая + последние 3)

Резервное копирование не будет настроено, пока вы не переключите nexus_backup_configure u true.
В этом случае запланированная задача сценария будет настроена для запуска в Nexus
с интервалом, указанным в nexus_backup_cron (по умолчанию 21:00 каждый день).
См. [Шаблон groovy для этой задачи](templates / backup.groovy.j2) для получения подробной информации.
Это запланированное задание не зависит от других nexus_scheduled_tasks, которые вы
объявить в своем playbook.

Если вы хотите ротировать/удалять резервные копии, установите nexus_backup_rotate: true и настройте количество резервных копий, которое вы хотите сохранить с помощью nexus_backup_keep_rotations (по умолчанию 4).

При использовании ротации, если вы хотите сэкономить дополнительное дисковое пространство во время процесса резервного копирования,
Вы можете установить nexus_backup_rotate_first: true. Это настроит предварительное ротирование/удаление перед резервным копированием. По умолчанию ротация происходит после создания резервной копии. Обратите внимание, что в этом случае старые резервные копии
удалятся до того, как текущая резервная копия будет сделана.

Процедура восстановления

Запустите playbook с параметром -e nexus_restore_point=
(например, 2017-12-17-21-00-00 для 17 декабря 2017 в 21:00

Удаление nexus

Предупреждение: это полностью удалит текущие данные. Обязательно сделайте резервную копию заранее, если это необходимо

Используйте переменную nexus_purge, если вам нужно перезапустить с нуля и переустановить экземпляр nexus с удалением всех данных.

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

Измените пароль администратора после первой установки

    nexus_default_admin_password: 'admin123'

Это не должно быть изменено в вашем playbook. Эта переменная заполняется стандартным паролем администратора Nexus при первой установке и гарантирует, что мы можем изменить пароль администратора на nexus_admin_password.

Если вы хотите изменить пароль администратора после первой установки, вы можете временно изменить его на старый пароль из командной строки. После изменения nexus_admin_password в вашей игровой книге вы можете запустить:

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

Телеграм канал по Nexus Sonatype: https://t.me/ru_nexus_sonatype

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite se, molim vas.

Какими хранилищами артефактов вы пользуетесь?

  • Sonatype Nexus бесплатный

  • Sonatype Nexus платный

  • Artifactory бесплатный

  • Artifactory платный

  • Harbor

  • Pulp

Проголосовали 9 пользователей. Воздержались 3 пользователя.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster