Instalacija i konfiguracija Nexus Sonatype korištenjem pristupa infrastrukture kao koda

Sonatype Nexus je integrirana platforma preko koje programeri mogu proxy, pohraniti i upravljati Java (Maven) ovisnostima, Docker, Python, Ruby, NPM, Bower slike, RPM paketi, gitlfs, Apt, Go, Nuget i distribuirati svoju softversku sigurnost.

Zašto vam je potreban Sonatype Nexus?

  • Za pohranu privatnih artefakata;
  • Za predmemoriranje artefakata koji su preuzeti s interneta;

Artefakti podržani u osnovnom Sonatype Nexus paketu:

  • Java, Maven (jar)
  • Lučki radnik
  • Python (pip)
  • Rubin (dragulj)
  • NPM
  • sjenica
  • Njam (o/min)
  • gitlfs
  • Sirov
  • Apt (deb)
  • Go
  • Grumen

Artefakti koje podržava zajednica:

  • kompozitor
  • Conan
  • CPAN
  • ELPA
  • Kormilo
  • P2
  • R

Instalacija Sonatype Nexusa pomoću https://github.com/ansible-ThoTeam/nexus3-oss

Zahtjevi

  • Pročitajte o korištenju ansiblea na internetu.
  • Instalirajte ansible pip install ansible na radnoj stanici na kojoj se izvodi playbook.
  • Postaviti geerlingguy.java na radnoj stanici na kojoj se izvodi playbook.
  • Postaviti geerlingguy.apache na radnoj stanici na kojoj se izvodi playbook.
  • Ova je uloga testirana na CentOS 7, Ubuntu Xenial (16.04) i Bionic (18.04), Debian Jessie i Stretch
  • jmespath Knjižnica mora biti instalirana na radnoj stanici na kojoj se izvodi playbook. Instalirati: sudo pip install -r requirements.txt
  • Spremite datoteku playbook (primjer u nastavku) u datoteku nexus.yml
  • Pokrenite instalaciju nexusa ansible-playbook -i host nexus.yml

Primjer ansible-playbook za instaliranje nexusa bez LDAP-a s Maven (java), Docker, Python, Ruby, NPM, Bower, RPM i gitlfs spremištima.

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

Slike:

Instalacija i konfiguracija Nexus Sonatype korištenjem pristupa infrastrukture kao koda

Instalacija i konfiguracija Nexus Sonatype korištenjem pristupa infrastrukture kao koda

Promjenjive uloge

Varijable uloga

Varijable sa zadanim vrijednostima (vidi default/main.yml):

Opće varijable

    nexus_version: ''
    nexus_timezone: 'UTC'

Prema zadanim postavkama, uloga će instalirati najnoviju dostupnu verziju Nexusa. Možete popraviti verziju promjenom varijable nexus_version. Dostupne verzije pogledajte na https://www.sonatype.com/download-oss-sonatype.

Ako prijeđete na noviju verziju, uloga će pokušati ažurirati vašu instalaciju Nexusa.

Ako koristite stariju verziju Nexusa od najnovije, trebali biste osigurati da ne koristite značajke koje nisu dostupne u instaliranom izdanju (na primjer, hosting yum repozitorija dostupan je za nexus više od 3.8.0, git lfs repo za nexus veći od 3.3.0 itd.)

nexus timezone je naziv Java vremenske zone, što može biti korisno u kombinaciji sa sljedećim cron izrazima za nexus_scheduled zadatke.

Nexus port i kontekstni put

    nexus_default_port: 8081
    nexus_default_context_path: '/'

Port i kontekstni put procesa Java veze. nexus_default_context_path mora sadržavati kosu crtu kada je postavljena, npr.: nexus_default_context_path: '/nexus/'.

Nexus OS korisnik i grupa

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Korisnik i grupa koji se koriste za posjedovanje Nexus datoteka i pokretanje usluge stvorit će se ulogom ako ona nedostaje.

    nexus_os_user_home_dir: '/home/nexus'

Dopusti promjenu zadanog matičnog direktorija za korisnika nexusa

Imenici instanci Nexusa

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

Nexus katalozi.

  • nexus_installation_dir sadrži instalirane izvršne datoteke
  • nexus_data_dir sadrži sve konfiguracije, repozitorije i preuzete artefakte. Prilagođene staze blobstorea nexus_data_dir može se prilagoditi, vidi dolje nexus_blobstores.
  • nexus_tmp_dir sadrži sve privremene datoteke. Zadana staza za redhat je premještena s /tmp za prevladavanje potencijalnih problema s automatskim postupcima čišćenja. Vidi #168.

Konfiguriranje korištenja memorije Nexus JVM

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

Ovo su zadane postavke za Nexus. Molimo nemojte mijenjati ove vrijednosti Ako niste čitali nexus sistemski zahtjevi memorijski odjeljak i ne razumiju što rade.

Kao drugo upozorenje, evo izvatka iz gornjeg dokumenta:

Ne preporučuje se povećanje JVM heap memorije iznad preporučenih vrijednosti u pokušaju poboljšanja performansi. To zapravo može imati suprotan učinak, rezultirajući nepotrebnim radom za operativni sustav.

Administratorska lozinka

    nexus_admin_password: 'changeme'

Lozinka računa "admin" za postavljanje. Ovo radi samo na prvoj zadanoj instalaciji. Pogledajte [Promjena administratorske lozinke nakon prve instalacije](# change-admin-password-after-first-install) ako je želite promijeniti kasnije koristeći ulogu.

Strogo se preporučuje da svoju lozinku ne pohranjujete u jasnom tekstu u priručniku, već da koristite [ansible-vault enkripciju] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (umetnuto ili u zasebnoj datoteci učitanoj s npr. include_vars)

Anonimni pristup prema zadanim postavkama

    nexus_anonymous_access: false

Anonimni pristup je prema zadanim postavkama onemogućen. Pročitajte više o anonimni pristup.

Javno ime hosta

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Potpuno kvalificirani naziv domene i shema (https ili http) pod kojom će instanca Nexusa biti dostupna svojim klijentima.

API pristup za ovu ulogu

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

Ove varijable kontroliraju kako se uloga povezuje s Nexus API-jem za dodjelu.
Samo za napredne korisnike. Vjerojatno ne želite promijeniti ove zadane postavke

Postavljanje obrnutog proxyja

    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

Postaviti SSL obrnuti proxy.
Da biste to učinili morate instalirati httpd. Napomena: kada za httpd_setup_enable postavljena vrijednosttrue, nexus kontakti 127.0.0.1:8081, dakle ne kojima se može izravno pristupiti putem HTTP porta 8081 s vanjske IP adrese.

Zadani naziv hosta koji se koristi je nexus_public_hostname. Ako iz nekog razloga trebate drugačija imena, možete postaviti httpd_server_name s drugačijim značenjem.

С httpd_copy_ssl_files: true (prema zadanim postavkama) gornji certifikati trebali bi postojati u vašem imeniku playbooka i bit će kopirani na poslužitelj i konfigurirani u apacheu.

Ako želite koristiti postojeće certifikate na poslužitelju, instalirajte httpd_copy_ssl_files: false i navedite sljedeće varijable:

    # 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 nije obavezno i ​​ne treba ga postaviti ako ne želite prilagoditi datoteku lanca

    httpd_default_admin_email: "[email protected]"

Postavite zadanu adresu e-pošte administratora

LDAP konfiguracija

LDAP veze i sigurnosno područje onemogućeni su prema zadanim postavkama

    nexus_ldap_realm: false
    ldap_connections: []

LDAP veze, svaki element izgleda ovako:

    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

Primjer LDAP konfiguracije za anonimnu provjeru autentičnosti (anonimno vezanje), ovo je također "minimalna" konfiguracija:

    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'

Primjer LDAP konfiguracije za jednostavnu provjeru autentičnosti (pomoću DSA računa):

    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

Primjer LDAP konfiguracije za jednostavnu provjeru autentičnosti (koristeći DSA račun) + grupe mapirane kao uloge:

    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

Primjer LDAP konfiguracije za jednostavnu provjeru autentičnosti (koristeći DSA račun) + grupe dinamički mapirane kao uloge:

    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'

povlastice

    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

popis privilegije za postavke. Pogledajte dokumentaciju i GUI kako biste provjerili koje varijable je potrebno postaviti ovisno o vrsti povlastice.

Ovi se elementi kombiniraju sa sljedećim zadanim vrijednostima:

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

Uloge (unutar Nexusa to znači)

    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

popis uloge za postavke.

Članovi

    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

Lokalni (ne-LDAP) popis korisnika/računa za izradu u nexusu.

Popis lokalnih (ne-LDAP) korisnika/računa za izradu u Nexusu.

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

Ldap mapiranje korisnika/uloga. država absent će ukloniti uloge postojećeg korisnika ako već postoji.
Ldap korisnici se ne brišu. Pokušaj postavljanja uloge za nepostojećeg korisnika rezultirat će pogreškom.

Selektori sadržaja

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

Za više informacija o biraču sadržaja pogledajte Dokumentacija.

Za korištenje birača sadržaja dodajte novu privilegiju s type: repository-content-selector i relevantancontentSelector

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

Blobstorevi i repozitoriji

    nexus_delete_default_repos: false

Izbrišite repozitorije iz početne zadane konfiguracije instalacije nexusa. Ovaj korak se izvršava samo pri prvoj instalaciji (kada nexus_data_dir otkrivena je prazna).

Uklanjanje spremišta iz zadane konfiguracije za Nexus. Ovaj se korak izvodi samo tijekom prve instalacije (kada nexus_data_dir prazan).

    nexus_delete_default_blobstore: false

Izbrišite zadani blobstore iz početne zadane konfiguracije instalacije nexusa. To se može učiniti samo ako nexus_delete_default_repos: true i sva konfigurirana spremišta (vidi dolje) imaju eksplicitnu blob_store: custom. Ovaj korak se izvršava samo pri prvoj instalaciji (kada nexus_data_dir otkrivena je prazna).

Uklanjanje blob pohrane (binarni artefakti) onemogućeno je prema zadanim postavkama u početnoj konfiguraciji. Za uklanjanje blob memorije (binarni artefakti), isključite nexus_delete_default_repos: true. Ovaj se korak izvodi samo tijekom prve instalacije (kada nexus_data_dir prazan).

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

Trgovine mrljama stvoriti. Put blobstorea i spremište blobstorea ne mogu se ažurirati nakon početnog stvaranja (svako ažuriranje ovdje bit će zanemareno pri ponovnom postavljanju).

Konfiguriranje blobstorea na S3 pruža se kao pogodnost i nije dio automatiziranih testova koje izvodimo na travisu. Imajte na umu da se pohranjivanje na S3 preporučuje samo za instance postavljene na AWS.

Stvaranje Trgovine mrljama. Putanja za pohranjivanje i repozitorij za pohranjivanje ne mogu se ažurirati nakon početnog stvaranja (svako ažuriranje ovdje bit će zanemareno kada se ponovno instalira).

Postavljanje blob pohrane na S3 pruža se kao pogodnost. Imajte na umu da se S3 pohrana preporučuje samo za instance raspoređene na AWS-u.

    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

Gore je primjer konfiguracije proxy poslužitelj Maven.

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

Maven hostirana spremišta konfiguracija. Negativna konfiguracija predmemorije nije obavezna i postavit će zadane gornje vrijednosti ako su izostavljene.

Konfiguracija hostirana spremišta Maven. Negativna konfiguracija predmemorije (-1) nije obavezna i prema zadanim postavkama postavit će gornje vrijednosti ako nije navedena.

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

Konfiguracija grupe Maven.

Sve tri vrste repozitorija kombinirane su sa sljedećim zadanim vrijednostima:

    _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

Vrste spremišta Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS i yum:
vidjeti defaults/main.yml za ove opcije:

Spremišta Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS i yum onemogućena su prema zadanim postavkama:
Vidjeti defaults/main.yml za ove opcije:

      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

Imajte na umu da ćete možda morati omogućiti određene sigurnosne opsege ako želite koristiti druge vrste repozitorija osim maven-a. Ovo je prema zadanim postavkama netočno

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 također se može omogućiti pomoću

nexus_rut_auth_realm: true

a naslov se može prilagoditi definiranjem

nexus_rut_auth_header: "CUSTOM_HEADER"

Planirani zadaci

    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"

Planirani zadaci za postavke. typeId i specifičan zadataktaskProperties/booleanTaskProperties možete pogoditi ili:

  • iz hijerarhije Java tipova org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • provjeravajući obrazac za izradu HTML zadatka u vašem pregledniku
  • od gledanja AJAX zahtjeva u pregledniku prilikom ručnog postavljanja zadatka.

Svojstva zadatka moraju biti deklarirana u ispravnom yaml bloku ovisno o njihovoj vrsti:

  • taskProperties za sva svojstva niza (tj. imena spremišta, imena spremišta, vremenska razdoblja...).
  • booleanTaskProperties za sva logička svojstva (tj. uglavnom potvrdne okvire u GUI zadatka stvaranja nexusa).

Sigurnosne kopije

      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)

Sigurnosno kopiranje neće biti konfigurirano dok se ne prebacite nexus_backup_configure в true.
U ovom slučaju, zakazani zadatak skripte bit će konfiguriran za izvođenje na Nexusu
u intervalu navedenom u nexus_backup_cron (zadano 21:00 svaki dan).
Pogledajte [groovy predložak za ovaj zadatak](templates/backup.groovy.j2) za detalje.
Ovaj planirani zadatak je neovisan o ostalima nexus_scheduled_taskskoji ti
najavite u svojoj knjižici.

Ako želite rotirati/brisati sigurnosne kopije, instalirajte nexus_backup_rotate: true i konfigurirajte broj sigurnosnih kopija pomoću kojih želite spremiti nexus_backup_keep_rotations (zadano 4).

Kada koristite rotaciju, ako želite uštedjeti dodatni prostor na disku tijekom procesa izrade sigurnosne kopije,
Možete instalirati nexus_backup_rotate_first: true. Ovo će konfigurirati prethodnu rotaciju/brisanje prije sigurnosne kopije. Prema zadanim postavkama, rotacija se događa nakon stvaranja sigurnosne kopije. Imajte na umu da u ovom slučaju stare sigurnosne kopije
će se izbrisati prije izrade trenutne sigurnosne kopije.

Procedura obnavljanja

Pokrenite playbook s parametrom -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(na primjer, 2017-12-17-21-00-00 za 17. prosinca 2017. u 21:00

Uklanjanje nexusa

Upozorenje: ovo će u potpunosti izbrisati vaše trenutne podatke. Svakako napravite sigurnosnu kopiju ranije ako je potrebno

Koristite varijablu nexus_purgeako trebate ponovno pokrenuti ispočetka i ponovno instalirati nexus instancu sa svim uklonjenim podacima.

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

Promijenite administratorsku lozinku nakon prve instalacije

    nexus_default_admin_password: 'admin123'

Ovo se ne bi trebalo mijenjati u vašem priručniku. Ova se varijabla popunjava zadanom administratorskom lozinkom Nexusa prilikom prve instalacije i osigurava da možemo promijeniti administratorsku lozinku u nexus_admin_password.

Ako želite promijeniti administratorsku lozinku nakon prve instalacije, možete je privremeno promijeniti u staru lozinku iz naredbenog retka. Nakon promjene nexus_admin_password u svom playbooku možete pokrenuti:

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

Telegram kanal na Nexus Sonatype: https://t.me/ru_nexus_sonatype

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Koja spremišta artefakata koristite?

  • Sonatype Nexus je besplatan

  • Sonatype Nexus plaćen

  • Artifactory je besplatan

  • Artifactory plaćeno

  • Luka

  • Pulpa

Glasovalo je 9 korisnika. Suzdržana su bila 3 korisnika.

Izvor: www.habr.com

Dodajte komentar