Installeren en configureren van Nexus Sonatype met behulp van de infrastructuur als code-aanpak

Sonatype Nexus is een geïntegreerd platform waarmee ontwikkelaars Java (Maven)-afhankelijkheden, Docker, Python, Ruby, NPM, Bower-images, RPM-pakketten, gitlfs, Apt, Go, Nuget kunnen proxyen, opslaan en beheren en hun softwarebeveiliging kunnen distribueren.

Waarom heb je Sonatype Nexus nodig?

  • Voor het opslaan van privé-artefacten;
  • Voor het cachen van artefacten die zijn gedownload van internet;

Artefacten die worden ondersteund in het basis Sonatype Nexus-pakket:

  • Java, Maven (pot)
  • havenarbeider
  • Python (pip)
  • Robijn (edelsteen)
  • NPM
  • Prieel
  • Yum (rpm)
  • gitlfs
  • Rauw
  • Apt (deb)
  • Go
  • Nuget

Door de gemeenschap ondersteunde artefacten:

  • Componist
  • Conan
  • CPAN
  • ELPA
  • Stuurstand
  • P2
  • R

Sonatype Nexus installeren met behulp van https://github.com/ansible-ThoTeam/nexus3-oss

Eisen

  • Lees meer over het gebruik van Ansible op internet.
  • Anible installeren pip install ansible op het werkstation waarop het draaiboek draait.
  • Ingesteld geerlingguy.java op het werkstation waarop het draaiboek draait.
  • Ingesteld geerlingguy.apache op het werkstation waarop het draaiboek draait.
  • Deze rol is getest op CentOS 7, Ubuntu Xenial (16.04) en Bionic (18.04), Debian Jessie en Stretch
  • jmespath De bibliotheek moet worden geïnstalleerd op het werkstation waarop het playbook draait. Installeren: sudo pip install -r requirements.txt
  • Sla het playbook-bestand (voorbeeld hieronder) op in het nexus.yml-bestand
  • Voer de Nexus-installatie uit ansible-playbook -i host nexus.yml

Voorbeeld ansible-playbook voor het installeren van nexus zonder LDAP met 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:

Installeren en configureren van Nexus Sonatype met behulp van de infrastructuur als code-aanpak

Installeren en configureren van Nexus Sonatype met behulp van de infrastructuur als code-aanpak

Variabele rollen

Rolvariabelen

Variabelen met standaardwaarden (zie default/main.yml):

Algemene variabelen

    nexus_version: ''
    nexus_timezone: 'UTC'

Standaard installeert de rol de nieuwste beschikbare versie van Nexus. U kunt de versie herstellen door de variabele te wijzigen nexus_version. Bekijk de beschikbare versies op https://www.sonatype.com/download-oss-sonatype.

Als u overstapt naar een nieuwere versie, probeert de rol uw Nexus-installatie bij te werken.

Als je een oudere versie van Nexus gebruikt dan de laatste, moet je ervoor zorgen dat je geen functies gebruikt die niet beschikbaar zijn in de geïnstalleerde release (het hosten van yum-repository's is bijvoorbeeld beschikbaar voor nexus groter dan 3.8.0, git lfs repo voor nexus groter dan 3.3.0 enz.)

nexus timezone is de naam van de Java-tijdzone, die handig kan zijn in combinatie met de volgende cron-expressies voor nexus_scheduled-taken.

Nexus-poort en contextpad

    nexus_default_port: 8081
    nexus_default_context_path: '/'

Het poort- en contextpad van het Java-verbindingsproces. nexus_default_context_path moet een schuine streep naar voren bevatten als deze is ingesteld, bijvoorbeeld: nexus_default_context_path: '/nexus/'.

Nexus OS-gebruiker en -groep

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

De gebruiker en groep die eigenaar zijn van Nexus-bestanden en de service uitvoeren, worden door de rol aangemaakt als er een ontbreekt.

    nexus_os_user_home_dir: '/home/nexus'

Sta het wijzigen van de standaard thuismap voor de Nexus-gebruiker toe

Nexus-instantiemappen

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

Nexus-catalogi.

  • nexus_installation_dir bevat geïnstalleerde uitvoerbare bestanden
  • nexus_data_dir bevat alle configuratie, repositories en gedownloade artefacten. Aangepaste blobstore-paden nexus_data_dir kan worden aangepast, zie hieronder nexus_blobstores.
  • nexus_tmp_dir bevat alle tijdelijke bestanden. Het standaardpad voor redhat is verplaatst van /tmp om potentiële problemen met automatische reinigingsprocedures te overwinnen. Zie #168.

Nexus JVM-geheugengebruik configureren

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

Dit zijn de standaardinstellingen voor Nexus. Wijzig deze waarden alstublieft niet Als je het niet hebt gelezen nexus systeemvereisten geheugensectie en begrijp niet wat ze doen.

Als tweede waarschuwing is hier een fragment uit het bovenstaande document:

Het wordt niet aanbevolen om het JVM-heapgeheugen boven de aanbevolen waarden uit te breiden in een poging de prestaties te verbeteren. Dit kan zelfs het tegenovergestelde effect hebben, wat resulteert in onnodig werk voor het besturingssysteem.

Administrator wachtwoord

    nexus_admin_password: 'changeme'

Het “admin”-accountwachtwoord voor installatie. Dit werkt alleen bij de eerste standaardinstallatie. Zie [Wijzig beheerderswachtwoord na eerste installatie](# change-admin-password-after-first-install) als u dit later wilt wijzigen met behulp van een rol.

Het wordt ten zeerste aanbevolen om uw wachtwoord niet in gewone tekst in het playbook op te slaan, maar om [ansible-vault encryptie] te gebruiken (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (inline of in een apart bestand geladen met bijvoorbeeld include_vars)

Standaard anonieme toegang

    nexus_anonymous_access: false

Anonieme toegang is standaard uitgeschakeld. Lees meer over anonieme toegang.

Openbare hostnaam

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

De volledig gekwalificeerde domeinnaam en het schema (https of http) waaronder de Nexus-instantie beschikbaar zal zijn voor zijn klanten.

API-toegang voor deze 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 }}"

Deze variabelen bepalen hoe de rol verbinding maakt met de Nexus API voor inrichting.
Alleen voor gevorderde gebruikers. U wilt deze standaardinstellingen waarschijnlijk niet wijzigen

Een omgekeerde proxy instellen

    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

Ingesteld SSL-omgekeerde proxy.
Om dit te doen moet je httpd installeren. Let op: wanneer voor httpd_setup_enable waarde instellentrue, Nexus maakt dus contact met 127.0.0.1:8081 geen rechtstreeks toegankelijk zijn via HTTP-poort 8081 vanaf het externe IP-adres.

De standaard gebruikte hostnaam is nexus_public_hostname. Als u om de een of andere reden andere namen nodig heeft, kunt u dit instellen httpd_server_name met een andere betekenis.

С httpd_copy_ssl_files: true (standaard) zouden de bovenstaande certificaten in uw playbook-map moeten bestaan ​​en naar de server worden gekopieerd en in apache worden geconfigureerd.

Als u bestaande certificaten op de server wilt gebruiken, installeer dan httpd_copy_ssl_files: false en geef de volgende variabelen op:

    # 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 optioneel en moet niet worden ingesteld als u het ketenbestand niet wilt aanpassen

    httpd_default_admin_email: "[email protected]"

Stel het standaard beheerders-e-mailadres in

LDAP-configuratie

LDAP-verbindingen en beveiligingsdomein zijn standaard uitgeschakeld

    nexus_ldap_realm: false
    ldap_connections: []

LDAP-verbindingen, ziet elk element er als volgt uit:

    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

Voorbeeld LDAP-configuratie voor anonieme authenticatie (anonieme binding), ook dit is een "minimale" configuratie:

    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'

Voorbeeld van een LDAP-configuratie voor eenvoudige authenticatie (met behulp van een DSA-account):

    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

Voorbeeld van een LDAP-configuratie voor eenvoudige authenticatie (met behulp van een DSA-account) + groepen toegewezen als 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

Voorbeeld van een LDAP-configuratie voor eenvoudige authenticatie (met behulp van een DSA-account) + groepen dynamisch toegewezen als 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'

Voorrecht

    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

Lijst privileges voor instellingen. Bekijk de documentatie en GUI om te controleren welke variabelen moeten worden ingesteld, afhankelijk van het privilegetype.

Deze elementen worden gecombineerd met de volgende standaardwaarden:

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

Rollen (binnen Nexus betekent dit)

    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

Lijst rollen voor instellingen.

Leden

    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 (niet-LDAP) gebruikers/accountlijst om in Nexus aan te maken.

Lijst met lokale (niet-LDAP) gebruikers/accounts die in Nexus moeten worden aangemaakt.

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

Ldap-toewijzing van gebruikers/rollen. Staat absent verwijdert rollen van een bestaande gebruiker als deze al bestaat.
Ldap-gebruikers worden niet verwijderd. Als u probeert een rol in te stellen voor een niet-bestaande gebruiker, resulteert dit in een fout.

Inhoudselectors

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

Zie voor meer informatie over de inhoudkiezer Documentatie.

Om de inhoudkiezer te gebruiken, voegt u een nieuw privilege toe met 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 opslagplaatsen

    nexus_delete_default_repos: false

Verwijder de opslagplaatsen uit de initiële standaardconfiguratie van Nexus Install. Deze stap wordt alleen uitgevoerd bij de eerste installatie (wanneer nexus_data_dir leeg gedetecteerd).

Het verwijderen van opslagplaatsen uit de standaardconfiguratie voor Nexus. Deze stap wordt alleen uitgevoerd tijdens de eerste installatie (wanneer nexus_data_dir leeg).

    nexus_delete_default_blobstore: false

Verwijder de standaard-blobstore uit de initiële standaardconfiguratie van Nexus Install. Dit kan alleen worden gedaan als nexus_delete_default_repos: true en alle geconfigureerde repository's (zie hieronder) hebben een expliciete blob_store: custom. Deze stap wordt alleen uitgevoerd bij de eerste installatie (wanneer nexus_data_dir leeg gedetecteerd).

Het verwijderen van blobopslag (binaire artefacten) is standaard uitgeschakeld in de initiële configuratie. Als u blobopslag (binaire artefacten) wilt verwijderen, schakelt u uit nexus_delete_default_repos: true. Deze stap wordt alleen uitgevoerd tijdens de eerste installatie (wanneer nexus_data_dir leeg).

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

Blobwinkels maken. Een blobstore-pad en een blobstore van een opslagplaats kunnen niet worden bijgewerkt na de eerste creatie (elke update hier wordt genegeerd bij het opnieuw inrichten).

Het configureren van blobstore op S3 wordt voor uw gemak aangeboden en maakt geen deel uit van de geautomatiseerde tests die we op travis uitvoeren. Houd er rekening mee dat opslaan op S3 alleen wordt aanbevolen voor instanties die op AWS zijn geïmplementeerd.

Creatie Blobwinkels. Het opslagpad en de opslagplaats kunnen niet worden bijgewerkt nadat deze voor het eerst zijn gemaakt (elke update hier wordt genegeerd wanneer deze opnieuw wordt geïnstalleerd).

Het instellen van blobopslag op S3 wordt voor uw gemak aangeboden. Houd er rekening mee dat S3-opslag alleen wordt aanbevolen voor instanties die op AWS zijn geïmplementeerd.

    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

Hierboven ziet u een voorbeeldconfiguratie 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 gehoste opslagplaatsen configuratie. Negatieve cacheconfiguratie is optioneel en zal standaard de bovenstaande waarden gebruiken als deze worden weggelaten.

Configuratie gehoste opslagplaatsen Maven. De negatieve cacheconfiguratie (-1) is optioneel en zal standaard de bovenstaande waarden gebruiken als deze niet is opgegeven.

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

Configuratie groepen Maven.

Alle drie repositorytypen worden gecombineerd met de volgende standaardwaarden:

    _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-repositorytypen:
zien defaults/main.yml voor deze opties:

Docker-, Pypi-, Raw-, Rubygems-, Bower-, NPM-, Git-LFS- en yum-repository's zijn standaard uitgeschakeld:
Zien defaults/main.yml voor deze opties:

      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

Houd er rekening mee dat u mogelijk bepaalde beveiligingsscopes moet inschakelen als u andere typen repository's dan maven wilt gebruiken. Dit is standaard onwaar

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 kan ook worden ingeschakeld met behulp van

nexus_rut_auth_realm: true

en de titel kan worden aangepast door te definiëren

nexus_rut_auth_header: "CUSTOM_HEADER"

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

Geplande taken voor instellingen. typeId en taakspecifiektaskProperties/booleanTaskProperties je kunt het raden:

  • uit de Java-typehiërarchie org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • controleer het formulier voor het maken van HTML-taken in uw browser
  • van het bekijken van AJAX-verzoeken in de browser bij het handmatig instellen van een taak.

Taakeigenschappen moeten afhankelijk van hun type in het juiste yaml-blok worden gedeclareerd:

  • taskProperties voor alle stringeigenschappen (dat wil zeggen repositorynamen, repositorynamen, tijdsperioden...).
  • booleanTaskProperties voor alle logische eigenschappen (d.w.z. voornamelijk selectievakjes in de GUI van de taak voor het maken van nexus).

Back-ups

      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)

Back-up wordt pas geconfigureerd als u overstapt nexus_backup_configure в true.
In dit geval wordt de geplande scripttaak geconfigureerd voor uitvoering op Nexus
met het interval gespecificeerd in nexus_backup_cron (standaard elke dag 21:00 uur).
Zie [groovy-sjabloon voor deze taak](templates/backup.groovy.j2) voor details.
Deze geplande taak is onafhankelijk van andere nexus_scheduled_taskswelke jij
kondig het aan in uw draaiboek.

Als u back-ups wilt roteren/verwijderen, installeert u dit nexus_backup_rotate: true en configureer het aantal back-ups dat u wilt gebruiken nexus_backup_keep_rotations (standaard 4).

Als u rotatie gebruikt en u extra schijfruimte wilt besparen tijdens het back-upproces,
U kunt installeren nexus_backup_rotate_first: true. Hiermee wordt pre-rotatie/verwijdering vóór de back-up geconfigureerd. Standaard vindt rotatie plaats nadat een back-up is gemaakt. Houd er rekening mee dat in dit geval de oude back-ups worden gemaakt
wordt verwijderd voordat de huidige back-up wordt gemaakt.

Herstelprocedure

Voer het draaiboek uit met parameter -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(bijvoorbeeld 2017-12-17-21-00-00 voor 17 december 2017 om 21:00 uur

Nexus verwijderen

Waarschuwing: hierdoor worden uw huidige gegevens volledig verwijderd. Zorg ervoor dat u indien nodig eerder een back-up maakt

Gebruik een variabele nexus_purgeals u helemaal opnieuw moet opstarten en de Nexus-instantie opnieuw moet installeren, waarbij alle gegevens zijn verwijderd.

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

Wijzig het beheerderswachtwoord na de eerste installatie

    nexus_default_admin_password: 'admin123'

Dit mag niet worden gewijzigd in uw draaiboek. Deze variabele wordt bij de eerste installatie gevuld met het standaard Nexus-beheerderswachtwoord en zorgt ervoor dat we het beheerderswachtwoord kunnen wijzigen in nexus_admin_password.

Als u het beheerderswachtwoord na de eerste installatie wilt wijzigen, kunt u dit tijdelijk vanaf de opdrachtregel wijzigen in het oude wachtwoord. Na verandering nexus_admin_password in je playbook kun je het volgende uitvoeren:

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

Telegram-kanaal op Nexus Sonatype: https://t.me/ru_nexus_sonatype

Alleen geregistreerde gebruikers kunnen deelnemen aan het onderzoek. Inloggen, Alsjeblieft.

Welke artefactrepository's gebruikt u?

  • Sonatype Nexus is gratis

  • Sonatype Nexus betaald

  • Artifactory is gratis

  • Kunstfabriek betaald

  • Haven

  • Pulp

9 gebruikers hebben gestemd. 3 gebruikers onthielden zich van stemming.

Bron: www.habr.com

Voeg een reactie