Het installeren en configureren van Nexus Sonatype met de infrastructure as code-aanpak

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

Waarom is Sonatype Nexus nodig?

  • Voor het opslaan van private artefacten;
  • Voor het cachen van artefacten die van internet zijn gedownload;

Artefacten die worden ondersteund in de basisversie van Sonatype Nexus:

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

Artefacten die door de gemeenschap worden ondersteund:

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

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

Vereisten

  • Lees online over het gebruik van ansible.
  • Installeer ansible pip install ansible op de werkstation waar het playbook draait.
  • Installeer geerlingguy.java op de werkstation waar het playbook draait.
  • Installeer geerlingguy.apache op de werkstation waar het playbook draait.
  • Deze rol is getest op CentOS 7, Ubuntu Xenial (16.04) en Bionic (18.04), Debian Jessie en Stretch.
  • jmespath deze bibliotheek moet worden geïnstalleerd op de werkstation waar het playbook draait. Gebruik hiervoor: sudo pip install -r requirements.txt
  • Sla het playbook-bestand (voorbeeld hieronder) op als nexus.yml
  • Voer de nexus-installatie uit ansible-playbook -i host nexus.yml

Voorbeeld van een 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: 'Lees- & Blader toegang tot alle repositories'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Implementaties naar company-project'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # komt overeen met de LDAP-groep
        name: developers
        description: Alle ontwikkelaars
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # gebruikt als sleutel voor update
        first_name: Jenkins
        last_name: CI
        email: support@company.com
        password: "s3cr3t"
        roles:
          - Developpers # rol-ID hier
    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. Verander nexus_config_yum naar true om een yum-repository te maken
    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. Verander nexus_config_npm naar true om een npm-repository te maken
    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. Verander nexus_config_docker naar true om een docker-repository te maken
    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. Verander nexus_config_bower naar true om een bower-repository te maken
    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. Verander nexus_config_pypi naar true om een pypi-repository te maken
    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. Verander nexus_config_rubygems naar true om een rubygems-repository te maken
    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. Verander nexus_config_gitlfs naar true om een gitlfs-repository te maken
    nexus_config_gitlfs: true
    nexus_repos_gitlfs_hosted:
      - name: gitlfs-hosted

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

Het installeren en configureren van Nexus Sonatype met de infrastructure as code-aanpak

Het installeren en configureren van Nexus Sonatype met de infrastructure as code-aanpak

Rolvariables

Rolvariabelen

Standaardwaarde-variabelen (zie default/main.yml):

Algemene variabelen

    nexus_version: ''
    nexus_timezone: 'UTC'

Standaard instelt de rol de laatste beschikbare versie van Nexus. U kunt de versie corrigeren door de variabele nexus_versionte wijzigen. Zie beschikbare versies op https://www.sonatype.com/download-oss-sonatype.

Als u de versie wijzigt naar een nieuwere, dan zal de rol proberen uw geïnstalleerde Nexus bij te werken.

Als u een oudere versie van Nexus gebruikt dan de laatste, moet u ervoor zorgen dat u geen functies gebruikt die niet beschikbaar zijn in de geïnstalleerde release (bijvoorbeeld het hosten van yum-repositories is 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 nuttig kan zijn in combinatie met de hieronder gegeven cron-uitdrukkingen voor nexus_scheduled tasks.

Nexus-poort en contextpad

    nexus_default_port: 8081
    nexus_default_context_path: '(/)'

Poort en contextpad van het Java-verbindingsproces. nexus_default_context_path moet een schuine streep bevatten wanneer deze is ingesteld, bijvoorbeeld: nexus_default_context_path: '/nexus/'.

Nexus-gebruikers en -groepen

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

De gebruiker en groep die worden gebruikt voor het eigendom van Nexus-bestanden en het uitvoeren van de service, zullen door de rol worden aangemaakt als deze niet bestaan.

    nexus_os_user_home_dir: '/home/nexus'

Sta toe om de standaard thuisdirectory voor de gebruiker nexus te wijzigen

Nexus-instantiedirectories

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

Nexus-directories.

  • nexus_installation_dir bevat de geïnstalleerde uitvoerbare bestanden
  • nexus_data_dir bevat alle configuraties, repositories en gedownloade artefacten. Aangepaste paden voor blobstores nexus_data_dir kunnen worden ingesteld, zie hieronder nexus_blobstores.
  • nexus_tmp_dir bevat alle tijdelijke bestanden. Het standaardpad voor RedHat is verplaatst om /tmp potentiële problemen met automatische opschoningsprocedures te overwinnen. Zie #168.

Configureren van het geheugengebruik van Nexus JVM

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

Dit zijn de standaardinstellingen voor Nexus. Verander deze waarden alstublieft niet Als u het gedeelte over de geheugenvereisten voor Nexus niet hebt gelezen en niet begrijpt wat ze doen. Als tweede waarschuwing, hier is een uittreksel uit het bovengenoemde document:

Als tweede waarschuwing, hier is een uittreksel uit het bovengenoemde document:

Het wordt niet aanbevolen om het geheugen van de JVM heap boven de aanbevolen waarden te verhogen in een poging om de prestaties te verbeteren. Dit kan daadwerkelijk het tegenovergestelde effect hebben, wat leidt tot onnodige belasting van het besturingssysteem.

Beheerderswachtwoord

    nexus_admin_password: 'changeme'

Wachtwoord voor het "admin" account voor configuratie. Dit werkt alleen bij de eerste standaard installatie.. Raadpleeg [Wijzig het beheerderswachtwoord na de eerste installatie](# change-admin-password-after-first-install) als je het later wilt wijzigen met een rol.

Het is ten zeerste niet aan te raden je wachtwoord in platte tekst in de playbook op te slaan, en in plaats daarvan [ansible-vault encryptie] gebruiken (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (of ingebed of in een apart bestand, bijvoorbeeld geladen met include_vars)

Anonieme toegang standaard

    nexus_anonymous_access: false

Standaard anonieme toegang is uitgeschakeld. Meer over anonieme toegang.

Publieke hostnaam

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

De volledige domeinnaam en het schema (https of http) waarmee 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 het verstrekken.
Alleen voor gevorderde gebruikers. Het is waarschijnlijk dat je deze standaardinstellingen niet wilt wijzigen.

Configuratie van de reverse 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

Installeer SSL reverse proxy.
Hiervoor moet httpd zijn geïnstalleerd. Opmerking: wanneer httpd_setup_enable is ingesteld optrue, verbindt nexus met 127.0.0.1:8081, zodat niet het rechtstreeks toegankelijk is via HTTP-poort 8081 vanaf een extern IP-adres.

De standaard hostnaam is nexus_public_hostname. Als je om welke reden dan ook verschillende namen nodig hebt, kun je httpd_server_name instellen met een andere waarde.

met httpd_copy_ssl_files: true (standaard) de eerder genoemde certificaten moeten bestaan in je playbook-directory en zullen naar de server worden gekopieerd en in apache worden ingesteld.

Als je bestaande certificaten op de server wilt gebruiken, stel je in 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 onjuist blijven als u de ketenbestanden niet wilt configureren

    httpd_default_admin_email: "admin@example.com"

Stel het standaard e-mailadres van de administrator in

LDAP-configuratie

LDAP-verbindingen en het beveiligingsdomein zijn standaard uitgeschakeld

    nexus_ldap_realm: false
    ldap_connections: []

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

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Mijn Bedrijf LDAP' # gebruikt als sleutel voor het bijwerken van de ldap-configuratie
        ldap_protocol: 'ldaps' # ldap of ldaps
        ldap_hostname: 'ldap.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false # Of certificaten in de nexus-truststore moeten worden gebruikt
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_auth: 'none' # of simpel
        ldap_auth_username: 'username' # als auth = simpel
        ldap_auth_password: 'password' # als auth = simpel
        ldap_user_base_dn: 'ou=users'
        ldap_user_filter: '(cn=*)' # (optioneel)
        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 van LDAP-configuratie voor anonieme authenticatie (anonieme bind), dit is ook een "minimale" configuratie:

    nexus_ldap_realm: true
    ldap_connection:
      - ldap_name: 'Simpelste LDAP-configuratie'
        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 LDAP-configuratie voor eenvoudige authenticatie (met DSA-account):

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP-configuratie met 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 }}" # bewaar wachtwoorden beter in een 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 LDAP-configuratie voor eenvoudige authenticatie (met DSA-account) + groepen die als rollen zijn aangemerkt:

    nexus_ldap_realm: true
    ldap_connections
      - ldap_name: 'LDAP-configuratie met 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 }}" # beter om wachtwoorden in een ansible vault te bewaren
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_user_base_dn: 'ou=gebruikers'
        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=groepen'
        ldap_group_object_class: 'groupOfNames'
        ldap_group_id_attribute: 'cn'
        ldap_group_member_attribute: 'member'
        ldap_group_member_format: 'uid=${username},ou=gebruikers,dc=mycompany,dc=net'
        ldap_group_subtree: false

Voorbeeld van LDAP-configuratie voor eenvoudige authenticatie (met gebruik van DSA-account) + groepen, dynamisch gekoppeld als rollen:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP-configuratie met 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 }}" # beter om wachtwoorden in een ansible vault te bewaren
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_user_base_dn: 'ou=gebruikers'
        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: 'dynamisch'
        ldap_user_memberof_attribute: 'memberOf'

Privileges

    nexus_privileges:
      - name: all-repos-read # gebruikt als sleutel voor het bijwerken van een privilege
        # type: <een van applicatie, repository-admin, repository-content-selector, repository-view, script of wildcard>
        description: 'Lezen & Bladeren toegang tot alle repos'
        repository: '*'
        actions: # kan zijn toevoegen, bladeren, creëren, verwijderen, bewerken, lezen of * (alle)
          - read
          - browse
        # patroon: patroon
        # domein: domein
        # script_name: naam

Lijst privileges voor configuratie. Raadpleeg de documentatie en de grafische interface om te controleren welke variabelen moeten worden ingesteld afhankelijk van het type privilege.

Deze elementen worden samengevoegd met de volgende standaardwaarden:

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

Rollen (binnen Nexus bedoeld)

    nexus_roles:
      - id: Ontwikkelaars # kan worden gekoppeld aan een LDAP-groep-id, ook gebruikt als sleutel om een rol bij te werken
        name: ontwikkelaars
        description: Alle ontwikkelaars
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # verwijzingen naar andere rolnamen

Lijst rollen voor configuratie.

Gebruikers

    nexus_local_users: []
      # - username: jenkins # gebruikt als sleutel voor het bijwerken
      #   state: present # standaardwaarde als deze weggelaten wordt, gebruik 'absent' om gebruiker te verwijderen
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - ontwikkelaars # rol ID

Lijst met lokale (non-LDAP) gebruikers/rekeningen om in nexus te creëren.

Lijst van lokale (geen LDAP) gebruikers/ accounts voor creatie in Nexus.

      nexus_ldap_users: []
      # - gebruikersnaam: j.doe
      #   staat: aanwezig
      #   rollen:
      #     - "nx-admin"

Mapping van LDAP gebruikers/rollen. Status afwezig verwijdert rollen van een bestaande gebruiker, als deze al bestaat.
LDAP gebruikers worden niet verwijderd. Poging om een rol toe te wijzen aan een niet-bestaande gebruiker leidt tot een fout.

Inhoudselectors

  nexus_content_selectors:
  - naam: docker-login
    beschrijving: Selector voor docker login privilege
    zoekexpressie: format=="docker" and path=~"/v2/"

Voor meer informatie over de inhoudselector, zie Documentatie.

Om de inhoudselector te gebruiken, voeg een nieuwe privilege toe met type: repository-content-selector en het bijbehorendecontentSelector

- naam: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  beschrijving: 'Inloggen op de Docker registry'
  repository: '*'
  acties:
  - lezen
  - bladeren

Blobstores en repositories

    nexus_delete_default_repos: false

Verwijder de repositories uit de oorspronkelijke standaardconfiguratie van Nexus. Deze stap wordt alleen uitgevoerd bij de eerste installatie (wanneer nexus_data_dir leeg is gedetecteerd).

Verwijderen van repositories uit de standaardconfiguratie voor Nexus. Deze stap wordt alleen uitgevoerd bij de eerste installatie (wanneer nexus_data_dir leeg).

    nexus_delete_default_blobstore: false

Verwijder de standaard blobstore uit de oorspronkelijke standaardconfiguratie van Nexus. Dit kan alleen worden gedaan als nexus_delete_default_repos: true en alle geconfigureerde repositories (zie hieronder) een expliciete blob_store: custom. Deze stap wordt alleen uitgevoerd bij de eerste installatie (wanneer nexus_data_dir leeg is gedetecteerd).

Het verwijderen van blobstores (binaire artifacts) is standaard uitgeschakeld in de oorspronkelijke configuratie. Om het blobstore (binaire artifacts) te verwijderen, schakelt u nexus_delete_default_repos: true. Deze stap wordt alleen uitgevoerd bij de eerste installatie (wanneer nexus_data_dir leeg).

    nexus_blobstores: []
    # voorbeeld blobstore item :
    # - naam: separate-storage
    #   type: file
    #   pad: /mnt/custom/path
    # - naam: s3-blobstore
    #   type: S3
    #   configuratie:
    #     bucket: s3-blobstore
    #     accessKeyId: "{{ VAULT_ENCRYPTED_KEY_ID }}"
    #     secretAccessKey: "{{ VAULT_ENCRYPTED_ACCESS_KEY }}"

Blobstores te creëren. Een blobstore-pad en een repository-blobstore kunnen niet worden bijgewerkt na de initiële creatie (elke update hier zal worden genegeerd bij herinstallatie).

Het configureren van blobstore op S3 wordt als gemak aangeboden en maakt geen deel uit van de geautomatiseerde tests die we op Travis uitvoeren. Houd er rekening mee dat opslag op S3 alleen wordt aanbevolen voor gevallen die zijn gedeployd op AWS.

Creëren Blobstores. Het pad naar blobstore en repository kan niet worden bijgewerkt na de initiële creatie (elke update hier zal worden genegeerd bij herinstallatie).

Configuratie van blobstores op S3 wordt voor gemak aangeboden. Houd er rekening mee dat opslag op S3 alleen wordt aanbevolen voor instanties die zijn gedeployed 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

Hier is een voorbeeld van de configuratie proxy-server Maven.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # een van de "allow", "allow_once" of "deny"

Maven gehoste repositories configuratie. Configuratie van negatieve cache is optioneel en neemt standaard de bovenstaande waarden over als deze wordt weggelaten.

Configuratie gehoste repositories Maven. De configuratie van negatieve cache (-1) is optioneel en zal standaard de hierboven vermelde waarden gebruiken als deze niet is opgegeven.

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

Configuratie groepen Maven.

Alle drie de repositorytypes worden gecombineerd met de volgende standaardwaarden:

    _nexus_repos_maven_defaults:
      blob_store: default # Opmerking: kan niet worden bijgewerkt zodra de repo is aangemaakt
      strict_content_validation: true
      version_policy: release # release, snapshot of mixed
      layout_policy: strict # strict of permissive
      write_policy: allow_once # een van "allow", "allow_once" of "deny"
      maximum_component_age: -1  # Nexus gui standaard. Alleen voor proxies
      maximum_metadata_age: 1440  # Nexus gui standaard. Alleen voor proxies
      negative_cache_enabled: true # Nexus gui standaard. Alleen voor proxies
      negative_cache_ttl: 1440 # Nexus gui standaard. Alleen voor proxies

Repositorytypes van Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS en yum:
zie defaults/main.yml voor deze opties:

Docker-, Pypi-, Raw-, Rubygems-, Bower-, NPM-, Git-LFS- en yum-repositories zijn standaard uitgeschakeld:
Zie 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

Let op dat u mogelijk bepaalde beveiligingsgebieden moet inschakelen als u andere typen repositories dan Maven wilt gebruiken. Dit is standaard false

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # vereist voor anonieme toegang tot docker

Remote User Realm kan ook worden ingeschakeld met

nexus_rut_auth_realm: true

en de header kan worden geconfigureerd door het definiëren van

nexus_rut_auth_header: "CUSTOM_HEADER"

Geplande taken

    nexus_scheduled_tasks: []
    #  #  Voorbeeldtaak om blobstore te compacteren:
    #  - naam: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: alerts@example.org  # optioneel
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # alle taakattributen worden intern door nexus als strings opgeslagen
    #  #  Voorbeeldtaak om maven snapshots te verwijderen
    #  - naam: Verwijder-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: alerts@example.org  # optioneel
    #    taskProperties:
    #      repositoryName: "*"  # * voor alle repos. Wijzig naar een repository-naam als je alleen een specifieke wilt
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Voorbeeldtaak om ongebruikte docker-manifesten en afbeeldingen te verwijderen
    #  - naam: Verwijder ongebruikte docker-manifesten en afbeeldingen
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: alerts@example.org  # optioneel
    #    taskProperties:
    #      repositoryName: "*"  # * voor alle repos. Wijzig naar een repository-naam als je alleen een specifieke wilt
    #  #  Voorbeeldtaak om onvoltooide docker-upload te verwijderen
    #  - naam: Verwijder onvoltooide docker-upload
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: alerts@example.org  # optioneel
    #    taskProperties:
    #      age: "24"

Geplande taken voor configuratie. typeId en specifiek voor de taaktaskProperties/booleanTaskProperties kan worden afgeleid als:

  • uit de typehiërarchie van Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • door het HTML-formulier voor het maken van een taak in uw browser te controleren
  • door de AJAX-verzoeken in de browser te bekijken tijdens handmatige taakconfiguratie.

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

  • taskProperties voor alle stringeigenschappen (d.w.z. namen van repositories, namen van opslagplaatsen, tijdsperioden …).
  • booleanTaskProperties voor alle logische eigenschappen (d.w.z. voornamelijk selectievakjes in de grafische interface voor het maken van een nexus-taak).

Back-ups

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Zie definitie van cron-expressies in nexus taak aanmaken 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  # Houd standaard 4 back-uprotaties (huidige + laatste 3)

Back-up zal niet worden geconfigureerd totdat je schakelt nexus_backup_configure in true.
In dit geval wordt de geplande taak ingesteld om te worden uitgevoerd in Nexus
met het interval zoals opgegeven in nexus_backup_cron (standaard 21:00 elke dag).
Zie [groovy-sjabloon voor deze taak](templates / backup.groovy.j2) voor meer informatie.
Deze geplande taak is niet afhankelijk van andere nexus_scheduled_tasks, die je
in je playbookDeclareert.

Als je back-ups wilt roteren/verwijderen, stel dan in nexus_backup_rotate: true en stel het aantal back-ups in dat u wilt opslaan met behulp van nexus_backup_keep_rotations (standaard 4).

Bij gebruik van rotatie, als u extra schijfruimte wilt besparen tijdens het back-upproces,
kunt u instellen nexus_backup_rotate_first: true. Dit stelt een voorafgaande rotatie/verwijdering in vóór de back-up. Standaard vindt de rotatie plaats na het maken van een back-up. Houd er rekening mee dat in dit geval oudere back-ups
verwijderd worden voordat de huidige back-up wordt gemaakt.

Herstelprocedure

Voer de playbook uit met de parameter -e nexus_restore_point=
(bijvoorbeeld, 2017-12-17-21-00-00 voor 17 december 2017 om 21:00

Verwijder nexus

Waarschuwing: dit verwijdert alle huidige gegevens volledig. Zorg ervoor dat u eerder een back-up maakt indien nodig

Gebruik de variabele nexus_purge, als u vanaf nul opnieuw wilt starten en de nexus-instantie wilt herinstalleren met verwijdering van alle gegevens.

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 playbook. Deze variabele wordt gevuld met het standaard beheerderswachtwoord van Nexus bij de eerste installatie en zorgt ervoor dat we het beheerderswachtwoord kunnen wijzigen naar nexus_admin_password.

Als u het beheerderswachtwoord na de eerste installatie wilt wijzigen, kunt u het tijdelijk wijzigen in het oude wachtwoord via de opdrachtregel. Na wijziging nexus_admin_password in uw spelboek kunt u uitvoeren:

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

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

Alleen geregistreerde gebruikers kunnen deelnemen aan de enquête. Log in, alstublieft.

Welke artifact-repositories gebruikt u?

  • Sonatype Nexus gratis

  • Sonatype Nexus betaald

  • Artifactory gratis

  • Artifactory betaald

  • Harbor

  • Pulp

9 gebruikers hebben gestemd. 3 gebruikers hebben zich onthouden.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster