nexus3-oss

Ansible Роль: Nexus 3 OSS

Эта роль устанавливает и настраивает Nexus Repository Manager OSS версии 3.x на CentOS/RHEL.

Вся конфигурация может быть обновлена повторным запуском роли, за исключением настроек, связанных с blobstore, которые являются неизменяемыми в Nexus.

Требования

  • Эта роль протестирована только на CentOS 7 и Ubuntu 16.04 (Xenial)
  • Oracle Java 8 (обязательно)
  • Apache HTTPD (опционально, используется для настройки SSL обратного прокси)

(см. раздел Зависимости ниже для совместимых ролей на Galaxy)

Переменные Роли

Переменные Ansible с их значениями по умолчанию (см. default/main.yml):

nexus_version: '3.1.0-04'
nexus_timezone: 'UTC'
nexus_package: "nexus-{{ nexus_version }}-unix.tar.gz"

Версия и пакет Nexus для установки, доступные версии можно посмотреть на https://www.sonatype.com/download-oss-sonatype. nexus_timezone — это название часового пояса Java, которое может быть полезно в сочетании с nexus_scheduled_tasks cron выражениями ниже.

nexus_download_dir: '/tmp'

Каталог на целевом компьютере, куда будет загружен пакет Nexus.

nexus_default_port: 8081
nexus_default_context_path: '/'

Порт и контекстный путь для процесса Java Nexus. nexus_default_context_path должен содержать завершающий слеш, например: nexus_default_context_path: '/nexus/'.

nexus_os_group: 'nexus'
nexus_os_user: 'nexus'

Пользователь и группа, которые будут владеть файлами Nexus и запускать сервис; они будут созданы ролью, если отсутствуют.

nexus_installation_dir: '/opt'
nexus_data_dir: '/var/nexus'
nexus_tmp_dir: '/tmp/nexus'

Директории Nexus, nexus_installation_dir содержит установленные исполняемые файлы, nexus_data_dir хранит всю конфигурацию, репозитории и загруженные артефакты. Обратите внимание: пользовательские пути blobstore вне nexus_data_dir могут быть настроены, см. nexus_blobstores ниже.

nexus_admin_password: 'changeme'

Пароль для учетной записи 'admin'. Обратите внимание: изменение пароля администратора после первого разового развертывания/установки еще не реализовано этой ролью.

nexus_anonymous_access: false

Разрешить анонимный доступ к Nexus.

public_hostname: 'nexus.vm'

Полное доменное имя, под которым экземпляр Nexus будет доступен для своих клиентов.

nexus_branding_header: ""
nexus_branding_footer: "Последнее развертывание {{ ansible_date_time.iso8601 }}"

Заголовок и нижний колонтитул брендинга, которые могут содержать HTML.

httpd_setup_enable: false
httpd_ssl_certificate_file: 'files/nexus.vm.crt'
httpd_ssl_certificate_key_file: 'files/nexus.vm.key'

Настроить SSL обратный прокси, для этого требуется установленный httpd. Обратите внимание: когда httpd_setup_enable установлено в true, Nexus связывается с 127.0.0.1:8081 и таким образом не будет доступен напрямую на HTTP порту 8081 с внешнего IP.

ldap_connections: []

Настройки LDAP соединений, каждый элемент выглядит следующим образом:

  - ldap_name: 'My Company LDAP' # используется как ключ для обновления конфигурации ldap
    ldap_protocol: 'ldaps' # ldap или ldaps
    ldap_hostname: 'ldap.mycompany.com'
    ldap_port: 636
    ldap_search_base: 'dc=mycompany,dc=net'
    ldap_auth: 'none' # или simple
    ldap_auth_username: 'username' # если auth = simple
    ldap_auth_password: 'password' # если auth = simple
    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 для анонимной аутентификации (анонимная привязка), это также "минимальная" конфигурация:

  - ldap_name: 'Простейшая LDAP конфигурация'
    ldap_protocol: 'ldaps'
    ldap_hostname: 'annuaire.mycompany.com'
    ldap_search_base: 'dc=mycompany,dc=net'
    ldap_port: 636
    ldap_user_id_attribute: 'uid'
    ldap_user_real_name_attribute: 'cn'
    ldap_user_email_attribute: 'mail'
    ldap_user_object_class: 'inetOrgPerson'

Пример конфигурации LDAP для простой аутентификации (с использованием аккаунта DSA):

  - ldap_name: 'LDAP конфигурация с DSA'
    ldap_protocol: 'ldaps'
    ldap_hostname: 'annuaire.mycompany.com'
    ldap_port: 636
    ldap_auth: 'simple'
    ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
    ldap_auth_password: "{{ vault_ldap_dsa_password }}" # лучше хранить пароли в хранилище ansible
    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) + группы, сопоставленные с ролями:

  - ldap_name: 'LDAP конфигурация с DSA'
    ldap_protocol: 'ldaps'
    ldap_hostname: 'annuaire.mycompany.com'
    ldap_port: 636
    ldap_auth: 'simple'
    ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
    ldap_auth_password: "{{ vault_ldap_dsa_password }}" # лучше хранить пароли в хранилище ansible
    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
nexus_privileges:
  - name: all-repos-read # используется как ключ для обновления привилегии
    description: 'Чтение и просмотр доступа ко всем репозиториям'
    repository: '*'
    actions: # могут быть добавлены, просмотрены, созданы, удалены, отредактированы, прочитаны или * (все)
      - read
      - browse

Список привилегий для настройки. Эти элементы объединяются со следующими значениями по умолчанию:

    _nexus_privilege_defaults:
      type: repository-view
      format: maven2
      actions:
        - read
    nexus_roles:
      - id: Developpers # может ссылаться на идентификатор группы LDAP, также используется как ключ для обновления роли
        name: developers
        description: Все разработчики
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # ссылки на другие названия ролей

Список ролей для настройки.

nexus_local_users: []

Локальные (не LDAP) пользователи/учетные записи для создания в Nexus, элементы выглядят следующим образом:

  - username: jenkins # используется как ключ для обновления
    first_name: Jenkins
    last_name: CI
    email: [email protected]
    password: "s3cr3t"
    roles:
      - developers # ID роли
nexus_delete_default_repos: false

Удалить репозитории из начальной конфигурации установки Nexus. Этот шаг выполняется только при первой установке (когда nexus_data_dir обнаружен как пустой).

nexus_delete_default_blobstore: false

Удалить стандартный blobstore из начальной конфигурации установки Nexus. Это можно сделать только если nexus_delete_default_repos: true и все сконфигурированные репозитории (см. ниже) имеют явный blob_store: custom. Этот шаг выполняется только при первой установке (когда nexus_data_dir обнаружен как пустой).

nexus_blobstores: []
# пример элемента blobstore :
# - name: separate-storage
#   path: /mnt/custom/path

Blobstores для создания. Путь blobstore и репозиторий blobstore не могут быть обновлены после первоначального создания (любое обновление здесь будет игнорироваться при повторном развертывании).

nexus_scheduled_tasks: []
#  пример задачи для сжатия blobstore :
#  - name: compact-blobstore
#    cron: '0 0 22 * * ?'
#    typeId: blobstore.compact
#    taskProperties:
#      blobstoreName: 'default' # все атрибуты задачи хранятся как строки в Nexus

Запланированные задачи для настройки. typeId и специфические для задачи taskProperties можно выяснить либо из иерархии java типа org.sonatype.nexus.scheduling.TaskDescriptorSupport, либо просматривая AJAX запросы браузера при ручной настройке задачи.

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: secret-remote-repo
#   remote_url: 'https://company.com/repo/secure/private/go/away'
#   remote_username: 'username'
#   remote_password: 'secret'

Настройки Maven прокси-репозиториев.

nexus_repos_maven_hosted:
  - name: private-release
    version_policy: release
    write_policy: allow_once

Настройки Maven хостинговых репозиториев.

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 # release, snapshot или mixed
      layout_policy: strict # strict или permissive
      write_policy: allow_once # allow_once или allow

Типы репозиториев: Docker, Pypi, Raw, Rubygems, Bower, NPM и Git-LFS: см. 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

Все они имеют значение false, если вы не переопределите их из playbook / group_var / cli, все они используют тот же механизм, что и Maven.

Зависимости

Эта роль требует Ansible 2.1 или выше.

Требования к Java и httpd /можно/ выполнить с помощью следующих ролей Galaxy:

Пример Playbook

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

  vars:
    nexus_version: '3.1.0-04'
    nexus_timezone: 'Canada/Eastern'
    nexus_admin_password: "{{ vault_nexus_admin_password }}"
    httpd_server_name: 'nexus.vm'
    httpd_setup_enable: true
    httpd_ssl_certificate_file: "{{ vault_httpd_ssl_certificate_file }}"
    httpd_ssl_certificate_key_file: "{{ vault_httpd_ssl_certificate_key_file }}"
    ldap_connections:
      - ldap_name: 'Company LDAP'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'ldap.company.com'
        ldap_port: 636
        ldap_search_base: 'dc=company,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_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}'
    nexus_privileges:
      - name: all-repos-read
        description: 'Чтение и просмотр доступа ко всем репозиториям'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Развертывания в company-project'
        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: [email protected]
        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: alfresco
        remote_url: 'https://artifacts.alfresco.com/nexus/content/groups/private/'
        remote_username: 'secret-username'
        remote_password: "{{ vault_alfresco_private_password }}"
      - 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

  roles:
    - role: ansiblebit.oracle-java
      oracle_java_set_as_default: yes
    - role: geerlingguy.apache
      apache_create_vhosts: no
    - role: savoirfairelinux.nexus3-oss

Лицензия

GNU GPLv3

Информация об авторе

Смотрите https://github.com/savoirfairelinux/ansible-nexus3-oss

О проекте

Nexus Repository Manager 3.x for RedHat/CentOS

Установить
ansible-galaxy install savoirfairelinux/ansible-nexus3-oss
Лицензия
gpl-3.0
Загрузки
24155
Владелец
Savoir-faire Linux