تثبيت وتكوين Nexus Sonatype باستخدام البنية التحتية كنهج للتعليمات البرمجية

Sonatype Nexus عبارة عن منصة متكاملة يمكن للمطورين من خلالها تفويض وتخزين وإدارة تبعيات Java (Maven)، وDocker، وPython، وRuby، وNPM، وصور Bower، وحزم RPM، وgitlfs، وApt، وGo، وNuget، وتوزيع أمان البرامج الخاصة بهم.

لماذا تحتاج Sonatype Nexus؟

  • لتخزين القطع الأثرية الخاصة؛
  • للتخزين المؤقت للعناصر التي تم تنزيلها من الإنترنت؛

القطع الأثرية المدعومة في حزمة Sonatype Nexus الأساسية:

  • جافا، مافن (جرة)
  • عامل في حوض السفن
  • بايثون (نقطة)
  • روبي (جوهرة)
  • الآلية الوقائية الوطنية
  • تعريشة
  • يم (دورة في الدقيقة)
  • com.gitlfs
  • الخام
  • شقة (ديب)
  • Go
  • نوجيت

التحف المدعومة من المجتمع:

  • ملحن
  • كونان
  • CPAN
  • إلبا
  • قاد
  • P2
  • R

تثبيت Sonatype Nexus باستخدام https://github.com/ansible-ThoTeam/nexus3-oss

متطلبات

  • اقرأ عن استخدام ansible على الإنترنت.
  • تثبيت غير معقول pip install ansible على محطة العمل حيث يتم تشغيل قواعد اللعبة.
  • ضبط geerlingguy.java على محطة العمل حيث يتم تشغيل قواعد اللعبة.
  • ضبط geerlingguy.Apache على محطة العمل حيث يتم تشغيل قواعد اللعبة.
  • تم اختبار هذا الدور على CentOS 7 وUbuntu Xenial (16.04) وBionic (18.04) وDebian Jessie وStretch.
  • jmespath يجب تثبيت المكتبة على محطة العمل حيث يتم تشغيل قواعد اللعبة. لتثبيت: sudo pip install -r requirements.txt
  • احفظ ملف قواعد اللعبة (المثال أدناه) في ملف nexus.yml
  • قم بتشغيل تثبيت Nexus ansible-playbook -i host nexus.yml

مثال على قواعد اللعبة غير الملائمة لتثبيت nexus بدون LDAP مع مستودعات Maven (java) وDocker وPython وRuby وNPM وBower وRPM و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'] }

لقطات:

تثبيت وتكوين Nexus Sonatype باستخدام البنية التحتية كنهج للتعليمات البرمجية

تثبيت وتكوين Nexus Sonatype باستخدام البنية التحتية كنهج للتعليمات البرمجية

أدوار متغيرة

متغيرات الدور

المتغيرات ذات القيم الافتراضية (انظر default/main.yml):

المتغيرات العامة

    nexus_version: ''
    nexus_timezone: 'UTC'

افتراضيًا، سيقوم الدور بتثبيت أحدث إصدار متاح من Nexus. يمكنك إصلاح الإصدار عن طريق تغيير المتغير nexus_version. انظر الإصدارات المتاحة في https://www.sonatype.com/download-oss-sonatype.

إذا قمت بالتغيير إلى إصدار أحدث، فسيحاول الدور تحديث تثبيت Nexus الخاص بك.

إذا كنت تستخدم إصدارًا أقدم من الإصدار الأحدث من Nexus، فيجب عليك التأكد من أنك لا تستخدم ميزات غير متوفرة في الإصدار المثبت (على سبيل المثال، استضافة مستودعات yum متاحة لـ nexus أكبر من 3.8.0، git lfs repo للرابطة أكبر من 3.3.0 وما إلى ذلك)

nexus timezone هو اسم المنطقة الزمنية لـ Java، والذي يمكن أن يكون مفيدًا مع تعبيرات cron التالية للمهام nexus_scheduled.

