Instalace a konfigurace Nexus Sonatype pomocí přístupu infrastructure as code

Sonatype Nexus – integrovaná platforma, která umožňuje vývojářům proxy, ukládat a spravovat závislosti Java (Maven), obrazy Docker, Python, Ruby, NPM, Bower, RPM balíčky, gitlfs, Apt, Go, Nuget a také distribuovat svůj software.

Proč je Sonatype Nexus potřebný?

  • Pro ukládání soukromých artefaktů;
  • Pro ukládání artefaktů, které se stahují z internetu;

Artefakty podporované v základním balení Sonatype Nexus:

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

Artefakty podporované komunitou:

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

Instalace Sonatype Nexus pomocí https://github.com/ansible-ThoTeam/nexus3-oss

Požadavky

  • Přečtěte si o použití ansible na internetu.
  • Nainstalujte ansible pip install ansible na pracovní stanici, kde bude playbook spuštěn.
  • Nainstalujte geerlingguy.java na pracovní stanici, kde bude playbook spuštěn.
  • Nainstalujte geerlingguy.apache na pracovní stanici, kde bude playbook spuštěn.
  • Tato role byla testována na CentOS 7, Ubuntu Xenial (16.04) a Bionic (18.04), Debian Jessie a Stretch
  • jmespath knihovna musí být nainstalována na pracovní stanici, kde bude playbook spuštěn. Pro instalaci spusťte sudo pip install -r requirements.txt
  • Uložte soubor playbook (příklad níže) do souboru nexus.yml
  • Spusťte instalaci nexus ansible-playbook -i host nexus.yml

Příklad ansible-playbook pro instalaci nexus bez LDAP s Maven (java), Docker, Python, Ruby, NPM, Bower, RPM a gitlfs.

---
- name: Nexus
  hosts: nexus
  become: yes

  vars:
    nexus_timezone: 'Asie/Omsk'
    nexus_admin_password: "admin123"
    nexus_public_hostname: 'apatsev-nexus-playbook'
    httpd_setup_enable: false
    nexus_privileges:
      - name: all-repos-read
        description: 'Přístup k procházení a čtení všech repozitářů'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Nasazení do company-project'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # odpovídá skupině LDAP
        name: developers
        description: Všichni vývojáři
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # používá se jako klíč pro aktualizaci
        first_name: Jenkins
        last_name: CI
        email: support@company.com
        password: "s3cr3t"
        roles:
          - Developpers # ID role zde
    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. Změňte nexus_config_yum na true pro vytvoření yum repozitáře
    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. Změňte nexus_config_npm na true pro vytvoření npm repozitáře
    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. Změňte nexus_config_docker na true pro vytvoření docker repozitáře
    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. Změňte nexus_config_bower na true pro vytvoření bower repozitáře
    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. Změňte nexus_config_pypi na true pro vytvoření pypi repozitáře
    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. Změňte nexus_config_rubygems na true pro vytvoření rubygems repozitáře
    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. Změňte nexus_config_gitlfs na true pro vytvoření gitlfs repozitáře
    nexus_config_gitlfs: true
    nexus_repos_gitlfs_hosted:
      - name: gitlfs-hosted

  roles:
    - { role: geerlingguy.java }
    # Debian/Ubuntu pouze
    # - { 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 pouze
    - { 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'] }

Snímky obrazovky:

Instalace a konfigurace Nexus Sonatype pomocí přístupu infrastructure as code

Instalace a konfigurace Nexus Sonatype pomocí přístupu infrastructure as code

Proměnné rolí

Role Variables

Proměnné s výchozími hodnotami (viz default/main.yml):

Obecné proměnné

    nexus_version: ''
    nexus_timezone: 'UTC'

Výchozí role nastaví poslední dostupnou verzi Nexus. Můžete opravit verzi změnou proměnné nexus_version. Zobrazte dostupné verze na https://www.sonatype.com/download-oss-sonatype.

Pokud změníte verzi na novější, pokusí se role aktualizovat vaši nainstalovanou instanci Nexus.

Pokud používáte starší verzi Nexus než poslední, měli byste se ujistit, že nepoužíváte funkce, které nejsou dostupné ve vaší nainstalované verzi (např. hosting yum repozitářů je dostupný pro Nexus vyšší než 3.8.0, git lfs repo pro Nexus vyšší než 3.3.0 atd.)

nexus timezone — to je název časového pásma Java, který může být užitečný spolu s níže uvedenými výrazy cron pro nexus_scheduled tasks.

Port Nexus a kontextová cesta

    nexus_default_port: 8081
    nexus_default_context_path: '/'

Port a kontextová cesta procesu Java spojení. nexus_default_context_path musí obsahovat lomítko, když je nastavena, např.: nexus_default_context_path: '/nexus/'.

Uživatel a skupina OS Nexus

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Uživatel a skupina používané pro vlastnictví souborů Nexus a spuštění služby budou vytvořeny rolí, pokud neexistují.

    nexus_os_user_home_dir: '/home/nexus'

Povolit změnu výchozího domácího adresáře pro uživatele nexus

Adresáře instancí Nexus

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

Adresáře Nexus.

  • nexus_installation_dir obsahuje nainstalované spustitelné soubory
  • nexus_data_dir obsahuje veškerou konfiguraci, repozitáře a stažené artefakty. Vlastní cesty blobstores nexus_data_dir mohou být nastaveny, viz níže nexus_blobstores.
  • nexus_tmp_dir obsahuje všechny dočasné soubory. Výchozí cesta pro RedHat byla přesunuta z /tmp kvůli překonání potenciálních problémů s automatickými procedurami čištění. Viz #168.

Nastavení užití paměti Nexus JVM

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

To jsou výchozí nastavení pro Nexus. Prosím, neměňte tyto hodnoty Pokud jste nepřečetli sekci paměťových systémových požadavků nexus a nechápete, co dělají.

Jako druhé varování, zde je úryvek z výše uvedeného dokumentu:

Nedoporučuje se zvyšovat paměť JVM heap nad doporučené hodnoty ve snaze zvýšit výkon. To může ve skutečnosti mít opačný efekt a vést k nadměrnému zatížení operačního systému.

Heslo administrátora

    nexus_admin_password: 'changeme'

Heslo účtu „admin“ pro nastavení. To funguje pouze při první instalaci podle výchozího nastavení.. Pro změnu hesla později pomocí role, prosím, viz [Změnit heslo administrátora po první instalaci](# change-admin-password-after-first-install).

Důrazně se nedoporučuje uchovávat své heslo v otevřeném textu v playbooku a použít [šifrování ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (buď integrované nebo v samostatném souboru, načteném například pomocí include_vars).

Anonymní přístup je ve výchozím nastavení

    nexus_anonymous_access: false

Anonymní přístup je ve výchozím nastavení vypnut. Více o anonymním přístupu.

Veřejné jméno hostitele

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Úplné doménové jméno a schéma (https nebo http), podle kterého bude instance Nexus dostupná pro své klienty.

API přístup pro tuto roli

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

Tyto proměnné řídí, jak se role připojuje k API Nexus pro poskytování.
Pouze pro pokročilé uživatele. S největší pravděpodobností nechcete měnit tyto výchozí nastavení.

Nastavení reverzního proxy

    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

Nainstalujte Reverzní proxy server SSL.
K tomu je potřeba nainstalovat httpd. Poznámka: když je httpd_setup_enable nastaveno natrue, nexus se propojí s 127.0.0.1:8081, což znamená ne být přímo přístupný přes HTTP port 8081 z externího IP adresy.

Výchozí jméno hostitele je nexus_public_hostname. Pokud potřebujete různá jména z jakéhokoli důvodu, můžete nastavit httpd_server_name s jinou hodnotou.

S httpd_copy_ssl_files: true (výchozí) výše uvedené certifikáty musí existovat ve vaší složce playbook a budou zkopírovány na server a nastaveny v apache.

Pokud chcete použít existující certifikáty na serveru, nastavte httpd_copy_ssl_files: false a poskytněte následující proměnné:

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

umístění_souboru_ssl_cert_chain_file_httpd je volitelný a měl by být ponechán nezvolený, pokud nechcete konfigurovat soubor řetězce

    httpd_default_admin_email: "admin@example.com"

Nastavit výchozí e-mailovou adresu administrátora

Konfigurace LDAP

Spojení LDAP a výchozí bezpečnostní oblast jsou zakázány

    nexus_ldap_realm: false
    ldap_connections: []

Spojení LDAP, každý prvek vypadá takto:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'My Company LDAP' # používá se jako klíč pro aktualizaci konfigurace ldap
        ldap_protocol: 'ldaps' # ldap nebo ldaps
        ldap_hostname: 'ldap.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false # Zda používat certifikáty v úložišti důvěry nexus
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_auth: 'none' # nebo simple
        ldap_auth_username: 'username' # pokud auth = simple
        ldap_auth_password: 'password' # pokud auth = simple
        ldap_user_base_dn: 'ou=users'
        ldap_user_filter: '(cn=*)' # (volitelné)
        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

Příklad konfigurace LDAP pro anonymní autentizaci (anonymní vazba), to je také "minimální" konfigurace:

    nexus_ldap_realm: true
    ldap_connection:
      - ldap_name: 'Nejjednodušší LDAP konfigurace'
        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'

Příklad konfigurace LDAP pro jednoduchou autentizaci (s použitím DSA účtu):

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP konfigurace s DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # lépe uchovávejte hesla v trezoru 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_user_subtree: false

Příklad konfigurace LDAP pro jednoduchou autentizaci (s použitím DSA účtu) + skupiny mapované jako role:

    nexus_ldap_realm: true
    ldap_connections
      - ldap_name: 'Konfigurace LDAP s DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # je lepší uchovávat hesla v ansible trezoru
        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

Příklad konfigurace LDAP pro jednoduchou autentizaci (použití účtu DSA) + skupiny dynamicky mapované jako role:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Konfigurace LDAP s DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # je lepší uchovávat hesla v ansible trezoru
        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'

Oprávnění

    nexus_privileges:
      - name: all-repos-read # použito jako klíč pro aktualizaci oprávnění
        # type: <jeden z application, repository-admin, repository-content-selector, repository-view, script nebo wildcard>
        description: 'Přístup pro čtení a procházení ke všem repo'
        repository: '*'
        actions: # může být add, browse, create, delete, edit, read nebo * (všechno)
          - read
          - browse
        # pattern: pattern
        # domain: domain
        # script_name: name

Seznam oprávnění pro konfiguraci. Podívejte se na dokumentaci a grafické uživatelské rozhraní, abyste zkontrolovali, které proměnné by měly být nastaveny v závislosti na typu oprávnění.

Tyto prvky se kombinují s následujícími výchozími hodnotami:

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

Role (ve smyslu uvnitř Nexus)

    nexus_roles:
      - id: Developpers # může mapovat na ID skupiny LDAP, také použito jako klíč pro aktualizaci role
        name: developers
        description: Všichni vývojáři
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # odkazy na názvy dalších rolí

Seznam rolí pro konfiguraci.

Uživatelé

    nexus_local_users: []
      # - username: jenkins # použito jako klíč pro aktualizaci
      #   state: present # výchozí hodnota, pokud je vynecháno, použijte 'absent' k odstranění uživatele
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - developers # ID role

Místní (ne-LDAP) uživatelé/účty seznam pro vytvoření v nexus.

Seznam místních (ne LDAP) uživatelů/účtů pro vytvoření v Nexus.

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

Mapování uživatelů/rolí LDAP. Stav absent odebere role ze stávajícího uživatele, pokud již existuje.
Uživatelé LDAP nejsou odstraňováni. Pokus o přiřazení role k neexistujícímu uživateli povede k chybě.

Selektory obsahu

  nexus_content_selectors:
  - name: docker-login
    description: Selektor pro privilegium přihlášení do dockera
    search_expression: format=="docker" and path=~"/v2/"

Pro více informací o selektoru obsahu viz. Dokumentace.

Abyste mohli použít selektor obsahu, přidejte novou privilegii s type: repository-content-selector a odpovídajícícontentSelector

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Přihlášení do Docker registru'
  repository: '*'
  actions:
  - read
  - browse

Blobstores a repozitáře

    nexus_delete_default_repos: false

Odstraňte repozitáře z výchozí konfigurace instalace nexus. Tento krok se provádí pouze při prvním instalaci (když nexus_data_dir byla zjištěna prázdná).

Odstraňování repozitářů z výchozí konfigurace pro Nexus. Tento krok se provádí pouze při prvním instalaci (když nexus_data_dir je prázdný).

    nexus_delete_default_blobstore: false

Odstraňte výchozí blobstore z výchozí konfigurace instalace nexus. To lze provést pouze pokud nexus_delete_default_repos: true a všechny nakonfigurované repozitáře (viz níže) mají explicitní blob_store: custom. Tento krok se provádí pouze při prvním instalaci (když nexus_data_dir byla zjištěna prázdná).

Odstranění blobstore (binárních artefaktů) je ve výchozím nastavení vypnuto z výchozí konfigurace. Pro odstranění blobstore (binárních artefaktů) vypněte nexus_delete_default_repos: true. Tento krok se provádí pouze při prvním instalaci (když nexus_data_dir je prázdný).

    nexus_blobstores: []
    # příklad položky blobstore :
    # - 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 k vytvoření. Cesta blobstore a blobstore repozitáře nemohou být aktualizovány po prvním vytvoření (jakákoli aktualizace zde bude ignorována při opětovném zpřístupňování).

Konfigurace blobstore na S3 je poskytována jako pohodlí a není součástí automatizovaných testů, které provádíme na travis. Vezměte prosím na vědomí, že ukládání na S3 se doporučuje pouze pro instance nasazené na AWS.

Vytvoření Blobstores. Cesta k blobstore a repozitáři blobstore nemohou být aktualizovány po prvním vytvoření (jakákoli aktualizace zde bude ignorována při opětovné instalaci).

Konfigurace blobstore na S3 je poskytována pro pohodlí. Vezměte prosím na vědomí, že ukládání na S3 se doporučuje pouze pro instance nasazené na AWS.

    nexus_repos_maven_proxy:
      - name: central
        remote_url: 'https://repo1.maven.org/maven2/'
        layout_policy: permissive
        # maximum_component_age: -1
        # maximum_metadata_age: 1440
        # negative_cache_enabled: true
        # negative_cache_ttl: 1440
      - name: jboss
        remote_url: 'https://repository.jboss.org/nexus/content/groups/public-jboss/'
        # maximum_component_age: -1
        # maximum_metadata_age: 1440
        # negative_cache_enabled: true
        # negative_cache_ttl: 1440
    # 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

Výše je příklad konfigurace proxy server Maven.

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

Maven hostované repozitáře konfigurace. Konfigurace negativního cache je volitelná a bude ve výchozím nastavení používat výše uvedené hodnoty, pokud nebude uvedena.

Konfigurace hostovaných (hosted) repozitářů Maven. Konfigurace negativního cache (-1) je volitelná a ve výchozím nastavení budou použity výše uvedené hodnoty, pokud nebude uvedena.

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

Konfigurace skupiny Maven.

Všechny tři typy repozitářů jsou spojeny s následujícími výchozími hodnotami:

    _nexus_repos_maven_defaults:
      blob_store: default # Poznámka: nelze aktualizovat po vytvoření repozitáře
      strict_content_validation: true
      version_policy: release # release, snapshot nebo mixed
      layout_policy: strict # strict nebo permissive
      write_policy: allow_once # jeden z "allow", "allow_once" nebo "deny"
      maximum_component_age: -1  # výchozí Nexus gui. Pouze pro proxy
      maximum_metadata_age: 1440  # výchozí Nexus gui. Pouze pro proxy
      negative_cache_enabled: true # výchozí Nexus gui. Pouze pro proxy
      negative_cache_ttl: 1440 # výchozí Nexus gui. Pouze pro proxy

Typy repozitářů Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS a yum:
viz defaults/main.yml pro tyto možnosti:

Skladovací prostory Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS a yum jsou ve výchozím nastavení vypnuty:
Viz defaults/main.yml pro tyto možnosti:

      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

Vezměte prosím na vědomí, že můžete potřebovat aktivovat určité oblasti zabezpečení, pokud chcete používat jiné typy repozitářů než Maven. Toto je ve výchozím nastavení false.

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # vyžaduje se pro anonymní přístup k dockeru

Realm pro vzdálené uživatelské jméno může být také aktivována pomocí

nexus_rut_auth_realm: true

a hlavička může být nastavena definováním

nexus_rut_auth_header: "CUSTOM_HEADER"

Naplánované úkoly

    nexus_scheduled_tasks: []
    #  #  Příklad úlohy pro komprimaci blobstore :
    #  - name: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: alerts@example.org  # volitelný
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # všechny atributy úlohy jsou interně uložené jako řetězce v nexus
    #  #  Příklad úlohy pro odstranění maven snapshotů
    #  - name: Purge-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: alerts@example.org  # volitelný
    #    taskProperties:
    #      repositoryName: "*"  # * pro všechny repozitáře. Změňte na název repozitáře, pokud chcete pouze specifický
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Příklad úlohy pro odstranění nepoužívaných docker manifestů a obrazů
    #  - name: Purge unused docker manifests and images
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: alerts@example.org  # volitelný
    #    taskProperties:
    #      repositoryName: "*"  # * pro všechny repozitáře. Změňte na název repozitáře, pokud chcete pouze specifický
    #  #  Příklad úlohy pro odstranění neúplných docker nahrávání
    #  - name: Purge incomplete docker uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: alerts@example.org  # volitelný
    #    taskProperties:
    #      age: "24"

Naplánované úkoly pro konfiguraci. typeId a specifické pro úlohutaskProperties/booleanTaskProperties může být odhadnuto jako:

  • z hierarchie typů Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • kontrolováním HTML formuláře pro vytváření úlohy ve vašem prohlížeči
  • sledováním AJAX požadavků v prohlížeči při ručním nastavování úlohy.

Atributy úlohy musí být deklarovány v odpovídajícím yaml bloku v závislosti na jejich typu:

  • taskProperties pro všechny řetězcové vlastnosti (tj. názvy repozitářů, názvy úložišť, časové intervaly …).
  • booleanTaskProperties pro všechny logické vlastnosti (tj. většinou zaškrtávací políčka v grafickém rozhraní pro vytváření úloh nexus).

Zálohy

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Viz definice cron výrazů v GUI pro vytváření úloh nexus
      nexus_backup_dir: '\/var\/nexus-backup'
      nexus_restore_log: '{{ nexus_backup_dir }}\/nexus-restore.log'
      nexus_backup_rotate: false
      nexus_backup_rotate_first: false
      nexus_backup_keep_rotations: 4  # Uchovat 4 zálohování jako výchozí (aktuální + poslední 3)

Zálohování nebude nakonfigurováno, dokud nepřepnete nexus_backup_configure v true.
V tomto případě bude naplánována úloha skriptu ke spuštění v Nexus
v intervalu určeném v nexus_backup_cron (výchozí 21:00 každý den).
Viz [Šablona groovy pro tuto úlohu](templates / backup.groovy.j2) pro podrobnosti.
Tato naplánovaná úloha nezávisí na jiných nexus_scheduled_tasks, které jste
vyhlásili ve svém playbooku.

Pokud chcete rotovat/odstraňovat zálohy, nastavte nexus_backup_rotate: true a nastavte počet záloh, které chcete uchovat pomocí nexus_backup_keep_rotations (výchozí je 4).

Při používání rotace, pokud chcete ušetřit další místo na disku během procesu zálohování,
můžete nastavit nexus_backup_rotate_first: true. To nastaví předběžnou rotaci/odstranění před zálohou. Ve výchozím nastavení se rotace provádí po vytvoření zálohy. Všimněte si, že v tomto případě staré zálohy
budou odstraněny před tím, než bude vytvořena aktuální záloha.

Obnova procedury

Spusťte playbook s parametrem -e nexus_restore_point=
(například, 2017-12-17-21-00-00 pro 17. prosince 2017 v 21:00

Odstranění nexus

Varování: toto úplně odstraní aktuální data. Nezapomeňte předtím provést zálohu, pokud je to nutné.

Použijte proměnnou nexus_purge, pokud potřebujete začít znovu a přeinstalovat instanci nexus s odstraněním všech dat.

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

Změňte heslo administrátora po prvním nastavení

    nexus_default_admin_password: 'admin123'

To by nemělo být změněno ve vašem playbooku. Tato proměnná je vyplněna standardním heslem administrátora Nexus při prvním nastavení a zajišťuje, že můžeme změnit heslo administrátora na nexus_admin_password.

Pokud chcete změnit heslo administrátora po prvním nastavení, můžete jej dočasně změnit na staré heslo z příkazového řádku. Po změně nexus_admin_password ve vaší herní knize můžete spustit:

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

Telegram kanál k Nexus Sonatype: https://t.me/ru_nexus_sonatype

Pouze registrovaní uživatelé se mohou účastnit ankety. Přihlaste se, prosím.

Jaké repozitáře artefaktů používáte?

  • Sonatype Nexus zdarma

  • Sonatype Nexus placený

  • Artifactory zdarma

  • Artifactory placený

  • Harbor

  • Pulp

Hlasovalo 9 uživatelů. Zdrželo se 3 uživatelů.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster