Installere og konfigurere Nexus Sonatype ved å bruke infrastrukturen som kodetilnærming

Sonatype Nexus er en integrert plattform der utviklere kan proxy, lagre og administrere Java (Maven)-avhengigheter, Docker, Python, Ruby, NPM, Bower-bilder, RPM-pakker, gitlfs, Apt, Go, Nuget og distribuere programvaresikkerheten deres.

Hvorfor trenger du Sonatype Nexus?

  • For oppbevaring av private gjenstander;
  • For bufring av artefakter som er lastet ned fra Internett;

Artefakter som støttes i den grunnleggende Sonatype Nexus-pakken:

  • Java, Maven (krukke)
  • Docker
  • Python (pip)
  • Ruby (perle)
  • NPM
  • bower
  • Nam (rpm)
  • gitlfs
  • Raw
  • Apt (deb)
  • Go
  • Nuget

Fellesskapsstøttede artefakter:

  • Komponer
  • Conan
  • CPAN
  • ELPA
  • Helm
  • P2
  • R

Installerer Sonatype Nexus ved hjelp av https://github.com/ansible-ThoTeam/nexus3-oss

Krav

  • Les om bruk av ansible på Internett.
  • Installer mulig pip install ansible på arbeidsstasjonen der spilleboken kjøres.
  • Satt geerlingguy.java på arbeidsstasjonen der spilleboken kjøres.
  • Satt geerlingguy.apache på arbeidsstasjonen der spilleboken kjøres.
  • Denne rollen har blitt testet på CentOS 7, Ubuntu Xenial (16.04) og Bionic (18.04), Debian Jessie og Stretch
  • jmespath Biblioteket må være installert på arbeidsstasjonen der spilleboken kjører. Å installere: sudo pip install -r requirements.txt
  • Lagre playbook-filen (eksempel nedenfor) til nexus.yml-filen
  • Kjør nexus-installasjon ansible-playbook -i host nexus.yml

Eksempel på ansible-playbook for å installere nexus uten LDAP med Maven (java), Docker, Python, Ruby, NPM, Bower, RPM og 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'] }

Skjermbilder:

Installere og konfigurere Nexus Sonatype ved å bruke infrastrukturen som kodetilnærming

Installere og konfigurere Nexus Sonatype ved å bruke infrastrukturen som kodetilnærming

Variable roller

Rollevariabler

Variabler med standardverdier (se default/main.yml):

Generelle variabler

    nexus_version: ''
    nexus_timezone: 'UTC'

Som standard vil rollen installere den siste tilgjengelige versjonen av Nexus. Du kan fikse versjonen ved å endre variabelen nexus_version. Se tilgjengelige versjoner på https://www.sonatype.com/download-oss-sonatype.

Hvis du bytter til en nyere versjon, vil rollen forsøke å oppdatere Nexus-installasjonen.

Hvis du bruker en eldre versjon av Nexus enn den nyeste, bør du sørge for at du ikke bruker funksjoner som ikke er tilgjengelige i den installerte versjonen (for eksempel er hosting av yum-repositories tilgjengelig for nexus større enn 3.8.0, git lfs repo for nexus større enn 3.3.0 osv.)

nexus timezone er navnet på Java-tidssonen, som kan være nyttig i kombinasjon med følgende cron-uttrykk for nexus_scheduled-oppgaver.

Nexus-port og kontekstbane

    nexus_default_port: 8081
    nexus_default_context_path: '/'

Porten og kontekstbanen til Java-tilkoblingsprosessen. nexus_default_context_path må inneholde en skråstrek når den er satt, f.eks: nexus_default_context_path: '/nexus/'.

Nexus OS-bruker og -gruppe

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Brukeren og gruppen som brukes til å eie Nexus-filer og kjøre tjenesten vil bli opprettet av rollen hvis en mangler.

    nexus_os_user_home_dir: '/home/nexus'

Tillat endring av standard hjemmekatalog for nexus-brukeren

Nexus-forekomstkataloger

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

Nexus-kataloger.

  • nexus_installation_dir inneholder installerte kjørbare filer
  • nexus_data_dir inneholder all konfigurasjon, repositories og nedlastede artefakter. Egendefinerte blobstore-baner nexus_data_dir kan tilpasses, se nedenfor nexus_blobstores.
  • nexus_tmp_dir inneholder alle midlertidige filer. Standardbanen for redhat er flyttet fra /tmp for å overvinne potensielle problemer med automatiske rengjøringsprosedyrer. Se #168.

Konfigurere Nexus JVM-minnebruk

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

Dette er standardinnstillingene for Nexus. Vennligst ikke endre disse verdiene Hvis du ikke har lest minneseksjon for nexus systemkrav og forstår ikke hva de gjør.

Som en annen advarsel, her er et utdrag fra dokumentet ovenfor:

Det anbefales ikke å øke JVM-haugminnet utover de anbefalte verdiene i et forsøk på å forbedre ytelsen. Dette kan faktisk ha motsatt effekt, og resultere i unødvendig arbeid for operativsystemet.

Administratorpassord

    nexus_admin_password: 'changeme'

«admin»-kontopassordet for oppsett. Dette fungerer kun på den første standardinstallasjonen. Vennligst se [Endre administratorpassord etter første installasjon](# change-admin-password-after-first-install) hvis du vil endre det senere med en rolle.

Det anbefales på det sterkeste å ikke lagre passordet ditt i klartekst i spilleboken, men å bruke [ansible-vault-kryptering] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (enten inline eller i en separat fil lastet med f.eks. include_vars)

Anonym tilgang som standard

    nexus_anonymous_access: false

Anonym tilgang er deaktivert som standard. Les mer om anonym tilgang.

Offentlig vertsnavn

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Det fullt kvalifiserte domenenavnet og ordningen (https eller http) som Nexus-forekomsten vil være tilgjengelig under for sine kunder.

API-tilgang for denne rollen

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

Disse variablene styrer hvordan rollen kobles til Nexus API for klargjøring.
Kun for avanserte brukere. Du vil sannsynligvis ikke endre disse standardinnstillingene

Sette opp en omvendt proxy

    httpd_setup_enable: false
    httpd_server_name: "{{ nexus_public_hostname }}"
    httpd_default_admin_email: "[email protected]"
    httpd_ssl_certificate_file: 'files/nexus.vm.crt'
    httpd_ssl_certificate_key_file: 'files/nexus.vm.key'
    # httpd_ssl_certificate_chain_file: "{{ httpd_ssl_certificate_file }}"
    httpd_copy_ssl_files: true

Satt SSL omvendt proxy.
For å gjøre dette må du installere httpd. Merk: når for httpd_setup_enable angi verditrue, nexus-kontakter 127.0.0.1:8081, altså no være direkte tilgjengelig via HTTP-port 8081 fra den eksterne IP-adressen.

Standard vertsnavn som brukes er nexus_public_hostname. Hvis du trenger forskjellige navn av en eller annen grunn, kan du stille inn httpd_server_name med en annen betydning.

С httpd_copy_ssl_files: true (som standard) skal sertifikatene ovenfor finnes i din playbook-katalog og vil bli kopiert til serveren og konfigurert i apache.

Hvis du vil bruke eksisterende sertifikater på serveren, installer httpd_copy_ssl_files: false og oppgi følgende variabler:

    # 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 er valgfritt og bør ikke angis hvis du ikke vil tilpasse kjedefilen

    httpd_default_admin_email: "[email protected]"

Angi standard e-postadresse for administrator

LDAP-konfigurasjon

LDAP-tilkoblinger og sikkerhetsområdet er deaktivert som standard

    nexus_ldap_realm: false
    ldap_connections: []

LDAP-tilkoblinger, hvert element ser slik ut:

    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

Eksempel på LDAP-konfigurasjon for anonym autentisering (anonym binding), dette er også en "minimal" konfigurasjon:

    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'

Eksempel på LDAP-konfigurasjon for enkel autentisering (ved hjelp av DSA-konto):

    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

Eksempel på LDAP-konfigurasjon for enkel autentisering (ved hjelp av DSA-konto) + grupper tilordnet som roller:

    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

Eksempel på LDAP-konfigurasjon for enkel autentisering (ved hjelp av DSA-konto) + grupper dynamisk kartlagt som roller:

    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'

Privilegium

    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

Liste privilegier for innstillinger. Se på dokumentasjonen og GUI for å sjekke hvilke variabler som må angis avhengig av rettighetstypen.

Disse elementene er kombinert med følgende standardverdier:

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

Roller (inne i Nexus betyr dette)

    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

Liste roller for innstillinger.

Medlemmer

    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

Liste over lokale (ikke-LDAP) brukere/kontoer som skal opprettes i nexus.

Liste over lokale (ikke-LDAP) brukere/kontoer som skal opprettes i Nexus.

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

Ldap kartlegging av brukere/roller. Stat absent vil fjerne roller fra en eksisterende bruker hvis en allerede eksisterer.
Ldap-brukere slettes ikke. Å prøve å angi en rolle for en ikke-eksisterende bruker vil resultere i en feil.

Innholdsvelgere

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

For mer informasjon om innholdsvelgeren, se Dokumentasjon.

For å bruke innholdsvelgeren, legg til et nytt privilegium med type: repository-content-selector og relevantcontentSelector

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

Blobstores og repositories

    nexus_delete_default_repos: false

Slett repositoriene fra den opprinnelige standardkonfigurasjonen for nexus install. Dette trinnet utføres bare ved førstegangsinstallasjon (når nexus_data_dir har blitt oppdaget tom).

Fjerner depoter fra standard standardkonfigurasjon for Nexus. Dette trinnet utføres kun under den første installasjonen (når nexus_data_dir tømme).

    nexus_delete_default_blobstore: false

Slett standard blobstore fra den opprinnelige standardkonfigurasjonen for nexus install. Dette kan bare gjøres hvis nexus_delete_default_repos: true og alle konfigurerte depoter (se nedenfor) har en eksplisitt blob_store: custom. Dette trinnet utføres bare ved førstegangsinstallasjon (når nexus_data_dir har blitt oppdaget tom).

Fjerning av blob-lagring (binære artefakter) er deaktivert som standard fra den opprinnelige konfigurasjonen. For å fjerne blob-lagring (binære artefakter), slå av nexus_delete_default_repos: true. Dette trinnet utføres bare under den første installasjonen (når nexus_data_dir tømme).

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

Blobstores å lage. En blobstore-bane og en repository blobstore kan ikke oppdateres etter den første opprettelsen (enhver oppdatering her vil bli ignorert ved re-provisjonering).

Konfigurering av blobstore på S3 er gitt som en bekvemmelighet og er ikke en del av de automatiserte testene vi kjører på travis. Vær oppmerksom på at lagring på S3 kun anbefales for tilfeller som er distribuert på AWS.

Opprettelse Blobstores. Lagringsbanen og lagringsdepotet kan ikke oppdateres etter den første opprettelsen (enhver oppdatering her vil bli ignorert når den installeres på nytt).

Å sette opp blob-lagring på S3 er gitt som en bekvemmelighet. Vær oppmerksom på at S3-lagring kun anbefales for forekomster som er distribuert på 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

Over er et eksempel på konfigurasjon 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 vertslagring konfigurasjon. Negativ cache-konfigurasjon er valgfri og vil som standard ha verdiene ovenfor hvis den utelates.

Konfigurasjon vertslagring Maven. Den negative hurtigbufferkonfigurasjonen (-1) er valgfri og vil som standard ha verdiene ovenfor hvis ikke spesifisert.

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

Konfigurasjon grupper Maven.

Alle tre depottypene er kombinert med følgende standardverdier:

    _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 og yum depottyper:
se defaults/main.yml for disse alternativene:

Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS og yum repositories er deaktivert som standard:
se defaults/main.yml for disse alternativene:

      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

Vær oppmerksom på at du kanskje må aktivere visse sikkerhetsomfang hvis du vil bruke andre typer depoter enn maven. Dette er usann som standard

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 også aktiveres ved hjelp av

nexus_rut_auth_realm: true

og tittelen kan tilpasses ved å definere

nexus_rut_auth_header: "CUSTOM_HEADER"

Planlagte oppgaver

    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"

Planlagte oppgaver for innstillinger. typeId og oppgavespesifikktaskProperties/booleanTaskProperties du kan gjette enten:

  • fra Java-typehierarkiet org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • sjekke HTML-oppgaveopprettingsskjemaet i nettleseren din
  • fra å se AJAX-forespørsler i nettleseren når du konfigurerer en oppgave manuelt.

Oppgaveegenskaper må deklareres i riktig yaml-blokk avhengig av type:

  • taskProperties for alle strengegenskaper (dvs. depotnavn, depotnavn, tidsperioder...).
  • booleanTaskProperties for alle logiske egenskaper (dvs. hovedsakelig avmerkingsbokser i GUI-en til nexus-opprettingsoppgaven).

Sikkerhetskopier

      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)

Sikkerhetskopiering vil ikke bli konfigurert før du bytter nexus_backup_configure в true.
I dette tilfellet vil den planlagte skriptoppgaven konfigureres til å kjøre på Nexus
med intervallet angitt i nexus_backup_cron (standard 21:00 hver dag).
Se [groovy mal for denne oppgaven](templates/backup.groovy.j2) for detaljer.
Denne planlagte oppgaven er uavhengig av andre nexus_scheduled_tasksHvilken deg
kunngjøre i spilleboken din.

Hvis du vil rotere/slette sikkerhetskopier, installer nexus_backup_rotate: true og konfigurer antall sikkerhetskopier du vil lagre ved å bruke nexus_backup_keep_rotations (standard 4).

Når du bruker rotasjon, hvis du vil spare ekstra diskplass under sikkerhetskopieringsprosessen,
Du kan installere nexus_backup_rotate_first: true. Dette vil konfigurere forhåndsrotasjon/sletting før sikkerhetskopiering. Som standard skjer rotasjon etter at en sikkerhetskopi er opprettet. Vær oppmerksom på at i dette tilfellet de gamle sikkerhetskopiene
vil bli slettet før gjeldende sikkerhetskopiering er laget.

Gjenopprettingsprosedyre

Kjør playbook med parameter -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(for eksempel 2017-12-17-21-00-00 for 17. desember 2017 kl. 21:00

Fjerner nexus

Advarsel: Dette vil slette dine nåværende data fullstendig. Sørg for å ta en sikkerhetskopi tidligere om nødvendig

Bruk en variabel nexus_purgehvis du trenger å starte på nytt fra bunnen av og installere nexus-forekomsten på nytt med alle data fjernet.

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

Endre administratorpassord etter første installasjon

    nexus_default_admin_password: 'admin123'

Dette bør ikke endres i spilleboken din. Denne variabelen fylles ut med standard Nexus-administratorpassord når den først installeres, og sikrer at vi kan endre administratorpassordet til nexus_admin_password.

Hvis du vil endre administratorpassordet etter den første installasjonen, kan du midlertidig endre det til det gamle passordet fra kommandolinjen. Etter endring nexus_admin_password i spilleboken din kan du kjøre:

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

Telegramkanal på Nexus Sonatype: https://t.me/ru_nexus_sonatype

Kun registrerte brukere kan delta i undersøkelsen. Logg inn, vær så snill.

Hvilke artefaktlager bruker du?

  • Sonatype Nexus er gratis

  • Sonatype Nexus betalt

  • Artifactory er gratis

  • Artifactory betalt

  • Havn

  • Pulp

9 brukere stemte. 3 brukere avsto.

Kilde: www.habr.com

Legg til en kommentar