Pag-install at pag-configure ng Nexus Sonatype gamit ang imprastraktura bilang diskarte sa code

Ang Sonatype Nexus ay isang pinagsama-samang platform kung saan ang mga developer ay maaaring mag-proxy, mag-imbak at mamahala ng Java (Maven) dependencies, Docker, Python, Ruby, NPM, Bower images, RPM packages, gitlfs, Apt, Go, Nuget, at ipamahagi ang kanilang software security.

Bakit kailangan mo ng Sonatype Nexus?

  • Para sa pag-iimbak ng mga pribadong artifact;
  • Para sa pag-cache ng mga artifact na na-download mula sa Internet;

Mga artifact na sinusuportahan sa pangunahing Sonatype Nexus package:

  • Java, Maven (jar)
  • Manggagawa sa pantalan
  • Python (pip)
  • Ruby (hiyas)
  • NPM
  • Bowers
  • Yum (rpm)
  • gitlfs
  • Hilaw
  • Apt (deb)
  • Go
  • Nugget

Mga Artifact na Sinusuportahan ng Komunidad:

  • kompositor
  • Conan
  • CPAN
  • ELPA
  • timon
  • P2
  • R

Pag-install ng Sonatype Nexus gamit ang https://github.com/ansible-ThoTeam/nexus3-oss

Kinakailangan sa

  • Magbasa tungkol sa paggamit ng ansible sa Internet.
  • I-install ang ansible pip install ansible sa workstation kung saan tumatakbo ang playbook.
  • Itakda geerlingguy.java sa workstation kung saan tumatakbo ang playbook.
  • Itakda geerlingguy.apache sa workstation kung saan tumatakbo ang playbook.
  • Ang papel na ito ay nasubok sa CentOS 7, Ubuntu Xenial (16.04) at Bionic (18.04), Debian Jessie at Stretch
  • jmespath Dapat na naka-install ang library sa workstation kung saan tumatakbo ang playbook. Upang i-install: sudo pip install -r requirements.txt
  • I-save ang playbook file (halimbawa sa ibaba) sa nexus.yml file
  • Patakbuhin ang pag-install ng nexus ansible-playbook -i host nexus.yml

Halimbawa ng ansible-playbook para sa pag-install ng nexus nang walang LDAP na may Maven (java), Docker, Python, Ruby, NPM, Bower, RPM at gitlfs repository.

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

Mga screenshot:

Pag-install at pag-configure ng Nexus Sonatype gamit ang imprastraktura bilang diskarte sa code

Pag-install at pag-configure ng Nexus Sonatype gamit ang imprastraktura bilang diskarte sa code

Mga variable na tungkulin

Mga Variable ng Tungkulin

Mga variable na may mga default na halaga (tingnan default/main.yml):

Pangkalahatang mga variable

    nexus_version: ''
    nexus_timezone: 'UTC'

Bilang default, i-install ng tungkulin ang pinakabagong available na bersyon ng Nexus. Maaari mong ayusin ang bersyon sa pamamagitan ng pagpapalit ng variable nexus_version. Tingnan ang mga available na bersyon sa https://www.sonatype.com/download-oss-sonatype.

Kung lilipat ka sa isang mas bagong bersyon, susubukan ng tungkulin na i-update ang iyong pag-install ng Nexus.

Kung gumagamit ka ng mas lumang bersyon ng Nexus kaysa sa pinakabago, dapat mong tiyakin na hindi ka gumagamit ng mga feature na hindi available sa naka-install na release (halimbawa, ang pagho-host ng mga yum repository ay available para sa nexus na higit sa 3.8.0, git lfs repo. para sa nexus na higit sa 3.3.0 atbp.)

nexus timezone ay ang pangalan ng Java time zone, na maaaring maging kapaki-pakinabang sa kumbinasyon ng mga sumusunod na cron expression para sa nexus_scheduled na mga gawain.

Nexus port at path ng konteksto

    nexus_default_port: 8081
    nexus_default_context_path: '/'

Ang port at path ng konteksto ng proseso ng koneksyon sa Java. nexus_default_context_path dapat maglaman ng forward slash kapag nakatakda ito, hal: nexus_default_context_path: '/nexus/'.

Gumagamit at Grupo ng Nexus OS

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

Ang user at pangkat na dating nagmamay-ari ng mga Nexus file at nagpapatakbo ng serbisyo ay gagawin ng tungkulin kung may nawawala.

    nexus_os_user_home_dir: '/home/nexus'

Payagan ang pagbabago ng default na home directory para sa nexus user

Mga direktoryo ng halimbawa ng Nexus

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

Mga Katalogo ng Nexus.

  • nexus_installation_dir naglalaman ng mga naka-install na executable na file
  • nexus_data_dir naglalaman ng lahat ng configuration, repository at na-download na artifact. Mga custom na path ng blobstore nexus_data_dir maaaring i-customize, tingnan sa ibaba nexus_blobstores.
  • nexus_tmp_dir naglalaman ng lahat ng pansamantalang file. Ang default na landas para sa redhat ay inilipat mula sa /tmp upang malampasan ang mga potensyal na problema sa mga awtomatikong pamamaraan ng paglilinis. Tingnan ang #168.

Pag-configure ng Nexus JVM Memory Usage

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

Ito ang mga default na setting para sa Nexus. Mangyaring huwag baguhin ang mga halagang ito Kung hindi mo pa nabasa seksyon ng memorya ng mga kinakailangan ng sistema ng nexus at hindi maintindihan kung ano ang kanilang ginagawa.

Bilang pangalawang babala, narito ang isang sipi mula sa dokumento sa itaas:

Hindi inirerekumenda na dagdagan ang memorya ng JVM heap na lampas sa mga inirekumendang halaga sa pagtatangkang mapabuti ang pagganap. Ito ay maaaring aktwal na magkaroon ng kabaligtaran na epekto, na nagreresulta sa hindi kinakailangang trabaho para sa operating system.

Password ng administrator

    nexus_admin_password: 'changeme'

Ang password ng "admin" account para sa pag-setup. Gumagana lamang ito sa unang default na pag-install. Pakitingnan ang [Baguhin ang password ng admin pagkatapos ng unang pag-install](# change-admin-password-after-first-install) kung gusto mo itong baguhin sa ibang pagkakataon gamit ang isang tungkulin.

Lubos na inirerekomenda na huwag iimbak ang iyong password sa malinaw na teksto sa playbook, ngunit gamitin ang [ansible-vault encryption] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (alinman sa inline o sa isang hiwalay na file na puno ng hal. include_vars)

Anonymous na pag-access bilang default

    nexus_anonymous_access: false

Ang anonymous na pag-access ay hindi pinagana bilang default. Magbasa pa tungkol sa hindi kilalang pag-access.

Pampublikong hostname

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Ang ganap na kwalipikadong domain name at scheme (https o http) kung saan ang Nexus instance ay magiging available sa mga kliyente nito.

API access para sa tungkuling ito

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

Kinokontrol ng mga variable na ito kung paano kumokonekta ang tungkulin sa Nexus API para sa provisioning.
Para sa mga advanced na user lamang. Malamang na ayaw mong baguhin ang mga default na setting na ito

Pagse-set up ng reverse 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

Itakda SSL Reverse Proxy.
Upang gawin ito kailangan mong i-install ang httpd. Tandaan: kailan para sa httpd_setup_enable itakda ang halagatrue, mga contact sa nexus 127.0.0.1:8081, kaya hindi pagiging direktang naa-access sa pamamagitan ng HTTP port 8081 mula sa panlabas na IP address.

Ang default na hostname na ginamit ay nexus_public_hostname. Kung kailangan mo ng iba't ibang mga pangalan para sa ilang kadahilanan, maaari mong itakda httpd_server_name na may ibang kahulugan.

Π‘ httpd_copy_ssl_files: true (bilang default) ang mga sertipiko sa itaas ay dapat na umiiral sa iyong direktoryo ng playbook at makokopya sa server at mai-configure sa apache.

Kung gusto mong gumamit ng mga umiiral nang certificate sa server, i-install httpd_copy_ssl_files: false at ibigay ang mga sumusunod na variable:

    # 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 ay opsyonal at dapat iwanang hindi nakatakda kung ayaw mong i-customize ang chain file

    httpd_default_admin_email: "[email protected]"

Itakda ang default na email address ng admin

Configuration ng LDAP

Ang mga koneksyon sa LDAP at larangan ng seguridad ay hindi pinagana bilang default

    nexus_ldap_realm: false
    ldap_connections: []

Mga koneksyon sa LDAP, ang bawat elemento ay ganito ang hitsura:

    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

Halimbawa ng configuration ng LDAP para sa anonymous na pagpapatotoo (anonymous binding), isa rin itong "minimal" na configuration:

    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'

Halimbawa ng configuration ng LDAP para sa simpleng pagpapatotoo (gamit ang DSA account):

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP config with DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # better keep passwords in an ansible vault
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_user_base_dn: 'ou=users'
        ldap_user_object_class: 'inetOrgPerson'
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_user_subtree: false

Halimbawang configuration ng LDAP para sa simpleng pagpapatotoo (gamit ang DSA account) + mga pangkat na nakamapa bilang mga tungkulin:

    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

Halimbawang configuration ng LDAP para sa simpleng pag-authenticate (gamit ang DSA account) + mga pangkat na dynamic na nakamapa bilang mga tungkulin:

    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'

Mga Pribilehiyo

    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

Listahan mga pribilehiyo para sa mga setting. Tingnan ang dokumentasyon at GUI upang suriin kung aling mga variable ang kailangang itakda depende sa uri ng pribilehiyo.

Ang mga elementong ito ay pinagsama sa mga sumusunod na default na halaga:

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

Mga Tungkulin (sa loob ng Nexus ang ibig sabihin nito)

    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

Listahan mga tungkulin para sa mga setting.

Mga gumagamit

    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

Listahan ng mga lokal (hindi LDAP) na user/account na gagawin sa nexus.

Listahan ng mga lokal (hindi LDAP) na user/account na gagawin sa Nexus.

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

Ldap mapping ng mga user/role. Estado absent ay mag-aalis ng mga tungkulin mula sa isang umiiral nang user kung mayroon na.
Ang mga gumagamit ng Ldap ay hindi tinatanggal. Ang pagsubok na magtakda ng tungkulin para sa isang hindi umiiral na user ay magreresulta sa isang error.

Mga tagapili ng nilalaman

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

Para sa higit pang impormasyon tungkol sa tagapili ng nilalaman, tingnan Dokumentasyon.

Upang magamit ang tagapili ng nilalaman, magdagdag ng bagong pribilehiyo sa type: repository-content-selector at may kaugnayancontentSelector

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

Mga blobstore at repository

    nexus_delete_default_repos: false

Tanggalin ang mga repository mula sa nexus install initial default configuration. Ang hakbang na ito ay isinasagawa lamang sa unang beses na pag-install (kapag nexus_data_dir ay nakitang walang laman).

Pag-alis ng mga repository mula sa default na default na configuration para sa Nexus. Ang hakbang na ito ay isinasagawa lamang sa unang pag-install (kapag nexus_data_dir walang laman).

    nexus_delete_default_blobstore: false

Tanggalin ang default na blobstore mula sa nexus install initial default configuration. Magagawa lamang ito kung nexus_delete_default_repos: true at lahat ng naka-configure na repository (tingnan sa ibaba) ay may tahasang blob_store: custom. Ang hakbang na ito ay isinasagawa lamang sa unang beses na pag-install (kapag nexus_data_dir ay nakitang walang laman).

Ang pag-alis ng blob storage (binary artifacts) ay hindi pinagana bilang default mula sa paunang configuration. Para alisin ang blob storage (binary artifacts), i-off nexus_delete_default_repos: true. Ang hakbang na ito ay isinasagawa lamang sa unang pag-install (kapag nexus_data_dir walang laman).

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

Mga Blobstore gumawa. Ang isang blobstore path at isang repository na blobstore ay hindi maa-update pagkatapos ng paunang paggawa (anumang update dito ay hindi papansinin sa muling pagbibigay).

Ang pag-configure ng blobstore sa S3 ay ibinibigay bilang kaginhawahan at hindi bahagi ng mga automated na pagsubok na pinapatakbo namin sa travis. Pakitandaan na ang pag-iimbak sa S3 ay inirerekomenda lamang para sa mga pagkakataong naka-deploy sa AWS.

Paglikha Mga Blobstore. Ang landas ng imbakan at imbakan ng imbakan ay hindi maa-update pagkatapos ng paunang paggawa (anumang pag-update dito ay hindi papansinin kapag na-install muli).

Ang pag-set up ng blob storage sa S3 ay ibinibigay bilang kaginhawahan. Pakitandaan na ang S3 storage ay inirerekomenda lamang para sa mga pagkakataong naka-deploy sa 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

Sa itaas ay isang halimbawang pagsasaayos 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 naka-host na mga repositoryo pagsasaayos. Opsyonal ang negatibong cache config at magiging default sa mga value sa itaas kung aalisin.

Configuration naka-host na mga repositoryo Maven. Ang negatibong pagsasaayos ng cache (-1) ay opsyonal at magiging default sa mga halaga sa itaas kung hindi tinukoy.

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

Configuration mga grupo Maven.

Lahat ng tatlong uri ng repository ay pinagsama sa mga sumusunod na default na halaga:

    _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

Mga uri ng Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS at yum repository:
makita defaults/main.yml para sa mga pagpipiliang ito:

Ang Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS at yum repository ay hindi pinagana bilang default:
Tingnan defaults/main.yml para sa mga pagpipiliang ito:

      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

Pakitandaan na maaaring kailanganin mong paganahin ang ilang partikular na saklaw ng seguridad kung gusto mong gumamit ng iba pang uri ng mga repository maliban sa maven. Ito ay mali bilang default

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

Ang Remote User Realm ay maaari ding paganahin gamit ang

nexus_rut_auth_realm: true

at ang pamagat ay maaaring ipasadya sa pamamagitan ng pagtukoy

nexus_rut_auth_header: "CUSTOM_HEADER"

Mga naka-iskedyul na gawain

    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"

Mga naka-iskedyul na gawain para sa mga setting. typeId at tiyak na gawaintaskProperties/booleanTaskProperties maaari mong hulaan alinman:

  • mula sa hierarchy ng uri ng Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • pagsuri sa form ng paggawa ng HTML na gawain sa iyong browser
  • mula sa pagtingin sa mga kahilingan ng AJAX sa browser kapag manu-manong nagse-set up ng isang gawain.

Ang mga katangian ng gawain ay dapat ideklara sa tamang yaml block depende sa kanilang uri:

  • taskProperties para sa lahat ng mga katangian ng string (ibig sabihin, mga pangalan ng imbakan, mga pangalan ng imbakan, mga yugto ng panahon...).
  • booleanTaskProperties para sa lahat ng lohikal na pag-aari (i.e. pangunahing mga checkbox sa GUI ng gawain sa paglikha ng nexus).

Mga backup

      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)

Hindi mako-configure ang backup hanggang sa lumipat ka nexus_backup_configure Π² true.
Sa kasong ito, ang naka-iskedyul na gawain sa script ay iko-configure upang tumakbo sa Nexus
sa pagitan na tinukoy sa nexus_backup_cron (default 21:00 araw-araw).
Tingnan ang [groovy template para sa gawaing ito](templates/backup.groovy.j2) para sa mga detalye.
Ang nakaiskedyul na gawaing ito ay independyente sa iba nexus_scheduled_tasksna ikaw
ipahayag sa iyong playbook.

Kung gusto mong i-rotate/delete ang mga backup, i-install nexus_backup_rotate: true at i-configure ang bilang ng mga backup na gusto mong i-save gamit nexus_backup_keep_rotations (default 4).

Kapag gumagamit ng pag-ikot, kung gusto mong makatipid ng karagdagang espasyo sa disk sa panahon ng proseso ng pag-backup,
Maaari mong i-install nexus_backup_rotate_first: true. Iko-configure nito ang pre-rotation/delete bago ang backup. Bilang default, nangyayari ang pag-ikot pagkatapos gumawa ng backup. Pakitandaan na sa kasong ito ang mga lumang backup
ay tatanggalin bago gawin ang kasalukuyang backup.

Pamamaraan sa pagbawi

Patakbuhin ang playbook na may parameter -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(halimbawa, 2017-12-17-21-00-00 para sa Disyembre 17, 2017 nang 21:00

Tinatanggal ang nexus

Babala: Ito ay ganap na tatanggalin ang iyong kasalukuyang data. Tiyaking gumawa ng backup nang mas maaga kung kinakailangan

Gumamit ng variable nexus_purgekung kailangan mong i-restart mula sa simula at muling i-install ang nexus instance na inalis ang lahat ng data.

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

Baguhin ang password ng administrator pagkatapos ng unang pag-install

    nexus_default_admin_password: 'admin123'

Hindi ito dapat baguhin sa iyong playbook. Ang variable na ito ay na-populate ng default na Nexus admin password noong unang na-install at tinitiyak na maaari naming baguhin ang admin password sa nexus_admin_password.

Kung gusto mong baguhin ang password ng administrator pagkatapos ng unang pag-install, maaari mo itong pansamantalang baguhin sa lumang password mula sa command line. Pagkatapos ng pagbabago nexus_admin_password sa iyong playbook maaari mong patakbuhin ang:

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

Telegram channel sa Nexus Sonatype: https://t.me/ru_nexus_sonatype

Ang mga rehistradong user lamang ang maaaring lumahok sa survey. Mag-sign in, pakiusap

Anong mga artifact repository ang ginagamit mo?

  • Ang Sonatype Nexus ay libre

  • Binayaran ang Sonatype Nexus

  • Libre ang artifactory

  • Binayaran ang artifactory

  • Daungan

  • Sapal

9 mga gumagamit ang bumoto. 3 user ang umiwas.

Pinagmulan: www.habr.com

Magdagdag ng komento