Nexus Sonatype-ի տեղադրումը և կարգավորումը infrastructure as code մոտեցման միջոցով

Sonatype Nexus – միացյալ հարթակ, որը թույլ տալիս է ծրագրավորողներին պրոքսի անել, պահպանել և կառավարել Java (Maven) կախվածությունները, Docker պատկերները, Python, Ruby, NPM, Bower, RPM փաթեթները, gitlfs, Apt, Go, Nuget և նաև տարածել իրենց ծրագրային ապահովումը:

Ինչու է անհրաժեշտ Sonatype Nexus՞

  • Գաղտնի արվող արկղերի պահպանման համար;
  • Արտեֆակտների պահեստավորում, որ ձեռք բերված են ինտերնետից;

Sonatype Nexus-ի հիմնական մատակարարման կողմից աջակցվող արկղեր:

  • Java, Maven (jar)
  • Docker
  • Python (pip)
  • Ruby (gem)
  • NPM
  • Bower
  • Yum (rpm)
  • gitlfs
  • Raw
  • Apt (deb)
  • Go
  • Nuget

Համmunity-ով աջակցվող արկղեր:

  • Composer
  • Conan
  • CPAN
  • ELPA
  • Helm
  • P2
  • R

Sonatype Nexus-ի տեղադրում՝ օգտագործելով https://github.com/ansible-ThoTeam/nexus3-oss

Requirements

  • Կարդացեք ինտերնետում ansible-ի օգտագործման մասին:
  • Տեղադրեք ansible pip install ansible playbook-ի վրա աշխատող աշխատանքային կայանում:
  • 安装 geerlingguy.java playbook-ի վրա աշխատող աշխատանքային կայանում:
  • 安装 geerlingguy.apache playbook-ի վրա աշխատող աշխատանքային կայանում:
  • Այս դերակատարումն ապահովված է CentOS 7, Ubuntu Xenial (16.04) և Bionic (18.04), Debian Jessie և Stretch:
  • jmespath գրադարանն պետք է տեղադրվի playbook-ի վրա աշխատող աշխատանքային կայանում: Տեղադրելու համար կատարեք sudo pip install -r requirements.txt
  • Պահպանեք playbook ֆայլը (օրինակ ներքևում) nexus.yml ֆայլում
  • Ուղեցույցը վարեք nexus-ի տեղադրում ansible-playbook -i host nexus.yml

nexus-ի տեղադրման համար ansible-playbook-ի օրինակ, առանց LDAP-ով, Maven (java), Docker, Python, Ruby, NPM, Bower, RPM և gitlfs Repository-ներով:

---
- name: Nexus
  hosts: nexus
  become: yes

  vars:
    nexus_timezone: 'Ասիա/Օմսկ'
    nexus_admin_password: "admin123"
    nexus_public_hostname: 'apatsev-nexus-playbook'
    httpd_setup_enable: false
    nexus_privileges:
      - name: all-repos-read
        description: 'Կարդալ & Նայելու մուտք բոլոր հսկիչներին'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Հիմնական նախագծերի տեղադրումներ'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # համընկնում է LDAP խմբի
        name: developers
        description: Բոլոր ծրագրավորողները
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # օգտակար է որպես բանալին թարմացնելու համար
        first_name: Jenkins
        last_name: CI
        email: support@company.com
        password: "s3cr3t"
        roles:
          - Developpers # այստեղ դերում ID-ն
    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. Ծանր ծրագիր nexus_config_yum-ի համար հաստատեք դուրս գալու կատալոգ
    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. Ծանր ծրագիր nexus_config_npm-ի համար հաստատեք դուրս գալու կատալոգ
    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. Ծանր ծրագիր nexus_config_docker-ի համար հաստատեք դուրս գալու կատալոգ
    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. Ծանր ծրագիր nexus_config_bower-ի համար հաստատեք դուրս գալու կատալոգ
    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. Ծանր ծրագիր nexus_config_pypi-ի համար հաստատեք դուրս գալու կատալոգ
    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. Ծանր ծրագիր nexus_config_rubygems-ի համար հաստատեք դուրս գալու կատալոգ
    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. Ծանր ծրագիր nexus_config_gitlfs-ի համար հաստատեք դուրս գալու կատալոգ
    nexus_config_gitlfs: true
    nexus_repos_gitlfs_hosted:
      - name: gitlfs-hosted

  roles:
    - { role: geerlingguy.java }
    # Debian/Ubuntu միայն
    # - { 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 միայն
    - { 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-ի տեղադրումը և կարգավորումը infrastructure as code մոտեցման միջոցով

Nexus Sonatype-ի տեղադրումը և կարգավորումը infrastructure as code մոտեցման միջոցով

Համակարգային դերեր

Դերի փոփոխականներ

Խմբանմուշի առանձին փոփոխականներ (տես. 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 ռեպո՝ Nexus-ից մեծ քան 3.3.0 և այլն)

nexus_timezone — սա Java-ի ժամային գոտու անունն է, որը կարող է լինել օգտակար՝ ամբողջացած ստորև նշված cron արտահայտություններին nexus_scheduled tasks-ի համար:

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-ի ուղիները:

  • nexus_installation_dir պարունակում է տեղադրված կատարվող ֆայլերը:
  • nexus_data_dir պարունակում է ամբողջ կոնֆիգուրացիան, ռեպոզիտորները և բեռնված արգասիքները։ Բլոբների անհատական ուղիները 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-ի համակարգային պահանջների հիշողության բաժին և չեք հասկանում, թե ինչ են անում:

Երկրորդ նախազգուշություն, սա հանելուկը վերոհիշյալ փաստաթղթից:

Նախագծում է որպես նախատեսվող մակարդակներում գերազանցելու գումարը `տա՛ դեռ ավարտին`:

Երևակայակի գաղտնաբառ

    nexus_admin_password: 'changeme'

Արդյունավետ, տեղադրման համար admin-ի գրանցման գաղտնաբառը: Սա աշխատում է միայն առաջին տեղադրման ժամանակ. Խնդրում եմ տեսեք [Գրանցման գաղտնաբառը փոխել առաջին տեղադրման հետո](# change-admin-password-after-first-install), եթե ցանկանում եք փոխել այն ավելի ուշ դերի միջոցով:

Հստակ չի խորհուրդ տրվում պահել ձեր գաղտնաբառը բաց տեքստով playbook-ում, այլ օգտագործել [անաֆիլային վարձակալություն] (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 API-ին մատուցման համար:
Միայն փորձառու օգտագործողների համար: Սահմաններում փոփոխություն կատարելը մոտոհետախուզման խոչընդոտ է:

Հետադարձ պրոքսի կարգավորումները

    httpd_setup_enable: false
    httpd_server_name: "{{ nexus_public_hostname }}"
    httpd_default_admin_email: "admin@example.com"
    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 կարգավորումն իրագործված է, nexus-ը կապվում է 127.0.0.1:8081, այդպիսովճշմարիտուղիղ հասանելի է HTTP-порт 8081-ի միջոցով արտաքին IP հասցեից: не Օգտվողի անվանDefault անունը՝

nexus_public_hostname ։ Եթե ձեզ անհրաժեշտ են տարբեր անուններ որևէ պատճառով, կարող եք կարգավորելhttpd_server_name համաձայն այլ արժեքի: httpd_copy_ssl_files: true

Ս (մանրամասով) վերոնշյալ վկայագրերը նախնական կանոնավոր ձևատեղի մեջ պետք է լինեն և կփոխանցվեն սերվեր և կկարգավորվեն apache-ում: Եթե ցանկանում եք օգտագործել արդեն գոյություն ունեցող վկայագրեր սերվերում, կարգավորվեք

httpd_copy_ssl_files: false և մատուցեք հետևյալ փոփոխականները: httpd_ssl_cert_chain_file_location

    # 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_default_admin_email: "admin@example.com"

    Անցքemail адрес администратор по умолчанию

LDAP կարգավորում

LDAP միացումներն և անվտանգություն թիմերը по умолчанию отключены

nexus_ldap_realm: false ldap_connections: []

    LDAP միացումներ

, յուրաքանչյուր տարրը հետևյալ տեսքով է՝:՝ յուրաքանչյուր տարրը տեսք ունի այսպես:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Իմ ընկերության LDAP' # օգտագործվում է ldap կոնֆիգուրացիան թարմացնելու համար
        ldap_protocol: 'ldaps' # ldap կամ ldaps
        ldap_hostname: 'ldap.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false # Կախվածություն ունի արդյոք լիցենզիաներից օգտագործել nexus վստահության խանութում
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_auth: 'none' # կամ պարզ
        ldap_auth_username: 'username' # եթե auth = պարզ
        ldap_auth_password: 'password' # եթե auth = պարզ
        ldap_user_base_dn: 'ou=users'
        ldap_user_filter: '(cn=*)' # (ընտրովի)
        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: 'Արագագույն LDAP կոնֆիգուրացիա'
        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 կոնֆիգուրացիա 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 }}" # լավ է քուն պահել գաղտնաբառերը 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 կոնֆիգուրացիա 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 }}" # լավ է քուն պահել գաղտնաբառերը 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 կարգավորում 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 }}" # լավագույնը պահել գաղտնաբանությունները 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 # օգտագործվում է որպես բանալի իրավունքի թարմացման համար
        # type: <մի aplikasi, repository-admin, repository-content-selector, repository-view, script կամ wildcard>
        description: 'Կարդալ & Որոնում հասանելիություն բոլոր ռեպոզիտորիաների համար'
        repository: '*'
        actions: # կարող է լինել ավելացնել, դիտել, ստեղծել, ջնջել, խմբագրել, կարդալ կամ * (բոլորը)
          - read
          - browse
        # pattern: pattern
        # domain: domain
        # script_name: name

Հրապարակումը իրավունքների միավորելու համար։ Ուշադրություն դարձրեք փաստաթղթերին և գրաֆիկական ինտերֆեյսին՝ ստուգելու համար, թե որոնք են փոփոխականները, որոնք պետք է սահմանվեն իրավունքի տեսակին համապատասխան:

Այս տարրերը միանում են հետևյալ հնարավորությունների չափանիշներին.

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

Պորտֆոլիոն (Nexus-ի ներսում)

    nexus_roles:
      - id: Developpers # կարող է համապատասխանել LDAP խմբի ID-ին, նույնպես օգտագործվում է որպես բանալի զանգվածում մեկ փոխելու համար
        name: developers
        description: Բոլոր ծրագրավորողները
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # այլ դերերի անունների հղումներ

Հրապարակումը թղթապանակներ հավաստագրերի համար.

Օգտագործողներ

    nexus_local_users: []
      # - username: jenkins # օգտագործվում է որպես բանալի թարմացման համար
      #   state: present # ենթադրյալ արժեք, եթե բացակայում է, օգտագործել 'absent'՝ օգտատիրոջ ջնջման համար
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - developers # դեր ID

Locals (չ-LDAP) օգտագործողների/հաշվեհամարների ցուցակ, որոնք պետք է ստեղծվեն Nexus-ում.

Nexus-ում ստեղծվելիք տեղական (չ-LDAP) օգտվողների/հաշվեհամարների ցուցակը.

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

LDAP օգտագործողների/դերի մապինգը: Ստիճան absent ջնջում է դերեր գոյություն ունեցող օգտվողից, եթե նա արդեն առկա է:
LDAP օգտողները չեն ջնջվում: Դեր սահմանելու փորձը գոյություն չունեցող օգտվողի համար կբերի خطا:

Բովանդակության ընտրիչներ

  nexus_content_selectors:
  - name: docker-login
    description: Docker մուտքի իրավունքի ընտրիչ
    search_expression: format=="docker" and path=~"/v2/"

Հավելյալ տեղեկությունների համար ընտրության ընտրիչի մասին տեսե՛ք. Փաստաթղթությունը.

Օգտակարություն ապրելու համար ընտրության ընտրիչի մասին, ավելացրեք նոր իրավունք՝ type: repository-content-selector և համապատասխանcontentSelector

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Մուտք բաժնում Docker գրանցում'
  repository: '*'
  actions:
  - read
  - browse

Blobstore-ներ և ռեպոզիտորիաներ

    nexus_delete_default_repos: false

Ջնջեք ռեպոզիտորիաները Nexus-ի սկզբնական նախասիրական կառուցվածքից: Այս քայլը իրականանում է միայն առաջին instal-ի ժամանակ (երբ nexus_data_dir արդյունաբերություն է հանդիսանում)

Նեքսուսի սկզբնական նախասիրական կառուցվածքից ջնջել ռեպոզիտորիաները: Այս փուլը կատարվում է միայն առաջին անգամ տեղադրելու ժամանակ (երբ nexus_data_dir պատրաստ է լինելու).

    nexus_delete_default_blobstore: false

Ջնջեք սկզբնական blobstore-ը Nexus-ի սկզբնական նախասիրական կառուցվածքից: Սա կարող է կատարվել միայն եթե nexus_delete_default_repos: true և բոլոր կժովեկավորված ռեպոզիտորիաներն (տեսք ներքևում) ունեն բացատրական: blob_store: custom. Այս քայլը իրականացվում է միայն առաջին անգամ տեղադրելու ժամանակ (երբ nexus_data_dir արդյունաբերություն է հանդիսանում)

Բլոբերի (բինարային արխիվների) պահեստի ջնջումը ի սկզբանե անջատված է ենթակա կարգավորումից: Բլոբերի պահեստը (բինարային արխիվները) ջնջելու համար անջատեք nexus_delete_default_repos: true. Այս փուլը իրականացվում է միայն առաջին տեղադրման ժամանակ (երբ nexus_data_dir պատրաստ է լինելու).

    nexus_blobstores: []
    # օրինակ բլոբային պահեստի տարր :
    # - 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 }}"

Բլոբային պահեստներ շինելու համար: Բլոբային պահեստի ճանապարհն ու ռեպոզիտորի բլոբային պահեստը չեն կարող թարմացվել սկզբնական ստեղծմանց հետո (այստեղ ցանկացած թարմացում կIgnored կլինի վերահաստատման ժամանակ):

S3-ի վրա բլոբային պահեստի կարգավորումը տրամադրվում է որպես հարմարություն և չի հանդիսանում ավտոմատացված թեստերի մի մասը, որոնք մենք կատարում ենք travis-ում: Ծանոթացեք, որ S3-ում պահելը խորհուրդ է տրվում միայն AWS-ում տեղակայված օրինակների համար:

Ստեղծում Բլոբային պահեստներ. Պահեստի ճանապարհն ու ռեպոզիտորիայի պահեստը չեն կարող թարմացվել սկզբնական ստեղծողից հետո (այստեղ ցանկացած թարմացում կIgnored կլինի նորից տրամադրման դեպքում):

BLOB օբյեկտների պահեստի կարգավորումը 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
    # օրինակ մուտքերի անուն/գաղտնաբառով :
    # - 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

Ուղղակի օրինակից կոնֆիգուրացիան պրոքսի Maven.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # մեկը "թույլտվություն", "թույլտվություն մեկ անգամ" կամ "արտադրություն"

Maven հյուրատպված ռեպոզիտորիաներ կոնֆիգուրացիա: Արտաքին կաղապարն ընտրական է և զուգահեռվում է վերոնշյալ արժեքներին, եթե բացակայեն:

Կոնֆիգուրացիա հյուրատպվող (hosted) ռեպոզիտորիաներ Maven: Արտաքին կաղապարի կոնֆիգուրացիան (-1) ընտրական է և արտադրվելու է վերոնշյալ արժեքներով, եթե բացակայեն。

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

Կոնֆիգուրացիա խմբեր Maven.

Բոլոր երեք ռեպոզիտորիայի տեսակները համակցվում են հետևյալ արժեքներով:

    _nexus_repos_maven_defaults:
      blob_store: default # Անշուշտ չի կարող թարմացվել, երբ ռեպոզիտորիան ստեղծվել է
      strict_content_validation: true
      version_policy: release # թողարկում, ենթադրություն կամ խառնուրդ
      layout_policy: strict # խիստ կամ թույլատրելու
      write_policy: allow_once # մեկը "թույլատրություն", "թույլատրություն մեկ անգամ" կամ "արգելել"
      maximum_component_age: -1  # Nexus.gui-ի դեֆարմնի: Մկրատի դեֆարմնի միայն
      maximum_metadata_age: 1440  # Nexus.gui-ի դեֆարմնի: Մկրատի դեֆարմնի միայն
      negative_cache_enabled: true # Nexus.gui-ի դեֆարմնի: Մկրատի դեֆարմնի միայն
      negative_cache_ttl: 1440 # Nexus.gui-ի դեֆարմնի: Մկրատի դեֆարմնի միայն

Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS և yum ռեպոզիտորիայի տեսակներ:
see 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: կեղծ
nexus_npm_bearer_token_realm: կեղծ
nexus_docker_bearer_token_realm: կեղծ  # պահանջվում է docker անանուն մուտքի համար

Հեռակա օգտվողի ոլորտը նույնպես կարող է ակտիվացվել միջոցով

nexus_rut_auth_realm: ճշգրիտ

և վերտառությունը կարող է կարգավորվել ի զուգահեռ

nexus_rut_auth_header: "CUSTOM_HEADER"

Հաշվետվություններ

    nexus_scheduled_tasks: []
    #  #  Օրինակային առաջադրանք՝ blobs-ների խթանման համար:
    #  - name: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: alerts@example.org  # համաձայն ցանկությամբ
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # բոլոր առաջադրանքի հատկությունները թաքնված են որպես տողեր nexus-ի ներսում
    #  #  Օրինակային առաջադրանք maven-նկարագրվածների մաքրման համար
    #  - name: Purge-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: alerts@example.org  # համաձայն ցանկությամբ
    #    taskProperties:
    #      repositoryName: "*"  # * բոլոր ռեպոզիտորիաների համար։ Դարձեք ռեպոզիտի անվանում, եթե ցանկանում եք միայն հատուկ մեկը
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: ճշգրիտ
    #  #  Օրինակային առաջադրանք անօգտագործվող docker մանիֆեստների և պատկերների մաքրում
    #  - name: Purge unused docker manifests and images
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: alerts@example.org  # համաձայն ցանկությամբ
    #    taskProperties:
    #      repositoryName: "*"  # * բոլոր ռեպոզիտորիաների համար։ Դարձեք ռեպոզիտի անվանում, եթե ցանկանում եք միայն հատուկ մեկը
    #  #  Օրինակային առաջադրանք անավարտ docker բեռնման մաքրում
    #  - name: Purge incomplete docker uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: alerts@example.org  # համաձայն ցանկությամբ
    #    taskProperties:
    #      age: "24"

Հաշվետվություններ հավաստագրերի համար. typeId և առաջադրանքի համար յուրահատուկtaskProperties/booleanTaskProperties հնարավոր է գուշակել կամ հետևյալ կերպ՝

  • Java տիպերի ինհերիտացիայից org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • ստուգելով ձեր բրաուզերում առաջադրանքի ստեղծման HTML ձևը
  • AJAX հարցումների դիտարկմամբ ձեր բրաուզերում՝ ձեռքով առաջադրանքը կարգավորելու ժամանակ:

Աջակցության հատկությունները պետք է հայտարարեն ճիշտ yaml բլոկում՝ կախված դրանց տիպից:

  • taskProperties բոլոր ստրինգային հատկությունների համար (например, ռեպոզիտորիաների անուններ, хранилищեր, ժամանակահատվածներ…)։
  • booleanTaskProperties բոլոր տրամաբանական հատկությունների համար (например, հիմնական հնարավորությունները նեքսուսի ստեղծման ինտերֆեյսում։

Պաշտպանություններ

      nexus_backup_configure: կեղծ
      nexus_backup_cron: '0 0 21 * * ?'  # Տեսեք cron արտահայտությունների սահմանումը նեքսուսի ստեղծել առաջադրանքի GUI-ում
      nexus_backup_dir: '\/var\/nexus-backup'
      nexus_restore_log: '{{ nexus_backup_dir }}\/nexus-restore.log'
      nexus_backup_rotate: կեղծ
      nexus_backup_rotate_first: կեղծ
      nexus_backup_keep_rotations: 4  # Ֆիքսեք 4 պաշտպանված հերթափոխ՝ ըստ կարգի (current + last 3)

Պաշտպանություն չի լինի սահմանված դեռ այն ժամանակ, երբ չգիտակցեք nexus_backup_configure մեջ ճշմարիտ.
Այդ դեպքում ծրագրված առաջադրանք ...
կանխիկ տարածքում՝ նշված nexus_backup_cron (ընդհանուր առմամբ 21:00 ամեն օր):
Տեսեք [Groovy ձևանմուշը այս առաջադրանքի համար](templates \/ backup.groovy.j2) մանրամասն տեղեկությունների համար։
Այս ծրագրված առաջադրանքը կախված չէ այլ nexus_scheduled_tasks, որոնք դուք
հայտարարել եք ձեր խաղատոմսում:

Եթե ցանկանում եք շրջապատել/մաքրել պաշտպանությունները, սահմանեք nexus_backup_rotate: ճշգրիտ և սահմանել ցանկալի պաշտպանության քանակությունը, որը ցանկանում եք պահպանել միջոցով nexus_backup_keep_rotations (հանուն 4)

Քանի որ օգտագործվում է շրջադարձ, եթե ցանկանում եք խնայել լրացուցիչ սկավառակի տարածություն սրսկման գործընթացի ժամանակ,
Դուք կարող եք սահմանել nexus_backup_rotate_first: true. Սա կարգ կհանի նախնական շրջադարձի/ջնջման առաջ բեկման առաջ: Հանուն 4, շրջադարձը տեղի է ունենում բեկման ստեղծմանց հետո: Կազի դա, հին բեկումները
ջնջվելու են, մինչդեռ ներկայիս բեկումը կարվի:

Վերականգնման գործընթաց

Թողնել խաղային գիրքը պարամետրով -e nexus_restore_point=
(օրինակ, 2017-12-17-21-00-00 17 դեկտեմբերի 2017-ին 21:00-ին):

nexus-ի ջնջում

Զգուշացում: Սա ամբողջությամբ ջնջելու է huidige տվյալները: Կատարեք նախկինում բեկում, եթե դա անհրաժեշտ է:

Օգտագործեք փոփոխական 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

Telegram ալիք Nexus Sonatype-ի համար: https://t.me/ru_nexus_sonatype

Պատասխանելու համար պետք է գրանցված օգտվող լինել։ Մուտք, խնդրում եմ։

Ի՞նչ արկածներ եք օգտագործում:

  • Sonatype Nexus անվճար է

  • Sonatype Nexus վճարովի է

  • Artifactory անվճար է

  • Artifactory վճարովի է

  • Harbor

  • Pulp

9 օգտագործողն են քվեարկել: 3 օգտագործողը խուսափել են:

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster