Instalimi dhe konfigurimi i Nexus Sonatype duke përdorur qasjen infrastructure as code

Sonatype Nexus është një platformë e integruar që lejon zhvilluesit të proksinojnë, ruajnë dhe menaxhojnë varësitë Java (Maven), imazhet Docker, Python, Ruby, NPM, Bower, paketat RPM, gitlfs, Apt, Go, Nuget, si dhe të shpërndajnë softuerin e tyre.

Pse është e nevojshme Sonatype Nexus?

  • PĂ«r ruajtjen e artefakteve private;
  • PĂ«r keĆĄimin e artefakteve qĂ« shkarkohen nga interneti;

Artefaktet e mbështetura në paketimin bazë të Sonatype Nexus:

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

Artefaktet e mbështetura nga komuniteti:

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

Instalimi i Sonatype Nexus duke përdorur https://github.com/ansible-ThoTeam/nexus3-oss

Kërkesat

  • Lexoni pĂ«r pĂ«rdorimin e ansible nĂ« internet.
  • Instaloni ansible pip install ansible nĂ« stacionin e punĂ«s ku ekzekutohet playbook.
  • Instaloni geerlingguy.java nĂ« stacionin e punĂ«s ku ekzekutohet playbook.
  • Instaloni geerlingguy.apache nĂ« stacionin e punĂ«s ku ekzekutohet playbook.
  • Kjo rol Ă«shtĂ« testuar nĂ« CentOS 7, Ubuntu Xenial (16.04) dhe Bionic (18.04), Debian Jessie dhe Stretch
  • jmespath biblioteka duhet tĂ« instalohen nĂ« stacionin e punĂ«s ku ekzekutohet playbook. PĂ«r instalim, ekzekutoni sudo pip install -r requirements.txt
  • Ruani skedarin e playbook (shembuj mĂ« poshtĂ«) si nexus.yml
  • Nisni instalimin e nexus ansible-playbook -i host nexus.yml

Shembull ansible-playbook për të instaluar nexus pa LDAP me repositorët Maven (java), Docker, Python, Ruby, NPM, Bower, RPM dhe gitlfs.