منفذ Nexus ومسار السياق

    nexus_default_port: 8081
    nexus_default_context_path: '/'

المنفذ ومسار السياق لعملية اتصال Java. nexus_default_context_path يجب أن تحتوي على شرطة مائلة للأمام عند ضبطها، على سبيل المثال: nexus_default_context_path: '/nexus/'.

مستخدم والمجموعة لنظام التشغيل Nexus

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

سيتم إنشاء المستخدم والمجموعة المستخدمة لامتلاك ملفات Nexus وتشغيل الخدمة من خلال الدور في حالة فقدان أحدهما.

    nexus_os_user_home_dir: '/home/nexus'

السماح بتغيير الدليل الرئيسي الافتراضي لمستخدم nexus

أدلة مثيل Nexus

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

كتالوجات نيكزس.

  • nexus_installation_dir يحتوي على ملفات قابلة للتنفيذ مثبتة
  • nexus_data_dir يحتوي على جميع التكوينات والمستودعات والعناصر التي تم تنزيلها. مسارات blobstore المخصصة nexus_data_dir يمكن تخصيصها، انظر أدناه nexus_blobstores.
  • nexus_tmp_dir يحتوي على كافة الملفات المؤقتة. تم نقل المسار الافتراضي لـ redhat من /tmp للتغلب على المشاكل المحتملة في إجراءات التنظيف التلقائي. انظر رقم 168.

تكوين استخدام ذاكرة Nexus JVM

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

هذه هي الإعدادات الافتراضية لجهاز Nexus. من فضلك لا تغير هذه القيم إذا كنت لم تقرأ قسم الذاكرة لمتطلبات نظام Nexus ولا تفهم ماذا يفعلون.

كتحذير ثانٍ، إليك مقتطف من الوثيقة أعلاه:

لا يوصى بزيادة ذاكرة كومة JVM بما يتجاوز القيم الموصى بها في محاولة لتحسين الأداء. قد يكون لهذا في الواقع تأثير معاكس، مما يؤدي إلى عمل غير ضروري لنظام التشغيل.

كلمة مرور المسؤول

    nexus_admin_password: 'changeme'

كلمة مرور حساب "المسؤول" للإعداد. يعمل هذا فقط على التثبيت الافتراضي الأول. يرجى الاطلاع على [تغيير كلمة مرور المسؤول بعد التثبيت الأول](# تغيير كلمة مرور المسؤول بعد التثبيت الأول) إذا كنت تريد تغييرها لاحقًا باستخدام أحد الأدوار.

يوصى بشدة بعدم تخزين كلمة المرور الخاصة بك بنص واضح في قواعد اللعبة، ولكن باستخدام [تشفير ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (إما مضمنًا أو في ملف منفصل محمّل بـ include_vars على سبيل المثال)

وصول مجهول بشكل افتراضي

    nexus_anonymous_access: false

يتم تعطيل الوصول المجهول بشكل افتراضي. اقرأ المزيد عن وصول مجهول.

اسم المضيف العام

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

اسم النطاق والمخطط المؤهلين بالكامل (https أو http) والذي بموجبه سيكون مثيل Nexus متاحًا لعملائه.

الوصول إلى واجهة برمجة التطبيقات (API) لهذا الدور

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

تتحكم هذه المتغيرات في كيفية اتصال الدور بواجهة برمجة تطبيقات Nexus للتوفير.
للمستخدمين المتقدمين فقط. ربما لا تريد تغيير هذه الإعدادات الافتراضية

إعداد وكيل عكسي

    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

ضبط وكيل SSL العكسي.
للقيام بذلك تحتاج إلى تثبيت httpd. ملحوظة: متى httpd_setup_enable مجموعة القيمةtrue، اتصالات العلاقة 127.0.0.1:8081، وبالتالي لا يمكن الوصول إليه مباشرة عبر منفذ HTTP 8081 من عنوان IP الخارجي.

اسم المضيف الافتراضي المستخدم هو nexus_public_hostname. إذا كنت بحاجة إلى أسماء مختلفة لسبب ما، يمكنك تعيينها httpd_server_name مع معنى مختلف.

С httpd_copy_ssl_files: true (افتراضيًا) يجب أن تكون الشهادات المذكورة أعلاه موجودة في دليل دليل التشغيل الخاص بك وسيتم نسخها إلى الخادم وتكوينها في Apache.

إذا كنت تريد استخدام الشهادات الموجودة على الخادم، قم بتثبيت httpd_copy_ssl_files: false وتوفير المتغيرات التالية:

    # 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 يعد اختياريًا ويجب تركه بدون ضبط إذا كنت لا ترغب في تخصيص الملف المتسلسل

    httpd_default_admin_email: "[email protected]"

قم بتعيين عنوان البريد الإلكتروني الافتراضي للمسؤول

تكوين LDAP

يتم تعطيل اتصالات LDAP ومجال الأمان بشكل افتراضي

    nexus_ldap_realm: false
    ldap_connections: []

اتصالات LDAP، يبدو كل عنصر كما يلي:

    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

مثال لتكوين LDAP للمصادقة المجهولة (الربط المجهول)، وهذا أيضًا تكوين "أصغر":

    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'

مثال لتكوين LDAP للمصادقة البسيطة (باستخدام حساب 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

مثال لتكوين LDAP للمصادقة البسيطة (باستخدام حساب 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_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

مثال لتكوين LDAP للمصادقة البسيطة (باستخدام حساب 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_map_groups_as_roles: true
        ldap_map_groups_as_roles_type: 'dynamic'
        ldap_user_memberof_attribute: 'memberOf'

امتياز

    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

قائمة الامتيازات للإعدادات. انظر إلى الوثائق وواجهة المستخدم الرسومية للتحقق من المتغيرات التي يجب تعيينها وفقًا لنوع الامتياز.

يتم دمج هذه العناصر مع القيم الافتراضية التالية:

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

الأدوار (يعني هذا داخل Nexus)

    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

قائمة الأدوار للإعدادات.

الأعضاء

    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

قائمة المستخدمين/الحسابات المحلية (غير LDAP) المراد إنشاؤها في العلاقة.

قائمة المستخدمين/الحسابات المحلية (غير LDAP) المطلوب إنشاؤها في Nexus.

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

تعيين Ldap للمستخدمين/الأدوار. ولاية absent سيؤدي ذلك إلى إزالة الأدوار من مستخدم موجود إذا كان موجودًا بالفعل.
لا يتم حذف مستخدمي Ldap. ستؤدي محاولة تعيين دور لمستخدم غير موجود إلى حدوث خطأ.

محددات المحتوى

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

لمزيد من المعلومات حول محدد المحتوى، راجع توثيق.

لاستخدام محدد المحتوى، أضف امتيازًا جديدًا باستخدام type: repository-content-selector وذات الصلةcontentSelector

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

Blobstores والمستودعات

    nexus_delete_default_repos: false

احذف المستودعات من التكوين الافتراضي الأولي لتثبيت nexus. يتم تنفيذ هذه الخطوة فقط عند التثبيت لأول مرة (متى nexus_data_dir تم اكتشافه فارغًا).

إزالة المستودعات من التكوين الافتراضي الافتراضي لـ Nexus. يتم تنفيذ هذه الخطوة فقط أثناء التثبيت الأول (متى nexus_data_dir فارغ).

    nexus_delete_default_blobstore: false

احذف مخزن البيانات الكبيرة الافتراضي من التكوين الافتراضي الأولي لتثبيت Nexus. لا يمكن القيام بذلك إلا إذا nexus_delete_default_repos: true وجميع المستودعات التي تم تكوينها (انظر أدناه) تحتوي على ملف صريح blob_store: custom. يتم تنفيذ هذه الخطوة فقط عند التثبيت لأول مرة (متى nexus_data_dir تم اكتشافه فارغًا).

يتم تعطيل إزالة تخزين الكائنات الثنائية كبيرة الحجم (العناصر الثنائية) افتراضيًا من التكوين الأولي. لإزالة تخزين الكائنات الثنائية كبيرة الحجم (العناصر الثنائية)، قم بإيقاف تشغيله nexus_delete_default_repos: true. يتم تنفيذ هذه الخطوة فقط أثناء التثبيت الأول (متى nexus_data_dir فارغ).

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

متاجر كبيرة لنصنع او لنبتكر. لا يمكن تحديث مسار blobstore ومستودع blobstore بعد الإنشاء الأولي (سيتم تجاهل أي تحديث هنا عند إعادة التزويد).

يتم توفير تكوين blobstore على S3 كوسيلة راحة وليس جزءًا من الاختبارات التلقائية التي نجريها على travis. يرجى ملاحظة أن التخزين على S3 يوصى به فقط للمثيلات المنشورة على AWS.

خلق متاجر كبيرة. لا يمكن تحديث مسار التخزين ومستودع التخزين بعد الإنشاء الأولي (سيتم تجاهل أي تحديث هنا عند تثبيته مرة أخرى).

يتم توفير إعداد تخزين الكائنات الثنائية كبيرة الحجم على S3 كوسيلة راحة. يرجى ملاحظة أنه يوصى بتخزين S3 فقط للمثيلات المنشورة على 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

أعلاه هو مثال التكوين مخدم بروكسي مخضرم.

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

مخضرم المستودعات المستضافة إعدادات. يعد تكوين ذاكرة التخزين المؤقت السلبي اختياريًا وسيتم ضبطه افتراضيًا على القيم المذكورة أعلاه إذا تم حذفه.

ترتيب المستودعات المستضافة مخضرم. يعد تكوين ذاكرة التخزين المؤقت السلبي (-1) اختياريًا وسيتم ضبطه افتراضيًا على القيم المذكورة أعلاه إذا لم يتم تحديده.

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

ترتيب مجموعة مخضرم.

يتم دمج جميع أنواع المستودعات الثلاثة مع القيم الافتراضية التالية:

    _nexus_repos_maven_defaults:
      blob_store: default # Note : cannot be updated once the repo has been created
      strict_content_validation: true
      version_policy: release # release, snapshot or mixed
      layout_policy: strict # strict or permissive
      write_policy: allow_once # one of "allow", "allow_once" or "deny"
      maximum_component_age: -1  # Nexus gui default. For proxies only
      maximum_metadata_age: 1440  # Nexus gui default. For proxies only
      negative_cache_enabled: true # Nexus gui default. For proxies only
      negative_cache_ttl: 1440 # Nexus gui default. For proxies only

أنواع مستودعات Docker وPypi وRaw وRubygems وBower وNPM وGit-LFS وyum:
انظر تعريف defaults/main.yml لهذه الخيارات:

يتم تعطيل مستودعات Docker وPypi وRaw وRubygems وBower وNPM وGit-LFS وyum افتراضيًا:
شاهد defaults/main.yml لهذه الخيارات:

      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

يرجى ملاحظة أنك قد تحتاج إلى تمكين نطاقات أمان معينة إذا كنت تريد استخدام أنواع أخرى من المستودعات بخلاف maven. وهذا غير صحيح افتراضيا

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

يمكن أيضًا تمكين مجال المستخدم البعيد باستخدام

nexus_rut_auth_realm: true

ويمكن تخصيص العنوان عن طريق التحديد

nexus_rut_auth_header: "CUSTOM_HEADER"

المهام المجدولة

    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"

المهام المجدولة للإعدادات. typeId ومهمة محددةtaskProperties/booleanTaskProperties يمكنك تخمين إما:

  • من التسلسل الهرمي لنوع Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • التحقق من نموذج إنشاء مهمة HTML في متصفحك
  • من عرض طلبات AJAX في المتصفح عند إعداد مهمة يدويًا.

يجب الإعلان عن خصائص المهمة في كتلة yaml الصحيحة اعتمادًا على نوعها:

  • taskProperties لجميع خصائص السلسلة (أي أسماء المستودعات، أسماء المستودعات، الفترات الزمنية...).
  • booleanTaskProperties لجميع الخصائص المنطقية (أي بشكل أساسي مربعات الاختيار الموجودة في واجهة المستخدم الرسومية لمهمة إنشاء الرابطة).

النسخ الاحتياطية

      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)

لن يتم تكوين النسخ الاحتياطي حتى تقوم بالتبديل nexus_backup_configure в true.
في هذه الحالة، سيتم تكوين مهمة البرنامج النصي المجدولة للتشغيل على Nexus
في الفاصل الزمني المحدد في nexus_backup_cron (الافتراضي 21:00 كل يوم).
راجع [قالب رائع لهذه المهمة](templates/backup.groovy.j2) للحصول على التفاصيل.
هذه المهمة المجدولة مستقلة عن الآخرين nexus_scheduled_tasksالذي
أعلن في كتاب اللعب الخاص بك.

إذا كنت تريد تدوير/حذف النسخ الاحتياطية، فقم بتثبيت nexus_backup_rotate: true وقم بتكوين عدد النسخ الاحتياطية التي ترغب في حفظها باستخدام nexus_backup_keep_rotations (الافتراضي 4).

عند استخدام التدوير، إذا كنت تريد توفير مساحة إضافية على القرص أثناء عملية النسخ الاحتياطي،
يمكنك تثبيت ملفات nexus_backup_rotate_first: true. سيؤدي هذا إلى تكوين التدوير/الحذف المسبق قبل النسخ الاحتياطي. بشكل افتراضي، يحدث التدوير بعد إنشاء نسخة احتياطية. يرجى ملاحظة أنه في هذه الحالة النسخ الاحتياطية القديمة
سيتم حذفه قبل إجراء النسخة الاحتياطية الحالية.

إجراء الاسترداد

قم بتشغيل كتاب اللعب مع المعلمة -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(على سبيل المثال، 2017-12-17-21-00-00 ليوم 17 ديسمبر 2017 الساعة 21:00

إزالة الرابطة

تحذير: سيؤدي هذا إلى حذف بياناتك الحالية بالكامل. تأكد من عمل نسخة احتياطية مبكرًا إذا لزم الأمر

استخدم متغيرًا nexus_purgeإذا كنت بحاجة إلى إعادة التشغيل من البداية وإعادة تثبيت مثيل nexus مع إزالة جميع البيانات.

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

قم بتغيير كلمة مرور المسؤول بعد التثبيت الأول

    nexus_default_admin_password: 'admin123'

لا ينبغي تغيير هذا في قواعد اللعبة التي تمارسها. تتم تعبئة هذا المتغير بكلمة مرور مسؤول Nexus الافتراضية عند تثبيته لأول مرة ويضمن إمكانية تغيير كلمة مرور المسؤول إليها nexus_admin_password.

إذا كنت تريد تغيير كلمة مرور المسؤول بعد التثبيت الأول، فيمكنك تغييرها مؤقتًا إلى كلمة المرور القديمة من سطر الأوامر. بعد التغيير nexus_admin_password في كتاب اللعب الخاص بك يمكنك تشغيل:

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

قناة التليجرام على Nexus Sonatype : https://t.me/ru_nexus_sonatype

يمكن للمستخدمين المسجلين فقط المشاركة في الاستطلاع. تسجيل الدخول، من فضلك.

ما هي مستودعات القطع الأثرية التي تستخدمها؟

  • Sonatype Nexus مجاني

  • تم دفع Sonatype Nexus

  • المصنع مجاني

  • دفعت مصطنعة

  • ميناء

  • لب

صوت 9 مستخدمًا. امتنع 3 مستخدما عن التصويت.

المصدر: www.habr.com

إضافة تعليق