Ynstallearje en konfigurearje Nexus Sonatype mei help fan de ynfrastruktuer as koade oanpak

Sonatype Nexus is in yntegreare platfoarm wêrmei't ûntwikkelders Java (Maven) ôfhinklikens, Docker, Python, Ruby, NPM, Bower-ôfbyldings, RPM-pakketten, gitlfs, Apt, Go, Nuget kinne proxy, opslaan en beheare en har softwarefeiligens ferspriede.

Wêrom hawwe jo Sonatype Nexus nedich?

  • Foar it bewarjen fan privee artefakten;
  • Foar caching artefakten dy't wurde ynladen fan it ynternet;

Artefakten stipe yn it basispakket Sonatype Nexus:

  • Java, Maven (jar)
  • Havenarbeider
  • Python (pip)
  • Ruby (gem)
  • NPM
  • Bowers
  • Yum (rpm)
  • gitlfs
  • Rau
  • Apt (deb)
  • Go
  • Nuget

Gemeentlike stipe artefakten:

  • komponist
  • Conan
  • CPAN
  • ELPA
  • Roer
  • P2
  • R

Ynstallearje Sonatype Nexus mei help fan https://github.com/ansible-ThoTeam/nexus3-oss

easken

  • Lês oer it brûken fan ansible op it ynternet.
  • Ynstallearje ansible pip install ansible op it wurkstasjon dêr't it playbook rint.
  • Ynstallearje geerlingguy.java op it wurkstasjon dêr't it playbook rint.
  • Ynstallearje geerlingguy.apache op it wurkstasjon dêr't it playbook rint.
  • Dizze rol is hifke op CentOS 7, Ubuntu Xenial (16.04) en Bionic (18.04), Debian Jessie en Stretch
  • jmespath De bibleteek moat ynstalleare wurde op it wurkstasjon dêr't it playbook rint. Ynstallearje: sudo pip install -r requirements.txt
  • Bewarje it playbook-bestân (foarbyld hjirûnder) yn nexus.yml-bestân
  • Run nexus ynstallaasje ansible-playbook -i host nexus.yml

Foarbyld ansible-playbook foar it ynstallearjen fan nexus sûnder LDAP mei Maven (java), Docker, Python, Ruby, NPM, Bower, RPM en gitlfs repositories.

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

Screenshots:

Ynstallearje en konfigurearje Nexus Sonatype mei help fan de ynfrastruktuer as koade oanpak

Ynstallearje en konfigurearje Nexus Sonatype mei help fan de ynfrastruktuer as koade oanpak

Fariabele rollen

Rol Fariabelen

Fariabelen mei standertwearden (sjoch default/main.yml):

Algemiene fariabelen

    nexus_version: ''
    nexus_timezone: 'UTC'

Standert sil de rol de lêste beskikbere ferzje fan Nexus ynstallearje. Jo kinne de ferzje reparearje troch de fariabele te feroarjen nexus_version. Sjoch beskikbere ferzjes op https://www.sonatype.com/download-oss-sonatype.

As jo ​​feroarje nei in nijere ferzje, sil de rol besykje jo Nexus-ynstallaasje te aktualisearjen.

As jo ​​​​in âldere ferzje fan Nexus brûke dan de lêste, moatte jo derfoar soargje dat jo gjin funksjes brûke dy't net beskikber binne yn 'e ynstallearre release (bygelyks, hosting fan yum-repositories is beskikber foar nexus grutter dan 3.8.0, git lfs repo foar nexus grutter dan 3.3.0 ensfh.)

nexus timezone is de namme fan 'e Java-tiidsône, dy't nuttich kin wêze yn kombinaasje mei de folgjende cron-útdrukkingen foar nexus_scheduled taken.

Nexus-poarte en kontekstpaad

    nexus_default_port: 8081
    nexus_default_context_path: '/'

De poarte en kontekstpaad fan it Java-ferbiningsproses. nexus_default_context_path moat in slash befetsje as it ynsteld is, bygelyks: nexus_default_context_path: '/nexus/'.

Nexus OS brûker en groep

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

De brûker en groep dy't brûkt wurde om Nexus-bestannen te besit en de tsjinst út te fieren, wurde makke troch de rol as ien ûntbrekt.

    nexus_os_user_home_dir: '/home/nexus'

Tastean it feroarjen fan de standert thúsmap foar de nexus-brûker

Nexus eksimplaar mappen

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

Nexus Katalogussen.

  • nexus_installation_dir befettet ynstallearre útfierbere triemmen
  • nexus_data_dir befettet alle konfiguraasje, repositories en ynladen artefakten. Oanpaste blobstore paden nexus_data_dir kin oanpast wurde, sjoch hjirûnder nexus_blobstores.
  • nexus_tmp_dir befettet alle tydlike triemmen. It standertpaad foar redhat is ferpleatst fan /tmp om potinsjele problemen te oerwinnen mei automatyske reinigingsprosedueres. Sjoch #168.

Konfigurearje Nexus JVM Unthâld Gebrûk

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

Dit binne de standertynstellingen foar Nexus. Graach net feroarje dizze wearden As jo ​​hawwe net lêzen nexus systeem easken ûnthâld seksje en net begripe wat se dogge.

As twadde warskôging, hjir is in úttreksel út it boppesteande dokumint:

It is net oan te rieden om it JVM-heapûnthâld te ferheegjen boppe de oanrikkemandearre wearden yn in besykjen om prestaasjes te ferbetterjen. Dit kin eins it tsjinoerstelde effekt hawwe, wat resulteart yn ûnnedich wurk foar it bestjoeringssysteem.

Administrator wachtwurd

    nexus_admin_password: 'changeme'

It "admin" akkount wachtwurd foar opset. Dit wurket allinnich op de earste standert ynstallaasje. Sjoch asjebleaft [Admin-wachtwurd feroarje nei earste ynstallaasje] (# wizigje-admin-wachtwurd-nei-earste-ynstallaasje) as jo it letter wizigje wolle mei in rol.

It wurdt sterk oanrikkemandearre om jo wachtwurd net yn dúdlike tekst op te slaan yn it playbook, mar om [ansible-vault-fersifering] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (sawol ynline as yn in apart bestân laden mei bygelyks include_vars)

Standert anonime tagong

    nexus_anonymous_access: false

Anonime tagong is standert útskeakele. Lês mear oer anonym tagong.

Publike hostnamme

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

De folslein kwalifisearre domeinnamme en skema (https of http) wêryn de Nexus-eksimplaar beskikber sil wêze foar har kliïnten.

API-tagong foar dizze 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 }}"

Dizze fariabelen kontrolearje hoe't de rol ferbûn is mei de Nexus API foar foarsjenning.
Allinich foar avansearre brûkers. Jo wolle dizze standertynstellingen wierskynlik net feroarje

It ynstellen fan in reverse proxy

    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

Ynstallearje SSL Reverse Proxy.
Om dit te dwaan moatte jo httpd ynstallearje. Opmerking: wannear foar httpd_setup_enable set weardetrue, nexus kontakten 127.0.0.1:8081, dus net direkt tagonklik fia HTTP-poarte 8081 fanút it eksterne IP-adres.

De standert brûkte hostnamme is nexus_public_hostname. As jo ​​nedich hawwe ferskillende nammen foar guon reden, kinne jo ynstelle httpd_server_name mei in oare betsjutting.

С httpd_copy_ssl_files: true (standert) de boppesteande sertifikaten moatte bestean yn jo playbook map en wurde kopiearre nei de tsjinner en konfigurearre yn apache.

As jo ​​besteande sertifikaten op 'e tsjinner brûke wolle, ynstallearje httpd_copy_ssl_files: false en jouwe de folgjende fariabelen:

    # 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 is opsjoneel en moat net ynsteld wurde as jo de kettingbestân net oanpasse wolle

    httpd_default_admin_email: "[email protected]"

Stel standert admin e-mailadres yn

LDAP konfiguraasje

LDAP-ferbiningen en feiligensryk binne standert útskeakele

    nexus_ldap_realm: false
    ldap_connections: []

LDAP ferbinings, elk elemint sjocht der sa út:

    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

Foarbyld LDAP-konfiguraasje foar anonime autentikaasje (anonime bining), dit is ek in "minimale" konfiguraasje:

    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'

Foarbyld LDAP-konfiguraasje foar ienfâldige autentikaasje (mei DSA-akkount):

    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

Foarbyld LDAP-konfiguraasje foar ienfâldige autentikaasje (mei DSA-akkount) + groepen yn kaart brocht as rollen:

    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

Foarbyld LDAP-konfiguraasje foar ienfâldige autentikaasje (mei DSA-akkount) + groepen dynamysk yn kaart brocht as rollen:

    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'

Privileezje

    nexus_privileges:
      - name: all-repos-read # used as key to update a privilege
        # type: <one of application, repository-admin, repository-content-selector, repository-view, script or wildcard>
        description: 'Read & Browse access to all repos'
        repository: '*'
        actions: # can be add, browse, create, delete, edit, read or  * (all)
          - read
          - browse
        # pattern: pattern
        # domain: domain
        # script_name: name

List fan privileezjes foar ynstellings. Sjoch nei de dokumintaasje en GUI om te kontrolearjen hokker fariabelen moatte wurde ynsteld ôfhinklik fan it privileezjetype.

Dizze eleminten wurde kombinearre mei de folgjende standertwearden:

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

Rollen (binnen Nexus dit betsjut)

    nexus_roles:
      - id: Developpers # can map to a LDAP group id, also used as a key to update a role
        name: developers
        description: All developers
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # references to other role names

List fan rollen foar ynstellings.

Brûkers

    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

Lokale (net-LDAP) brûkers / akkountslist om te meitsjen yn nexus.

List fan lokale (net-LDAP) brûkers/akkounts om te meitsjen yn Nexus.

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

Ldap mapping fan brûkers / rollen. Steat absent sil rollen fuortsmite fan in besteande brûker as ien al bestiet.
Ldap-brûkers wurde net wiske. Besykje in rol yn te stellen foar in net-besteande brûker sil resultearje yn in flater.

Ynhâld selectors

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

Sjoch foar mear ynformaasje oer de ynhâldselektor Dokumintaasje.

Om de ynhâldselektor te brûken, foegje in nij privileezje ta mei type: repository-content-selector en relevantcontentSelector

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

Blobstores en repositories

    nexus_delete_default_repos: false

Wiskje de repositories fan 'e nexus ynstallearje initial standert konfiguraasje. Dizze stap wurdt allinich útfierd by earste ynstallaasje (wannear nexus_data_dir is leech fûn).

Repositories fuortsmite fan de standert standertkonfiguraasje foar Nexus. Dizze stap wurdt allinich útfierd tidens de earste ynstallaasje (wannear nexus_data_dir leech).

    nexus_delete_default_blobstore: false

Wiskje de standert blobstore fan 'e nexus ynstallearje initial standert konfiguraasje. Dit kin dien wurde allinnich as nexus_delete_default_repos: true en alle ynstelde repositories (sjoch hjirûnder) hawwe in eksplisite blob_store: custom. Dizze stap wurdt allinich útfierd by earste ynstallaasje (wannear nexus_data_dir is leech fûn).

It fuortsmiten fan blob-opslach (binêre artefakten) is standert útskeakele fanút de earste konfiguraasje. Om blob-opslach (binêre artefakten) te ferwiderjen, útsette nexus_delete_default_repos: true. Dizze stap wurdt allinich útfierd tidens de earste ynstallaasje (wannear nexus_data_dir leech).

    nexus_blobstores: []
    # example blobstore item :
    # - name: separate-storage
    #   type: file
    #   path: /mnt/custom/path
    # - name: s3-blobstore
    #   type: S3
    #   config:
    #     bucket: s3-blobstore
    #     accessKeyId: "{{ VAULT_ENCRYPTED_KEY_ID }}"
    #     secretAccessKey: "{{ VAULT_ENCRYPTED_ACCESS_KEY }}"

Blobstores meitsje. In blobstore-paad en in repository blobstore kinne net bywurke wurde nei inisjele oanmeitsjen (elke fernijing hjir sil wurde negearre by re-provisionning).

It konfigurearjen fan blobstore op S3 wurdt levere as gemak en is gjin diel fan 'e automatisearre testen dy't wy op travis útfiere. Tink derom dat opslaan op S3 allinich wurdt oanrikkemandearre foar gefallen ynset op AWS.

Kreaasje Blobstores. It opslachpaad en opslachbewarplak kinne net bywurke wurde nei de earste oanmeitsjen (elke fernijing hjir sil wurde negearre as se opnij ynstalleare).

It ynstellen fan blob-opslach op S3 wurdt foarsjoen as gemak. Tink derom dat S3-opslach allinich wurdt oanrikkemandearre foar gefallen ynset op AWS.

    nexus_repos_maven_proxy:
      - name: central
        remote_url: 'https://repo1.maven.org/maven2/'
        layout_policy: permissive
        # maximum_component_age: -1
        # maximum_metadata_age: 1440
        # negative_cache_enabled: true
        # negative_cache_ttl: 1440
      - name: jboss
        remote_url: 'https://repository.jboss.org/nexus/content/groups/public-jboss/'
        # maximum_component_age: -1
        # maximum_metadata_age: 1440
        # negative_cache_enabled: true
        # negative_cache_ttl: 1440
    # example with a login/password :
    # - name: secret-remote-repo
    #   remote_url: 'https://company.com/repo/secure/private/go/away'
    #   remote_username: 'username'
    #   remote_password: 'secret'
    #   # maximum_component_age: -1
    #   # maximum_metadata_age: 1440
    #   # negative_cache_enabled: true
    #   # negative_cache_ttl: 1440

Boppe is in foarbyld konfiguraasje proxy tsjinner Maven.

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

Maven hosted repositories konfiguraasje. Negative cache-konfiguraasje is opsjoneel en sil standert wurde op de boppesteande wearden as weglitten.

Konfiguraasje hosted repositories Maven. De negative cache-konfiguraasje (-1) is opsjoneel en sil standert wurde op de boppesteande wearden as net oantsjutte.

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

Konfiguraasje groepen Maven.

Alle trije repositorytypen wurde kombineare mei de folgjende standertwearden:

    _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 en yum repository types:
sjen defaults/main.yml foar dizze opsjes:

Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS en yum repositories binne standert útskeakele:
Sjoch defaults/main.yml foar dizze opsjes:

      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

Tink derom dat jo miskien bepaalde befeiligingsbereiken ynskeakelje moatte as jo oare soarten repositories wolle brûke as maven. Dit is standert falsk

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

Remote User Realm kin ek ynskeakele wurde mei

nexus_rut_auth_realm: true

en de titel kin wurde oanpast troch te definiearjen

nexus_rut_auth_header: "CUSTOM_HEADER"

Plande taken

    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"

Plande taken foar ynstellings. typeId en taak spesifyktaskProperties/booleanTaskProperties jo kinne beide riede:

  • fan 'e Java-typehierarchy org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • kontrolearje it HTML-taak oanmeitsjen formulier yn jo blêder
  • fan it besjen fan AJAX-oanfragen yn 'e browser by it manuell ynstellen fan in taak.

Taakeigenskippen moatte wurde ferklearre yn it juste yaml-blok ôfhinklik fan har type:

  • taskProperties foar alle tekenrige eigenskippen (dws repository nammen, repository nammen, tiid perioaden ...).
  • booleanTaskProperties foar alle logyske eigenskippen (d.w.s. benammen karfakjes yn 'e GUI fan' e nexus oanmeitsjen taak).

Reservekopy

      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)

Reservekopy sil net konfigurearre wurde oant jo wikselje nexus_backup_configure в true.
Yn dit gefal sil de plande skripttaak ynsteld wurde om op Nexus te rinnen
op it ynterval oantsjutte yn nexus_backup_cron (standert 21:00 eltse dei).
Sjoch [groovy sjabloan foar dizze taak] (templates/backup.groovy.j2) foar details.
Dizze plande taak is ûnôfhinklik fan oaren nexus_scheduled_tasksdy dy
oankundigje yn jo playbook.

As jo ​​backups wolle rotearje / wiskje, ynstallearje dan nexus_backup_rotate: true en konfigurearje it oantal backups dat jo wolle bewarje mei help nexus_backup_keep_rotations (standert 4).

As jo ​​​​rotaasje brûke, as jo ekstra skiifromte wolle besparje tidens it backupproses,
Jo kinne ynstallearje nexus_backup_rotate_first: true. Dit sil pre-rotaasje / wiskje foar reservekopy ynstelle. Standert komt rotaasje foar neidat in reservekopy makke is. Tink derom dat yn dit gefal de âlde backups
sil wiske wurde foardat de aktuele reservekopy wurdt makke.

Recovery proseduere

Run playbook mei parameter -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(bygelyks 2017-12-17-21-00-00 foar 17 desimber 2017 om 21:00 oere

Ferwiderje nexus

Warskôging: Dit sil jo hjoeddeistige gegevens folslein wiskje. Soargje derfoar dat jo earder in reservekopy meitsje as it nedich is

Brûk in fariabele nexus_purgeas jo fanôf it begjin opnij begjinne moatte en de nexus-eksimplaar opnij ynstallearje mei alle gegevens fuortsmiten.

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

Feroarje administrator wachtwurd nei earste ynstallaasje

    nexus_default_admin_password: 'admin123'

Dit moat net feroare wurde yn jo playbook. Dizze fariabele wurdt befolke mei it standert Nexus admin wachtwurd by it earst ynstalleare en soarget derfoar dat wy it admin wachtwurd feroarje kinne yn nexus_admin_password.

As jo ​​​​it administratorwachtwurd wizigje wolle nei de earste ynstallaasje, kinne jo it tydlik feroarje yn it âlde wachtwurd fan 'e kommandorigel. Nei feroaring nexus_admin_password yn jo playbook kinne jo útfiere:

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

Telegramkanaal op Nexus Sonatype: https://t.me/ru_nexus_sonatype

Allinnich registrearre brûkers kinne meidwaan oan 'e enkête. Ynlogge, asjebleaft.

Hokker artefaktrepositories brûke jo?

  • Sonatype Nexus is fergees

  • Sonatype Nexus betelle

  • Artifactory is fergees

  • Artifactory betelle

  • Haven

  • Pulp

9 brûkers stimden. 3 brûkers ûntholden har.

Boarne: www.habr.com

Add a comment