---
- emri: Nexus
  hostet: nexus
  becoj: po

  variablat:
    nexus_timezone: 'Asia/Omsk'
    nexus_admin_password: "admin123"
    nexus_public_hostname: 'apatsev-nexus-playbook'
    httpd_setup_enable: false
    nexus_privilegjat:
      - emri: all-repos-read
        përshkrimi: 'Akses për të lexuar & shfletuar të gjitha repo'
        repository: '*'
        veprimet:
          - lexoni
          - shfletoni
      - emri: company-project-deploy
        përshkrimi: 'Zbatime për projektin e kompanisë'
        repository: company-project
        veprimet:
          - shtoni
          - redaktoni
    nexus_roles:
      - id: Developpers # harton me grupin LDAP
        emri: zhvilluesit
        përshkrimi: Të gjithë zhvilluesit
        privilegjet:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        rolet: []
    nexus_local_users:
      - emri_i_përdoruesit: jenkins # përdoret si çelës për përditësim
        emri: Jenkins
        mbiemri: CI
        email: support@company.com
        fjalëkalimi: "s3cr3t"
        rolet:
          - Developpers # ID e rolit këtu
    nexus_blobstores:
      - emri: company-artifacts
        rruga: /var/nexus/blobs/company-artifacts
    nexus_scheduled_tasks:
      - emri: compact-blobstore
        cron: '0 0 22 * * ?'
        typeId: blobstore.compact
        taskProperties:
          blobstoreName: 'company-artifacts'

    nexus_repos_maven_proxy:
      - emri: central
        remote_url: 'https://repo1.maven.org/maven2/'
        layout_policy: permissive
      - emri: jboss
        remote_url: 'https://repository.jboss.org/nexus/content/groups/public-jboss/'
      - emri: vaadin-addons
        remote_url: 'https://maven.vaadin.com/vaadin-addons/'
      - emri: jaspersoft
        remote_url: 'https://jaspersoft.artifactoryonline.com/jaspersoft/jaspersoft-repo/'
        version_policy: mixed
    nexus_repos_maven_hosted:
      - emri: company-project
        version_policy: mixed
        write_policy: allow
        blob_store: company-artifacts
    nexus_repos_maven_group:
      - emri: public
        anëtarët_repos:
          - central
          - jboss
          - vaadin-addons
          - jaspersoft

    # Yum. Ndryshoni nexus_config_yum në true për të krijuar repository yum
    nexus_config_yum: true
    nexus_repos_yum_hosted:
      - emri: private_yum_centos_7
        repodata_depth: 1
    nexus_repos_yum_proxy:
      - emri: 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
      - emri: 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:
      - emri: yum_all
        anëtarët_repos:
          - private_yum_centos_7
          - epel_centos_7_x86_64

    # NPM. Ndryshoni nexus_config_npm në true për të krijuar repository npm
    nexus_config_npm: true
    nexus_repos_npm_hosted: []
    nexus_repos_npm_group:
      - emri: npm-public
        anëtarët_repos:
          - npm-registry
    nexus_repos_npm_proxy:
      - emri: npm-registry
        remote_url: https://registry.npmjs.org/
        negative_cache_enabled: false

    # Docker. Ndryshoni nexus_config_docker në true për të krijuar repository docker
    nexus_config_docker: true
    nexus_repos_docker_hosted:
      - emri: docker-hosted
        http_port: "{{ nexus_docker_hosted_port }}"
        v1_enabled: True
    nexus_repos_docker_proxy:
      - emri: 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:
      - emri: docker-group
        http_port: "{{ nexus_docker_group_port }}"
        v1_enabled: True
        anëtarët_repos:
          - docker-hosted
          - docker-proxy

    # Bower. Ndryshoni nexus_config_bower në true për të krijuar repository bower
    nexus_config_bower: true
    nexus_repos_bower_hosted:
      - emri: bower-hosted
    nexus_repos_bower_proxy:
      - emri: 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:
      - emri: bower-group
        anëtarët_repos:
          - bower-hosted
          - bower-proxy

    # Pypi. Ndryshoni nexus_config_pypi në true për të krijuar repository pypi
    nexus_config_pypi: true
    nexus_repos_pypi_hosted:
      - emri: pypi-hosted
    nexus_repos_pypi_proxy:
      - emri: 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:
      - emri: pypi-group
        anëtarët_repos:
          - pypi-hosted
          - pypi-proxy

    # rubygems. Ndryshoni nexus_config_rubygems në true për të krijuar repository rubygems
    nexus_config_rubygems: true
    nexus_repos_rubygems_hosted:
      - emri: rubygems-hosted
    nexus_repos_rubygems_proxy:
      - emri: 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:
      - emri: rubygems-group
        anëtarët_repos:
          - rubygems-hosted
          - rubygems-proxy

    # gitlfs. Ndryshoni nexus_config_gitlfs në true për të krijuar repository gitlfs
    nexus_config_gitlfs: true
    nexus_repos_gitlfs_hosted:
      - emri: gitlfs-hosted

  rolet:
    - { roli: geerlingguy.java }
    # Vetëm Debian/Ubuntu
    # - { roli: geerlingguy.apache, apache_create_vhosts: no, apache_mods_enabled: ["proxy_http.load", "headers.load"], apache_remove_default_vhost: true, tags: ["geerlingguy.apache"] }
    # Vetëm RedHat/CentOS
    - { roli: geerlingguy.apache, apache_create_vhosts: no, apache_remove_default_vhost: true, tags: ["geerlingguy.apache"] }
    - { roli: ansible-thoteam.nexus3-oss, tags: ['ansible-thoteam.nexus3-oss'] }

Kapitalet:

Instalimi dhe konfigurimi i Nexus Sonatype duke përdorur qasjen infrastructure as code

Instalimi dhe konfigurimi i Nexus Sonatype duke përdorur qasjen infrastructure as code

Variablat e rolit

Variablat e Rolit

Variablat me vlera standarde (shih. default/main.yml):

Variablat e përgjithshme

    nexus_version: ''
    nexus_timezone: 'UTC'

Në mënyrë standarde, roli do të vendosë versionin më të fundit të disponueshëm të Nexus. Ju mund të rregulloni versionin duke e ndryshuar variablën nexus_version. Shihni versionet e disponueshme në https://www.sonatype.com/download-oss-sonatype.

Nëse e ndryshoni versionin në një version më të ri, roli do të përpiqet të përditësojë Nexus-in tuaj të instaluar.

Nëse po përdorni një version më të vjetër të Nexus-it se sa më i fundit, duhet të siguroheni që nuk po përdorni funksione, të cilat nuk janë të disponueshme në versionin e instaluar (për shembull, vendosja e depozitave yum është e disponueshme për nexus më shumë se 3.8.0, depo git lfs për nexus më shumë se 3.3.0 etj.)

nexus timezone — Ă«shtĂ« emri i zonĂ«s kohore Java, qĂ« mund tĂ« jetĂ« i dobishĂ«m nĂ« kombinim me shprehjet e mĂ«poshtme cron pĂ«r detyrat e programuar tĂ« nexus.

Porti dhe rruga kontekstuale e Nexus

    nexus_default_port: 8081
    nexus_default_context_path: '/'

Porti dhe rruga kontekstuale e procesit të lidhjes Java. nexus_default_context_path duhet të përmbajë një gërvishtje kur është vendosur, për shembull: nexus_default_context_path: '/nexus/'.

Përdoruesi dhe grupi OS të Nexus

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Përdoruesi dhe grupi, të cilët do të përdoren për pronësinë e skedarëve Nexus dhe për të nisur shërbimin, do të krijohen nga roli nëse ai mungon.

    nexus_os_user_home_dir: '/home/nexus'

Lejo rregullimin e katalogut të shtëpisë standard për përdoruesin nexus

Kataloget e instancave të Nexus

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

Kataloget e Nexus.

  • nexus_installation_dir pĂ«rmban skedarĂ«t e ekzekutueshĂ«m tĂ« instaluar
  • nexus_data_dir pĂ«rmban tĂ« gjithĂ« konfigurimin, repository-t dhe artefaktet e ngarkuara. RrugĂ«t e personalizuara tĂ« blobstores nexus_data_dir mund tĂ« konfigurohen, shih mĂ« poshtĂ« nexus_blobstores.
  • nexus_tmp_dir pĂ«rmban tĂ« gjitha skedarĂ«t e pĂ«rkohshĂ«m. Rruga standard pĂ«r redhat Ă«shtĂ« zhvendosur nga /tmp pĂ«r tĂ« kapĂ«rcyer problemet e mundshme me procedurat automatike tĂ« pastrimit. Shih #168.

Konfigurimi i përdorimit të memories së Nexus JVM

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

Këto janë konfigurimet standard për Nexus. Ju lutemi, mos i ndryshoni këto vlera Nëse nuk keni lexuar seksionin e kërkesave sistemike të memories së nexus dhe nuk e kuptoni çfarë bëjnë ato.

Si një paralajmërim të dytë, ja një ekscerpt nga dokumenti të përmendur më lart:

Nuk është e rekomanduar të rritet memoria JVM heap më shumë sesa vlerat e rekomanduara në përpjekje për të përmirësuar performancën. Në fakt, kjo mund të ketë efektin e kundërt, duke çuar në punën e panevojshme të sistemit operativ.

Fjalkalimi i administratorit

    nexus_admin_password: 'changeme'

Fjalkalimi i llogarisë «admin» për konfigurimin. Kjo punon vetëm gjatë instalimit të parë në mënyrë standarde. Ju lutem, shihni [Ndrysho fjalkalimin e administratorit pas instalimit të parë](# change-admin-password-after-first-install), nëse dëshironi ta ndryshoni atë më vonë me rolin.

Fort nuk rekomandohet të ruani fjalkalimin tuaj si tekst të hapur në playbook, por të përdorni [enkriptimin ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (që mund të jetë i ndërtuar ose në një skedar të veçantë, i ngarkuar, për shembull, me anë të include_vars)

Pranimi anonim si parazgjedhje

    nexus_anonymous_access: false

Pranimi anonim si parazgjedhje është i çaktivizuar. Më shumë rreth pranimit anonim.

Emri publik i hostit

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Emri i plotë i domenit dhe skema (https ose http), sipas të cilës instanca Nexus do të jetë e aksesueshme për klientët e saj.

Akses API për këtë 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 }}"

Këto variabla kontrollojnë se si roli lidhet me API-në Nexus për të ofruar shërbimin.
Vetëm për përdoruesit e avancuar. Ndërsa është e mundur, me siguri nuk dëshironi të ndryshoni këto cilësime të paracaktuar.

Konfigurimi i një proxy të kthyer

    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

Instaloni Proxy i kthyer SSL.
Për këtë, duhet të instaloni httpd. Shënim: kur për httpd_setup_enable është vendosur nëe vërtetë, nexus lidhet me 127.0.0.1:8081, kështu nuk duke qenë direkt e aksesueshme nëpërmjet portit HTTP 8081 me adresën IP të jashtme.

Emri i hostit të paracaktuar është nexus_public_hostname. Nëse ju nevojiten emra të ndryshëm për ndonjë arsye, mund të vendosni httpd_server_name me një vlerë tjetër.

S httpd_copy_ssl_files: true (e paracaktuar) certifikatat e lartëpërmendura duhet të ekzistojnë në direktorinë tuaj të playbook dhe do të kopjohen në server dhe konfigurohen në apache.

Nëse dëshironi të përdorni certifikatat ekzistuese në server, vendosni httpd_copy_ssl_files: false dhe sigurohuni që të jepni variablat e mëposhtëm:

    # 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 është opsional dhe duhet lënë pa vendosur nëse nuk dëshironi të konfiguroni skedarin e zinxhirit

    httpd_default_admin_email: "admin@example.com"

Vendosni adresën e postës elektronike të administratorit si e parazgjedhur

Konfigurimi LDAP

Këto lidhje LDAP dhe zona e sigurisë janë të çaktivizuara si parazgjedhje

    nexus_ldap_realm: false
    ldap_connections: []

Lidhjet LDAP, çdo element duket si në vijim:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'My Company LDAP' # përdoret si një çelës për të përditësuar konfigurimin ldap
        ldap_protocol: 'ldaps' # ldap ose ldaps
        ldap_hostname: 'ldap.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false # Nëse përdoren ose jo certifikatat në nyjën e besimit të nexus
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_auth: 'none' # ose thjeshtë
        ldap_auth_username: 'username' # nëse auth = thjeshtë
        ldap_auth_password: 'password' # nëse auth = thjeshtë
        ldap_user_base_dn: 'ou=users'
        ldap_user_filter: '(cn=*)' # (opsionale)
        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

Shembulli i konfigurimit LDAP për autentifikimin anonim (për lidhjen anonime), kjo është gjithashtu konfigurimi më "minimal":

    nexus_ldap_realm: true
    ldap_connection:
      - ldap_name: 'Konfigurimi më i thjeshtë LDAP'
        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'

Shembulli i konfigurimit LDAP për autentifikimin e thjeshtë (duke përdorur një llogari DSA):

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Konfigurimi LDAP me 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 }}" # është më mirë të mbani fjalëkalimet në një 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

Shembull i konfigurimit LDAP për autentifikim të thjeshtë (duke përdorur llogarinë DSA) + grupe, të lidhura si role:

    nexus_ldap_realm: true
    ldap_connections
      - ldap_name: 'Konfigurimi LDAP me 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 }}" # është më mirë të mbani fjalëkalimet në një 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

Shembulli i konfigurimit LDAP për autentifikimin e thjeshtë (duke përdorur llogarinë DSA) + grupe, të përputhura dinamikisht si rolle:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Konfigurimi LDAP me 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 }}" # më mirë t'i mbani fjalëkalimet në një anvilë 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'

Privilegjet

    nexus_privileges:
      - name: all-repos-read # përdoret si çelës për të përditësuar një privilegj
        # type: <një nga aplikacioni, administrator i repository, përzgjedhësi i përmbajtjes së repository, pamjen e repository, skenarin ose wildcard>
        description: 'Qasje për të Lexuar & Shflezuar në të gjitha repository'
        repository: '*'
        actions: # mund të jetë për të shtuar, shflezuar, krijuar, fshirë, redaktuar, lexuar ose * (të gjitha)
          - read
          - browse
        # pattern: pattern
        # domain: domain
        # script_name: name

