Menginstal dan mengonfigurasi Nexus Sonatype menggunakan pendekatan infrastruktur sebagai kode

Sonatype Nexus adalah platform terintegrasi di mana pengembang dapat melakukan proxy, menyimpan dan mengelola dependensi Java (Maven), Docker, Python, Ruby, NPM, gambar Bower, paket RPM, gitlfs, Apt, Go, Nuget, dan mendistribusikan keamanan perangkat lunak mereka.

Mengapa Anda memerlukan Sonatype Nexus?

  • Untuk menyimpan artefak pribadi;
  • Untuk menyimpan artefak yang diunduh dari Internet;

Artefak yang didukung dalam paket dasar Sonatype Nexus:

  • Java, Maven (botol)
  • Buruh pelabuhan
  • Python (pip)
  • Ruby (permata)
  • NPM
  • Punjung
  • Nyam (rpm)
  • gitlfs
  • Mentah
  • Tepat (deb)
  • Go
  • Nuget

Artefak yang Didukung Komunitas:

  • Menyusun
  • Conan
  • CPAN
  • ELPA
  • Kemudi
  • P2
  • R

Menginstal Sonatype Nexus menggunakan https://github.com/ansible-ThoTeam/nexus3-oss

Persyaratan

  • Baca tentang penggunaan ansible di Internet.
  • Instal mungkin pip install ansible di stasiun kerja tempat buku pedoman dijalankan.
  • Mengatur geerlingguy.java di stasiun kerja tempat buku pedoman dijalankan.
  • Mengatur geerlingguy.apache di stasiun kerja tempat buku pedoman dijalankan.
  • Peran ini telah diuji pada CentOS 7, Ubuntu Xenial (16.04) dan Bionic (18.04), Debian Jessie dan Stretch
  • jmespath Perpustakaan harus diinstal pada workstation tempat playbook dijalankan. Untuk memasang: sudo pip install -r requirements.txt
  • Simpan file playbook (contoh di bawah) ke file nexus.yml
  • Jalankan instalasi nexus ansible-playbook -i host nexus.yml

Contoh buku pedoman yang memungkinkan untuk menginstal nexus tanpa LDAP dengan repositori Maven (java), Docker, Python, Ruby, NPM, Bower, RPM, dan gitlfs.

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

Tangkapan layar:

Menginstal dan mengonfigurasi Nexus Sonatype menggunakan pendekatan infrastruktur sebagai kode

Menginstal dan mengonfigurasi Nexus Sonatype menggunakan pendekatan infrastruktur sebagai kode

Peran variabel

Variabel Peran

Variabel dengan nilai default (lihat default/main.yml):

Variabel umum

    nexus_version: ''
    nexus_timezone: 'UTC'

Secara default, peran tersebut akan menginstal Nexus versi terbaru yang tersedia. Anda dapat memperbaiki versinya dengan mengubah variabel nexus_version. Lihat versi yang tersedia di https://www.sonatype.com/download-oss-sonatype.

Jika Anda mengubah ke versi yang lebih baru, peran tersebut akan mencoba memperbarui instalasi Nexus Anda.

Jika Anda menggunakan Nexus versi lama dibandingkan versi terbaru, Anda harus memastikan bahwa Anda tidak menggunakan fitur yang tidak tersedia dalam rilis terinstal (misalnya, hosting repositori yum tersedia untuk nexus yang lebih besar dari 3.8.0, git lfs repo untuk nexus lebih besar dari 3.3.0 dll.)

nexus timezone adalah nama zona waktu Java, yang dapat berguna jika dikombinasikan dengan ekspresi cron berikut untuk tugas nexus_scheduled.

Port Nexus dan jalur konteks

    nexus_default_port: 8081
    nexus_default_context_path: '/'

Port dan jalur konteks dari proses koneksi Java. nexus_default_context_path harus mengandung garis miring ketika disetel, misalnya: nexus_default_context_path: '/nexus/'.

Pengguna dan Grup Nexus OS

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Pengguna dan grup yang digunakan untuk memiliki file Nexus dan menjalankan layanan akan dibuat berdasarkan peran tersebut jika ada yang hilang.

    nexus_os_user_home_dir: '/home/nexus'

