Nexus Sonatype instalatzea eta konfiguratzea azpiegitura kode ikuspegi gisa erabiliz

Sonatype Nexus plataforma integratua da, zeinaren bidez garatzaileek Java (Maven) mendekotasunak, Docker, Python, Ruby, NPM, Bower irudiak, RPM paketeak, gitlfs, Apt, Go, Nuget, Apt, Go, Nuget, Apt, Go, Nuget, eta haien softwarearen segurtasuna banatzeko proxy, gorde eta kudeatu ditzaketen.

Zergatik behar duzu Sonatype Nexus?

  • Artefaktu pribatuak gordetzeko;
  • Internetetik deskargatzen diren artefaktuak cachean gordetzeko;

Sonatype Nexus oinarrizko paketean onartzen diren artefaktuak:

  • Java, Maven (jarra)
  • Docker
  • Python (pip)
  • Ruby (bitxi)
  • NPM
  • Bowers
  • Yum (rpm)
  • gitlfak
  • Raw
  • Aproposa (deb)
  • Go
  • Nuget

Komunitateak onartzen dituen artefaktuak:

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

Sonatype Nexus instalatzen erabiliz https://github.com/ansible-ThoTeam/nexus3-oss

Baldintzak

  • Irakurri ansible Interneten erabiltzeari buruz.
  • Instalatu ansible pip install ansible playbook exekutatzen den lantokian.
  • instalatu geerlingguy.java playbook exekutatzen den lantokian.
  • instalatu geerlingguy.apache playbook exekutatzen den lantokian.
  • Rol hau CentOS 7, Ubuntu Xenial (16.04) eta Bionic (18.04), Debian Jessie eta Stretch-en probatu da
  • jmespath Liburutegia exekutatzen ari den lantokian instalatu behar da. Instalatzeko: sudo pip install -r requirements.txt
  • Gorde playbook fitxategia (beheko adibidea) nexus.yml fitxategian
  • Exekutatu nexus instalazioa ansible-playbook -i host nexus.yml

Nexus LDAP gabe instalatzeko ansible-playbook adibidea Maven (java), Docker, Python, Ruby, NPM, Bower, RPM eta gitlfs biltegiekin.

---
- 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'] }

Pantaila-argazkiak:

Nexus Sonatype instalatzea eta konfiguratzea azpiegitura kode ikuspegi gisa erabiliz

Nexus Sonatype instalatzea eta konfiguratzea azpiegitura kode ikuspegi gisa erabiliz

Rol aldakorrak

Rolen aldagaiak

Balio lehenetsiak dituzten aldagaiak (ikus default/main.yml):

Aldagai orokorrak

    nexus_version: ''
    nexus_timezone: 'UTC'

Lehenespenez, rolak Nexus-en eskuragarri dagoen azken bertsioa instalatuko du. Bertsioa alda dezakezu aldagaia aldatuz nexus_version. Ikusi eskuragarri dauden bertsioak helbidean https://www.sonatype.com/download-oss-sonatype.

Bertsio berri batera aldatzen baduzu, rola zure Nexus instalazioa eguneratzen saiatuko da.

Azkena baino Nexus-en bertsio zaharrago bat erabiltzen ari bazara, ziurtatu ez duzula instalatutako bertsioan erabilgarri ez dauden funtzioak erabiltzen ari (adibidez, yum biltegiak ostatzea eskuragarri dago 3.8.0 baino handiagoa den nexus, git lfs repo-rako. 3.3.0 baino handiagoa den nexuserako, etab.)

nexus timezone Java ordu-eremuaren izena da, nexus_scheduled atazetarako cron adierazpen hauekin konbinatuta erabilgarria izan daitekeena.

Nexus ataka eta testuinguruaren bidea

    nexus_default_port: 8081
    nexus_default_context_path: '/'

Java konexio-prozesuaren ataka eta testuinguruaren bidea. nexus_default_context_path Ezarritakoan barra bat izan behar du, adibidez: nexus_default_context_path: '/nexus/'.

Nexus OS erabiltzailea eta taldea

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Nexus fitxategien jabe izateko eta zerbitzua exekutatzeko erabiltzen den erabiltzailea eta taldea rolaren arabera sortuko da bat falta bada.

    nexus_os_user_home_dir: '/home/nexus'

Baimendu nexus erabiltzailearen hasierako direktorio lehenetsia aldatzea

Nexus instantzia-direktorioak

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

Nexus katalogoak.

  • nexus_installation_dir instalatutako fitxategi exekutagarriak ditu
  • nexus_data_dir konfigurazio, biltegi eta deskargatutako artefaktu guztiak ditu. Blobstore-bide pertsonalizatuak nexus_data_dir pertsonaliza daiteke, ikus behean nexus_blobstores.
  • nexus_tmp_dir aldi baterako fitxategi guztiak ditu. Redhat-en bide lehenetsia mugitu da /tmp garbiketa automatikoko prozedurekin balizko arazoak gainditzeko. Ikusi #168.

Nexus JVM memoria-erabilera konfiguratzen

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

Hauek dira Nexus-en ezarpen lehenetsiak. Mesedez, ez aldatu balio hauek Irakurri ez baduzu nexus sistemaren eskakizunen memoria atala eta ez dute ulertzen zer egiten ari diren.

Bigarren abisu gisa, hona hemen goiko dokumentuaren pasarte bat:

Ez da gomendatzen JVM heap memoria gomendatutako balioetatik haratago handitzea errendimendua hobetu nahian. Horrek kontrako efektua izan dezake, sistema eragilearentzat beharrezkoa ez den lana eraginez.

Administratzailearen pasahitza

    nexus_admin_password: 'changeme'

Konfiguratzeko "administratzaile" kontuaren pasahitza. Honek lehen instalazio lehenetsian bakarrik funtzionatzen du. Mesedez, ikusi [Aldatu administratzailearen pasahitza lehen instalazioaren ondoren] (# change-admin-password-after-first-install) geroago aldatu nahi baduzu rol bat erabiliz.

Biziki gomendatzen da pasahitza ez gordetzea playbook-an testu garbian, baizik eta [ansible-vault enkriptatzea] erabiltzea (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (esaterako, include_vars-ekin kargatutako fitxategi bereizi batean)

Sarbide anonimoa lehenespenez

    nexus_anonymous_access: false

Sarbide anonimoa desgaituta dago lehenespenez. Irakurri gehiago buruz sarbide anonimoa.

Ostalari izen publikoa

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Nexus instantzia bere bezeroentzat eskuragarri egongo den domeinu-izena eta eskema guztiz kualifikatua (https edo http).

Rol honetarako API sarbidea

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

Aldagai hauek kontrolatzen dute rola nola konektatzen den Nexus APIra hornitzeko.
Erabiltzaile aurreratuentzat soilik. Seguruenik, ez dituzu ezarpen lehenetsi hauek aldatu nahi

Alderantzizko proxy bat konfiguratzea

    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

instalatu SSL Alderantzizko Proxy.
Horretarako httpd instalatu behar duzu. Oharra: noizrako httpd_setup_enable ezarri balioatrue, nexus kontaktuak 127.0.0.1:8081, horrela ez 8081 HTTP atakaren bidez zuzenean eskura daiteke kanpoko IP helbidetik.

Erabilitako ostalari-izena lehenetsia da nexus_public_hostname. Arrazoiren bategatik izen desberdinak behar badituzu, ezar dezakezu httpd_server_name beste esanahi batekin.

Π‘ httpd_copy_ssl_files: true (lehenespenez) goiko ziurtagiriak zure playbook direktorioan egon beharko lukete eta zerbitzarian kopiatu eta apache-n konfiguratuko dira.

Zerbitzarian dauden ziurtagiriak erabili nahi badituzu, instalatu httpd_copy_ssl_files: false eta eman aldagai hauek:

    # 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 aukerakoa da eta ezarri gabe utzi behar da kate-fitxategia pertsonalizatu nahi ez baduzu

    httpd_default_admin_email: "[email protected]"

Ezarri administratzailearen helbide elektroniko lehenetsia

LDAP konfigurazioa

LDAP konexioak eta segurtasun eremua desgaituta daude lehenespenez

    nexus_ldap_realm: false
    ldap_connections: []

LDAP konexioak, elementu bakoitzak honela dauka:

    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

Autentifikazio anonimorako LDAP konfigurazio adibidea (lotura anonimoa), hau ere "gutxieneko" konfigurazioa da:

    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'

LDAP konfigurazio adibidea autentifikazio sinplerako (DSA kontua erabiliz):

    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

LDAP konfigurazio adibidea autentifikazio sinplerako (DSA kontua erabiliz) + rol gisa mapatutako taldeak:

    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

LDAP konfigurazio adibidea autentifikazio sinplerako (DSA kontua erabiliz) + rol gisa dinamikoki mapatutako taldeak:

    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'

Pribilegioa

    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

Zerrenda pribilegioak ezarpenetarako. Begiratu dokumentazioa eta GUI-a pribilegio motaren arabera zein aldagai ezarri behar diren egiaztatzeko.

Elementu hauek balio lehenetsi hauekin konbinatzen dira:

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

Rolak (barneko Nexus esan nahi du)

    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

Zerrenda rolak ezarpenetarako.

Kide

    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

Nexus-en sortzeko tokiko erabiltzaile/kontuen zerrenda (LDAP ez direnak).

Nexus-en sortu beharreko tokiko (LDAP ez diren) erabiltzaile/kontuen zerrenda.

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

Erabiltzaile/rolen Ldap mapaketa. Estatu absent lehendik dagoen erabiltzaile bati rolak kenduko dizkio jada existitzen bada.
Ldap erabiltzaileak ez dira ezabatzen. Existitzen ez den erabiltzaile bati rol bat ezartzen saiatzeak errore bat eragingo du.

Eduki-hautatzaileak

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

Eduki-hautatzaileari buruzko informazio gehiago lortzeko, ikus Dokumentazioa.

Eduki-hautatzailea erabiltzeko, gehitu pribilegio berri bat honekin type: repository-content-selector eta garrantzitsuakcontentSelector

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

Blob-dendak eta biltegiak

    nexus_delete_default_repos: false

Ezabatu biltegiak nexus install hasierako konfigurazio lehenetsitik. Urrats hau lehen instalatzean bakarrik exekutatzen da (noiz nexus_data_dir hutsik detektatu da).

Nexus-en lehenetsitako konfigurazio lehenetsitik biltegiak kentzen. Urrats hau lehen instalazioan bakarrik egiten da (noiz nexus_data_dir hutsik).

    nexus_delete_default_blobstore: false

Ezabatu blob denda lehenetsia nexus instalatzeko hasierako konfigurazio lehenetsitik. Hau bada bakarrik egin daiteke nexus_delete_default_repos: true eta konfiguratutako biltegi guztiek (ikus behean) esplizitua dute blob_store: custom. Urrats hau lehen instalatzean bakarrik exekutatzen da (noiz nexus_data_dir hutsik detektatu da).

Blob biltegiratzea (artefaktu bitarrak) lehenespenez desgaituta dago hasierako konfiguraziotik. Blob biltegiratzea (artefaktu bitarrak) kentzeko, desaktibatu nexus_delete_default_repos: true. Urrats hau lehen instalazioan bakarrik egiten da (noiz nexus_data_dir hutsik).

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

Blob-dendak sortzeko. Blob dendaren bide bat eta biltegiko blob denda bat ezin dira eguneratu hasierako sorreraren ondoren (hemengo edozein eguneraketari ez ikusi egingo zaio berriro hornitzean).

S3-n blobstore konfiguratzea erosotasun gisa eskaintzen da eta ez da travis-en egiten ditugun proba automatikoen parte. Kontuan izan S3-n gordetzea AWS-en inplementatutako instantzietarako soilik gomendatzen dela.

Sorkuntza Blob-dendak. Biltegiratze-bidea eta biltegiratze-biltegia ezin dira eguneratu hasierako sorreraren ondoren (hemengo edozein eguneraketa ez ikusi egingo da berriro instalatzen denean).

S3-n blob biltegiratzea erosotasun gisa eskaintzen da. Kontuan izan S3 biltegiratzea AWS-en inplementatutako instantzietarako soilik gomendatzen dela.

    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

Goian konfigurazio adibide bat dago proxy zerbitzaria Maven.

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

Maven ostatatutako biltegiak konfigurazioa. Cache-konfigurazio negatiboa hautazkoa da eta lehenetsita egongo dira goiko balioak baztertzen badira.

konfigurazioa ostatatutako biltegiak Maven. Cache-ko konfigurazio negatiboa (-1) hautazkoa da eta lehenetsita egongo da goiko balioak zehaztu ezean.

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

konfigurazioa talde Maven.

Hiru biltegi motak balio lehenetsi hauekin konbinatzen dira:

    _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

Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS eta yum biltegi motak:
ikusi defaults/main.yml aukera hauetarako:

Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS eta yum biltegiak lehenespenez desgaituta daude:
Ikusi defaults/main.yml aukera hauetarako:

      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

Kontuan izan, agian, segurtasun-esparru jakin batzuk gaitu beharko dituzula maven ez den beste biltegi mota batzuk erabili nahi badituzu. Hau faltsua da lehenespenez

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

Urruneko Erabiltzaileen Erreinua erabiliz ere gaitu daiteke

nexus_rut_auth_realm: true

eta izenburua pertsonalizatu daiteke definituz

nexus_rut_auth_header: "CUSTOM_HEADER"

Programatutako zereginak

    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"

Programatutako zereginak ezarpenetarako. typeId eta zeregin zehatzataskProperties/booleanTaskProperties bai asma dezakezu:

  • Java motako hierarkiatik org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • zure arakatzailean HTML ataza sortzeko formularioa egiaztatzea
  • ataza bat eskuz konfiguratzean arakatzailean AJAX eskaerak ikustetik.

Zereginen propietateak yaml bloke egokian deklaratu behar dira motaren arabera:

  • taskProperties Kateen propietate guztietarako (hau da, biltegiaren izenak, biltegiaren izenak, denbora-aldiak...).
  • booleanTaskProperties propietate logiko guztietarako (hau da, batez ere, nexus sortzeko atazaren GUI-ko kontrol-laukiak).

Backups

      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)

Babeskopia ez da konfiguratuko aldatu arte nexus_backup_configure Π² true.
Kasu honetan, programatutako script-ataza Nexus-en exekutatzeko konfiguratuko da
urtean zehaztutako tartean nexus_backup_cron (lehenetsita 21:00 egunero).
Ikusi [zeregin honetarako groovy txantiloia](templates/backup.groovy.j2) xehetasunetarako.
Programatutako zeregin hau besteengandik independentea da nexus_scheduled_taskszuk
iragarri zure liburuko liburuan.

Babeskopia biratu/ezabatu nahi baduzu, instalatu nexus_backup_rotate: true eta konfiguratu erabilita gorde nahi dituzun babeskopien kopurua nexus_backup_keep_rotations (lehenetsia 4).

Errotazioa erabiltzean, babeskopia-prozesuan diskoko espazio gehigarria aurreztu nahi baduzu,
Instalatu dezakezu nexus_backup_rotate_first: true. Honek babeskopia baino lehen biraketa/ezabatzea konfiguratuko du. Lehenespenez, biraketa babeskopia sortu ondoren gertatzen da. Kontuan izan kasu honetan babeskopia zaharrak direla
uneko babeskopia egin aurretik ezabatuko da.

Berreskuratzeko prozedura

Exekutatu playbook parametroarekin -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(adibidez, 2017-12-17-21-00-00 17ko abenduaren 2017rako 21:00etan

Lotura kentzen

Abisua: honek zure uneko datuak guztiz ezabatuko ditu. Ziurtatu segurtasun kopia bat lehenago egiten duzula beharrezkoa bada

Erabili aldagai bat nexus_purgehutsetik berrabiarazi eta datu guztiak kenduta nexus instantzia berriro instalatu behar baduzu.

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

Aldatu administratzailearen pasahitza lehenengo instalazioaren ondoren

    nexus_default_admin_password: 'admin123'

Hau ez da aldatu behar zure jolas-liburuan. Aldagai hau lehen aldiz instalatzen denean Nexus administratzailearen pasahitz lehenetsiarekin betetzen da eta administratzaile pasahitza honela alda dezakegula ziurtatzen du. nexus_admin_password.

Lehen instalazioaren ondoren administratzailearen pasahitza aldatu nahi baduzu, aldi baterako pasahitz zaharrera alda dezakezu komando lerrotik. Aldaketaren ostean nexus_admin_password zure playbook-en exekutatu dezakezu:

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

Telegram kanala Nexus Sonatype-n: https://t.me/ru_nexus_sonatype

Erregistratutako erabiltzaileek soilik parte hartu dezakete inkestan. Hasi saioa, mesedez.

Zein artefaktu-biltegi erabiltzen dituzu?

  • Sonatype Nexus doakoa da

  • Sonatype Nexus ordainduta

  • Artifactory doakoa da

  • Artifactory ordainduta

  • Harbor

  • Pulp

9 erabiltzailek eman dute botoa. 3 erabiltzaile abstenitu ziren.

Iturria: www.habr.com

Gehitu iruzkin berria