Lista privilegjeve për konfigurim. Shikoni dokumentacionin dhe ndërfaqen grafike për të parë se cilat variabla duhet të vendosen në varësi të llojit të privilegjeve.

Këto elemente bashkohen me vlerat e mëposhtme për default:

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

Rollet (në kontekstin e Nexus)

    nexus_roles:
      - id: Developpers # mund të përputhet me një ID grupi LDAP, gjithashtu përdoret si çelës për të përditësuar një rol
        name: developers
        description: Të gjithë zhvilluesit
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # referenca për emrat e tjerë të rolit

Lista rollet për konfigurim.

Përdoruesit

    nexus_local_users: []
      # - username: jenkins # përdoret si çelës për të përditësuar
      #   state: present # vlera e paracaktuar nëse lihet jashtë, përdorni 'absent' për të hequr përdoruesin
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - developers # ID roli

Lista e përdoruesve/accounteve lokale (jo-LDAP) për t'u krijuar në nexus.

Lista e përdoruesve/accounteve lokale (jo-LDAP) për t'u krijuar në Nexus.

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

Mapping i përdoruesve/rolleve LDAP. Gjendja absent do të heqë rolet nga një përdorues ekzistues, nëse ai ekziston tashmë.
Përdoruesit LDAP nuk hiqen. Një përpjekje për të vendosur një rol për një përdorues që nuk ekziston do të çojë në një gabim.

Seletorët e përmbajtjes

  nexus_content_selectors:
  - name: docker-login
    description: Seletor për privilegjin e login-it të docker-it
    search_expression: format=="docker" and path=~"/v2/"

Për më shumë informacion mbi seletorin e përmbajtjes, shih. Dokumentacioni.

Për të përdorur selektorin e përmbajtjes, shtoni një privilegj të ri me lloj: repository-content-selector dhe përkatësincontentSelector

- emri: docker-login-privilege
  lloj: repository-content-selector
  contentSelector: docker-login
  përshkrimi: 'Hyni në registrin Docker'
  repository: '*'
  veprimet:
  - lexoni
  - shfletoni

Blobstore dhe repositorë

    nexus_delete_default_repos: false

Fshini repositorët nga konfigurimi fillestar i instalimit të nexusit. Ky hap ekzekutohet vetëm gjatë instalimit të parë (kur nexus_data_dir është zbuluar bosh).

Fshirja e repositorëve nga konfigurimi standard i Nexus. Ky hap bëhet vetëm gjatë instalimit të parë (kur nexus_data_dir është bosh).

    nexus_delete_default_blobstore: false

Fshini blobstore standard nga konfigurimi fillestar i instalimit të nexusit. Kjo mund të bëhet vetëm nëse nexus_delete_default_repos: true dhe të gjithë repositorët e konfiguruar (shih më poshtë) kanë një blob_store: custom. Ky hap ekzekutohet vetëm gjatë instalimit të parë (kur nexus_data_dir është zbuluar bosh).

Fshirja e blobstore (artefakteve binare) është e çaktivizuar në mënyrë standarde nga konfigurimi fillestar. Për të fshirë blobstore (artefakte binare) çaktivizoni nexus_delete_default_repos: true. Ky hap ekzekutohet vetëm gjatë instalimit të parë (kur nexus_data_dir është bosh).

    nexus_blobstores: []
    # shembulli i itemit të blobstore :
    # - emri: separate-storage
    #   lloj: file
    #   rruga: /mnt/custom/path
    # - emri: s3-blobstore
    #   lloj: S3
    #   konfigurimi:
    #     bucket: s3-blobstore
    #     accessKeyId: "{{ VAULT_ENCRYPTED_KEY_ID }}"
    #     secretAccessKey: "{{ VAULT_ENCRYPTED_ACCESS_KEY }}"

Blobstore për të krijuar. Një rrugë hapësire dhe një hapësirë depoje nuk mund të përmirësohen pas krijimit fillestar (çdo përmirësim këtu do të injorohet gjatë riprovizionimit).