Izinkan mengubah direktori home default untuk pengguna nexus

Direktori instance Nexus

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

Katalog Nexus.

  • nexus_installation_dir berisi file executable yang diinstal
  • nexus_data_dir berisi semua konfigurasi, repositori, dan artefak yang diunduh. Jalur blobstore khusus nexus_data_dir dapat disesuaikan, lihat di bawah nexus_blobstores.
  • nexus_tmp_dir berisi semua file sementara. Jalur default untuk redhat telah dipindahkan /tmp untuk mengatasi potensi masalah dengan prosedur pembersihan otomatis. Lihat #168.

Mengonfigurasi Penggunaan Memori Nexus JVM

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

Ini adalah pengaturan default untuk Nexus. Harap jangan mengubah nilai-nilai ini Jika Anda belum membaca bagian memori persyaratan sistem nexus dan tidak mengerti apa yang mereka lakukan.

Sebagai peringatan kedua, berikut kutipan dari dokumen di atas:

Tidak disarankan untuk meningkatkan memori tumpukan JVM melebihi nilai yang disarankan dalam upaya meningkatkan kinerja. Hal ini sebenarnya dapat menimbulkan efek sebaliknya, mengakibatkan pekerjaan yang tidak diperlukan pada sistem operasi.

Kata sandi administrator

    nexus_admin_password: 'changeme'

Kata sandi akun β€œadmin” untuk pengaturan. Ini hanya berfungsi pada instalasi default pertama. Silakan lihat [Ubah kata sandi admin setelah instalasi pertama](# ubah-kata sandi-admin-setelah-instal pertama) jika Anda ingin mengubahnya nanti menggunakan peran.

Sangat disarankan untuk tidak menyimpan kata sandi Anda dalam teks yang jelas di buku pedoman, tetapi menggunakan [enkripsi brankas yang memungkinkan] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (baik sebaris atau dalam file terpisah yang dimuat dengan misalnya include_vars)

Akses anonim secara default

    nexus_anonymous_access: false

Akses anonim dinonaktifkan secara default. Baca lebih lanjut tentang akses anonim.

Nama host publik

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Nama domain dan skema yang sepenuhnya memenuhi syarat (https atau http) yang digunakan untuk menyediakan instance Nexus kepada kliennya.

Akses API untuk peran ini

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

Variabel-variabel ini mengontrol bagaimana peran terhubung ke Nexus API untuk penyediaan.
Hanya untuk pengguna tingkat lanjut. Anda mungkin tidak ingin mengubah pengaturan default ini

Menyiapkan proxy terbalik

    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

Mengatur Proksi Terbalik SSL.
Untuk melakukan ini, Anda perlu menginstal httpd. Catatan: kapan untuk httpd_setup_enable tetapkan nilaitrue, nexus menghubungi 127.0.0.1:8081, jadi tidak dapat diakses langsung melalui port HTTP 8081 dari alamat IP eksternal.

Nama host default yang digunakan adalah nexus_public_hostname. Jika Anda memerlukan nama yang berbeda karena alasan tertentu, Anda dapat mengaturnya httpd_server_name dengan arti yang berbeda.

Π‘ httpd_copy_ssl_files: true (secara default) sertifikat di atas harus ada di direktori playbook Anda dan akan disalin ke server dan dikonfigurasi di Apache.

Jika Anda ingin menggunakan sertifikat yang ada di server, instal httpd_copy_ssl_files: false dan berikan variabel berikut:

    # 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 bersifat opsional dan tidak boleh disetel jika Anda tidak ingin menyesuaikan file rantai

    httpd_default_admin_email: "[email protected]"

Tetapkan alamat email admin default

Konfigurasi LDAP

Koneksi LDAP dan ranah keamanan dinonaktifkan secara default

    nexus_ldap_realm: false
    ldap_connections: []

koneksi LDAP, setiap elemen terlihat seperti ini:

    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

Contoh konfigurasi LDAP untuk otentikasi anonim (pengikatan anonim), ini juga merupakan konfigurasi "minimal":

    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'

Contoh konfigurasi LDAP untuk autentikasi sederhana (menggunakan akun DSA):

    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

Contoh konfigurasi LDAP untuk autentikasi sederhana (menggunakan akun DSA) + grup yang dipetakan sebagai peran:

    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

Contoh konfigurasi LDAP untuk autentikasi sederhana (menggunakan akun DSA) + grup yang dipetakan secara dinamis sebagai peran:

    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'

Hak istimewa

    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

Daftar hak istimewa untuk pengaturan. Lihat dokumentasi dan GUI untuk memeriksa variabel mana yang perlu disetel bergantung pada jenis hak istimewa.

Elemen-elemen ini digabungkan dengan nilai default berikut:

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

Peran (di dalam Nexus maksudnya)

    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

Daftar peran untuk pengaturan.

Anggota

    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

Daftar pengguna/akun lokal (non-LDAP) yang akan dibuat di nexus.

Daftar pengguna/akun lokal (non-LDAP) yang akan dibuat di Nexus.

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

Pemetaan Ldap pengguna/peran. Negara absent akan menghapus peran dari pengguna yang ada jika sudah ada.
Pengguna Ldap tidak dihapus. Mencoba menetapkan peran untuk pengguna yang tidak ada akan menghasilkan kesalahan.

Pemilih konten

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

Untuk informasi selengkapnya tentang pemilih konten, lihat Dokumentasi.

Untuk menggunakan pemilih konten, tambahkan hak istimewa baru dengan type: repository-content-selector dan relevancontentSelector

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

Blobstore dan repositori

    nexus_delete_default_repos: false

Hapus repositori dari konfigurasi default awal pemasangan nexus. Langkah ini hanya dijalankan pada instalasi pertama kali (saat nexus_data_dir telah terdeteksi kosong).

Menghapus repositori dari konfigurasi default default untuk Nexus. Langkah ini hanya dilakukan pada instalasi pertama (saat nexus_data_dir kosong).

    nexus_delete_default_blobstore: false

Hapus blobstore default dari konfigurasi default awal pemasangan nexus. Hal ini hanya dapat dilakukan jika nexus_delete_default_repos: true dan semua repositori yang dikonfigurasi (lihat di bawah) memiliki eksplisit blob_store: custom. Langkah ini hanya dijalankan pada instalasi pertama kali (saat nexus_data_dir telah terdeteksi kosong).

Menghapus penyimpanan blob (artefak biner) dinonaktifkan secara default dari konfigurasi awal. Untuk menghapus penyimpanan blob (artefak biner), matikan nexus_delete_default_repos: true. Langkah ini hanya dilakukan pada instalasi pertama (saat nexus_data_dir kosong).

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

Toko Blob untuk membuat. Jalur blobstore dan blobstore repositori tidak dapat diperbarui setelah pembuatan awal (pembaruan apa pun di sini akan diabaikan saat penyediaan ulang).

Mengonfigurasi blobstore di S3 disediakan demi kemudahan dan bukan merupakan bagian dari pengujian otomatis yang kami jalankan di travis. Harap perhatikan bahwa penyimpanan di S3 hanya disarankan untuk instans yang diterapkan di AWS.

Penciptaan Toko Blob. Jalur penyimpanan dan repositori penyimpanan tidak dapat diperbarui setelah pembuatan awal (pembaruan apa pun di sini akan diabaikan saat dipasang kembali).

Menyiapkan penyimpanan blob di S3 disediakan demi kemudahan. Harap perhatikan bahwa penyimpanan S3 hanya direkomendasikan untuk instans yang diterapkan di 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

Di atas adalah contoh konfigurasi server proxy Maven.

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

Maven repositori yang dihosting konfigurasi. Konfigurasi cache negatif bersifat opsional dan akan default ke nilai di atas jika dihilangkan.

Konfigurasi repositori yang dihosting Maven. Konfigurasi cache negatif (-1) bersifat opsional dan akan default ke nilai di atas jika tidak ditentukan.

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

Konfigurasi kelompok Maven.

Ketiga tipe repositori digabungkan dengan nilai default berikut:

    _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

Jenis repositori Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS dan yum:
melihat defaults/main.yml untuk opsi ini:

Repositori Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS dan yum dinonaktifkan secara default:
Lihat defaults/main.yml untuk opsi ini:

      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

Harap dicatat bahwa Anda mungkin perlu mengaktifkan cakupan keamanan tertentu jika Anda ingin menggunakan jenis repositori lain selain maven. Ini salah secara default

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # required for docker anonymous access

Ranah Pengguna Jarak Jauh juga dapat diaktifkan menggunakan

nexus_rut_auth_realm: true

dan judul dapat disesuaikan dengan mendefinisikan

nexus_rut_auth_header: "CUSTOM_HEADER"

Tugas yang dijadwalkan

    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"

Tugas yang dijadwalkan untuk pengaturan. typeId dan tugas spesifiktaskProperties/booleanTaskProperties Anda bisa menebak:

  • dari hierarki tipe Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • memeriksa formulir pembuatan tugas HTML di browser Anda
  • dari melihat permintaan AJAX di browser saat menyiapkan tugas secara manual.

Properti tugas harus dideklarasikan di blok yaml yang benar bergantung pada jenisnya:

  • taskProperties untuk semua properti string (yaitu nama repositori, nama repositori, periode waktu...).
  • booleanTaskProperties untuk semua properti logis (yaitu terutama kotak centang di GUI tugas pembuatan nexus).

Cadangan

      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)

Cadangan tidak akan dikonfigurasi sampai Anda beralih nexus_backup_configure Π² true.
Dalam hal ini, tugas skrip terjadwal akan dikonfigurasikan untuk dijalankan di Nexus
pada interval yang ditentukan dalam nexus_backup_cron (defaultnya adalah 21:00 setiap hari).
Lihat [template asyik untuk tugas ini](templates/backup.groovy.j2) untuk detailnya.
Tugas terjadwal ini tidak bergantung pada tugas lain nexus_scheduled_tasksyang Anda
umumkan di buku pedoman Anda.

Jika Anda ingin memutar/menghapus cadangan, instal nexus_backup_rotate: true dan konfigurasikan jumlah cadangan yang ingin Anda simpan nexus_backup_keep_rotations (standar 4).

Saat menggunakan rotasi, jika Anda ingin menghemat ruang disk tambahan selama proses pencadangan,
Anda dapat menginstal nexus_backup_rotate_first: true. Ini akan mengkonfigurasi pra-rotasi/penghapusan sebelum pencadangan. Secara default, rotasi terjadi setelah cadangan dibuat. Harap dicatat bahwa dalam hal ini cadangan lama
akan dihapus sebelum cadangan saat ini dibuat.

Prosedur pemulihan

Jalankan playbook dengan parameter -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(misalnya, 2017-12-17-21-00-00-17 Desember 2017 pukul 21:00

Menghapus perhubungan

Peringatan: Ini akan menghapus data Anda saat ini sepenuhnya. Pastikan untuk membuat cadangan lebih awal jika perlu

Gunakan variabel nexus_purgejika Anda perlu memulai ulang dari awal dan menginstal ulang instance nexus dengan semua data dihapus.

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

Ubah kata sandi administrator setelah instalasi pertama

    nexus_default_admin_password: 'admin123'

Ini tidak boleh diubah dalam buku pedoman Anda. Variabel ini diisi dengan kata sandi admin Nexus default saat pertama kali diinstal dan memastikan bahwa kita dapat mengubah kata sandi admin menjadi nexus_admin_password.

Jika Anda ingin mengubah kata sandi administrator setelah instalasi pertama, Anda dapat mengubahnya untuk sementara ke kata sandi lama dari baris perintah. Setelah perubahan nexus_admin_password di buku pedoman Anda, Anda dapat menjalankan:

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

Saluran Telegram di Nexus Sonatype: https://t.me/ru_nexus_sonatype

Hanya pengguna terdaftar yang dapat berpartisipasi dalam survei. Masuk, silakan.

Repositori artefak apa yang Anda gunakan?

  • Sonatype Nexus gratis

  • Sonatype Nexus berbayar

  • Artifactory gratis

  • Artifactory dibayar

  • Pelabuhan

  • Bubur

9 pengguna memilih. 3 pengguna abstain.

Sumber: www.habr.com

Tambah komentar