Konfigurimi i hapësirës depoje në S3 ofrohet si një lehtësi dhe nuk është pjesë e testeve automatike që ne ekzekutojmë në travis. Ju lutemi vini re se ruajtja në S3 rekomandohet vetëm për instancat e shpërndara në AWS.

Krijimi Blobstore. Rruga për në hapësirën e ruajtjes dhe depojen e hapësirave nuk mund të azhurnohet pas krijimit fillestar (çdo azhurnim këtu do të injorohet gjatë riprovizionimit).

Konfigurimi i hapësirës BLOB në S3 ofrohet për lehtësim. Lutemi vini re se ruajtja në S3 rekomandohet vetëm për instancat e shpërndara në 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
    # shembuj me një login/fjalëkalim :
    # - 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

Më sipër është një shembull konfigurimi proxy Maven.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # një nga "lejo", "lejo një herë" ose "ndalo"

Maven repositories të hostuara konfigurimi. Konfigurimi i cache negativ është opcional dhe do të përfitojë nga vlerat e mësipërme nëse lihet bosh.

Konfigurimi repository të hostuara Maven. Konfigurimi i cache negativ (-1) është opcional dhe do të përdorë vlerat e mësipërme nëse nuk përcaktohet.

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

Konfigurimi grupet Maven.

Të tre llojet e repository-ve kombinohen me këto vlera të paracaktuara:

    _nexus_repos_maven_defaults:
      blob_store: default # Vërejtje: nuk mund të përditësohet pasi repository të krijohet
      strict_content_validation: true
      version_policy: release # release, snapshot ose mixed
      layout_policy: strict # strict ose permissive
      write_policy: allow_once # një nga "lejo", "lejo një herë" ose "ndalo"
      maximum_component_age: -1  # default në gui-në Nexus. Vetëm për proxy
      maximum_metadata_age: 1440  # default në gui-në Nexus. Vetëm për proxy
      negative_cache_enabled: true # default në gui-në Nexus. Vetëm për proxy
      negative_cache_ttl: 1440 # default në gui-në Nexus. Vetëm për proxy

Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS dhe llojet e repo-s yum:
shiko defaults/main.yml për këto opsione:

Repository-t Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS dhe yum nga parazgjedhja janë të dyshuara:
Shikoni defaults/main.yml për këto opsione:

      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

Ju lutemi vini re në dukje se mund t'ju nevojitet të aktivizoni disa fusha të sigurisë nëse dëshironi të përdorni lloje të tjera repoje përveç maven. Kjo është false për defaut.

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # e nevojshme për qasje anonime në docker

Realm i Përdoruesve të Largët gjithashtu mund të aktivizohet me

nexus_rut_auth_realm: true

dhe kreu mund të konfigurohet duke përcaktuar

nexus_rut_auth_header: "CUSTOM_HEADER"

Detyrat e planifikuara

    nexus_scheduled_tasks: []
    #  #  Shembulli i detyrës për të kompaktuar blobstore:
    #  - emri: kompakt-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: alerts@example.org  # opsional
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # të gjitha atributet e detyrës ruhen si vargje nga nexus brendshëm
    #  #  Shembulli i detyrës për të pastruar snapshot-t e maven
    #  - emri: Pastrimi-snapshot-e-maven
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: alerts@example.org  # opsional
    #    taskProperties:
    #      repositoryName: "*"  # * për të gjitha repos. Ndryshoni në emrin e një repozitori nëse dëshoni vetëm një specifike
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Shembulli i detyrës për të pastruar manifestet dhe imazhet e papërdorura docker
    #  - emri: Pastroni manifestet dhe imazhet e papërdorura docker
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: alerts@example.org  # opsional
    #    taskProperties:
    #      repositoryName: "*"  # * për të gjitha repos. Ndryshoni në emrin e një repozitori nëse dëshoni vetëm një specifike
    #  #  Shembulli i detyrës për të pastruar ngarkesat e paplota docker
    #  - emri: Pastroni ngarkesat e paplota docker
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: alerts@example.org  # opsional
    #    taskProperties:
    #      age: "24"

Detyrat e planifikuara për konfigurim. typeId dhe specifik për detyrëntaskProperties/booleanTaskProperties mund të supozohet ose:

  • nga hierarkia e llojeve Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • duke kontrolluar formularin HTML pĂ«r krijimin e detyrĂ«s nĂ« shfletuesin tuaj
  • nga shikimi i kĂ«rkesave AJAX nĂ« shfletues kur konfiguroni detyrĂ«n manualisht.

Atributet e detyrës duhet të shpallen në bllokun e duhur yaml në varësi të tipit të tyre:

  • taskProperties pĂ«r tĂ« gjitha atributet string (p.sh. emrat e repozitoreve, emrat e ruajtjes, periudhat e kohĂ«s 
).
  • booleanTaskProperties pĂ«r tĂ« gjitha atributet logjike (p.sh. kryesisht kutitĂ« e kontrollit nĂ« ndĂ«rfaqen grafike tĂ« detyrĂ«s pĂ«r krijimin e nexusit).

Kopje rezervë

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Shihni definicionin e shprehjeve cron në ndërfaqen për krijimin e detyrave të nexusit
      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  # Ruani 4 rotacione rezervë në mënyrë të paracaktuar (aktual + 3 të fundit)

Kopjimi rezervë nuk do të konfigurohet derisa të çaktivizoni nexus_backup_configure në e vërtetë.
Në këtë rast, detyra e planifikuar do të konfigurohet për t'u ekzekutuar në Nexus
me intervalin e specifikuar në nexus_backup_cron (normalisht në 21:00 çdo ditë).
Shihni [Shabllonin groovy për këtë detyrë](templates / backup.groovy.j2) për më shumë informacion.
Kjo detyrë e planifikuar nuk varet nga tjerat nexus_scheduled_tasks, të cilat ju
shpallni në playbook-un tuaj.

Nëse dëshironi të rotaciononi/fshini kopjet rezervë, vendosni nexus_backup_rotate: true dhe përcaktoni numrin e kopjeve rezervë që dëshironi të mbani me nexus_backup_keep_rotations (për default 4).

Kur përdorni rotacionin, nëse dëshironi të kurseni hapësirë shtesë disku gjatë procesit të kopjimit,
Mund të vendosni nexus_backup_rotate_first: true. Kjo do të konfiguronte rotacionin paraprak / fshirjen para kopjimit. Për default, rotacioni ndodh pas krijimit të kopjes rezervë. Mbani parasysh, sa më shumë kopje rezervë të vjetra
do të fshihen para se të bëhet kopja aktuale.

Procedura e rikthimit

Ekzekutoni playbook me parametrin -e nexus_restore_point=
(p.sh., 2017-12-17-21-00-00 për 17 dhjetor 2017 në orën 21:00

Fshirja e nexus

Kujdes: kjo do të fshijë plotësisht të dhënat aktuale. Sigurohuni të bëni një kopje rezervë më parë, nëse është e nevojshme

Përdorni variablën nexus_purge, nëse duhet të rifilloni nga fillimi dhe të rivendosni instancën nexus me fshirjen e të gjitha të dhënave.

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

Ndryshoni fjalëkalimin e administratorit pas instalimit të parë

    nexus_default_admin_password: 'admin123'

Kjo nuk duhet të ndryshohet në playbook tuaj. Kjo variablë popullon me fjalëkalimin standard të administratorit të Nexus gjatë instalimit fillestar dhe garanton që ne mund ta ndryshojmë fjalëkalimin e administratorit në nexus_admin_password.

Nëse dëshironi të ndryshoni fjalëkalimin e administratorit pas instalimit fillestar, mund ta ndryshoni përkohësisht në fjalëkalimin e vjetër nga linja e komandës. Pas ndryshimit nexus_admin_password në librin tuaj të lojrave mund të ekzekutoni:

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

Kanal Telegram për Nexus Sonatype: https://t.me/ru_nexus_sonatype

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, ju lutemi.

ÇfarĂ« depozitash artefaktesh pĂ«rdorni?

  • Sonatype Nexus falas

  • Sonatype Nexus me pagesĂ«

  • Artifactory falas

  • Artifactory me pagesĂ«

  • Harbor

  • Pulp

9 përdorues kanë votuar. 3 përdorës abstenuan.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster