Instalação e configuração do Nexus Sonatype usando a abordagem de infraestrutura como código.

Sonatype Nexus – uma plataforma integrada que permite aos desenvolvedores fazer proxy, armazenar e gerenciar dependências Java (Maven), imagens Docker, Python, Ruby, NPM, Bower, pacotes RPM, gitlfs, Apt, Go, Nuget, além de distribuir seu software.

Por que usar o Sonatype Nexus?

  • Para armazenar artefatos privados;
  • Para armazenar em cache artefatos que são baixados da internet;

Artefatos suportados na distribuição básica do Sonatype Nexus:

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

Artefatos suportados pela comunidade:

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

Instalação do Sonatype Nexus utilizando https://github.com/ansible-ThoTeam/nexus3-oss

Requisitos

  • Leia sobre o uso do ansible na internet.
  • Instale o ansible pip install ansible na estação de trabalho onde o playbook será executado.
  • Instale geerlingguy.java na estação de trabalho onde o playbook será executado.
  • Instale geerlingguy.apache na estação de trabalho onde o playbook será executado.
  • Esta função foi testada em CentOS 7, Ubuntu Xenial (16.04) e Bionic (18.04), Debian Jessie e Stretch
  • jmespath a biblioteca deve estar instalada na estação de trabalho onde o playbook será executado. Para instalá-la, execute sudo pip install -r requirements.txt
  • Salve o arquivo do playbook (exemplo abaixo) como nexus.yml
  • Inicie a instalação do nexus ansible-playbook -i host nexus.yml

Exemplo de ansible-playbook para instalar o nexus sem LDAP com repositórios Maven (java), Docker, Python, Ruby, NPM, Bower, RPM e 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: 'Acesso para ler e navegar em todos os repositórios'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Implantações para company-project'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # mapeia para o grupo LDAP
        name: developers
        description: Todos os desenvolvedores
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # usado como chave para atualizar
        first_name: Jenkins
        last_name: CI
        email: support@company.com
        password: "s3cr3t"
        roles:
          - Developpers # ID do papel aqui
    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. Altere nexus_config_yum para true para criar repositório 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. Altere nexus_config_npm para true para criar repositório 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. Altere nexus_config_docker para true para criar repositório 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. Altere nexus_config_bower para true para criar repositório 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. Altere nexus_config_pypi para true para criar repositório 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. Altere nexus_config_rubygems para true para criar repositório 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. Altere nexus_config_gitlfs para true para criar repositório gitlfs
    nexus_config_gitlfs: true
    nexus_repos_gitlfs_hosted:
      - name: gitlfs-hosted

  roles:
    - { role: geerlingguy.java }
    # Apenas 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"] }
    # Apenas 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'] }

Capturas de tela:

Instalação e configuração do Nexus Sonatype usando a abordagem de infraestrutura como código.

Instalação e configuração do Nexus Sonatype usando a abordagem de infraestrutura como código.

Variáveis do Papel

Variáveis de Função

Variáveis com valores padrão (veja default/main.yml):

Variáveis gerais

    nexus_version: ''
    nexus_timezone: 'UTC'

Por padrão, o papel instalará a versão mais recente disponível do Nexus. Você pode corrigir a versão alterando a variável nexus_version. Veja as versões disponíveis em https://www.sonatype.com/download-oss-sonatype.

Se você alterar para uma versão mais recente, o papel tentará atualizar seu Nexus instalado.

Se você estiver usando uma versão mais antiga do Nexus do que a mais recente, deve garantir que não está usando recursos que não estão disponíveis na versão instalada (por exemplo, o hospedagem de repositórios yum está disponível para Nexus acima da versão 3.8.0, git lfs repo para Nexus acima da versão 3.3.0, etc.)

fuso horário do Nexus é o nome do fuso horário Java, que pode ser útil em combinação com as expressões cron abaixo para tarefas agendadas do nexus.

Porta Nexus e caminho de contexto

    nexus_default_port: 8081
    nexus_default_context_path: '/'

A porta e o caminho de contexto do processo de conexão Java. nexus_default_context_path deve conter uma barra, quando definido, por exemplo.: nexus_default_context_path: '/nexus/'.

Usuário e grupo do sistema operacional Nexus

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

O usuário e o grupo usados para a posse dos arquivos do Nexus e execução do serviço serão criados pelo papel, se estiverem ausentes.

    nexus_os_user_home_dir: '/home/nexus'

Permitir mudança do diretório home padrão para o usuário nexus

Diretórios das instâncias do Nexus

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

Diretórios do Nexus.

  • nexus_installation_dir contém os executáveis instalados
  • nexus_data_dir contém toda a configuração, repositórios e artefatos carregados. Caminhos personalizados de blobstores nexus_data_dir podem ser configurados, veja abaixo nexus_blobstores.
  • nexus_tmp_dir contém todos os arquivos temporários. O caminho padrão para redhat foi movido de /tmp para evitar potenciais problemas com processos automáticos de limpeza. Veja #168.

Configuração do uso de memória da JVM do Nexus

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

Estas são as configurações padrão para o Nexus. Por favor, não altere esses valores Se você não leu a seção de requisitos de memória do Nexus e não entende o que eles fazem.

Como segundo aviso, aqui está um trecho do documento mencionado:

Não é recomendado aumentar a memória heap da JVM além dos valores recomendados na tentativa de melhorar o desempenho. Isso pode ter o efeito oposto, levando a um funcionamento desnecessário do sistema operacional.

Senha do administrador

    nexus_admin_password: 'changeme'

Senha da conta 'admin' para configuração. Isso só funciona na primeira instalação padrão. Por favor, consulte [Alterar a senha do administrador após a primeira instalação](# change-admin-password-after-first-install) se você quiser alterá-la mais tarde com a função.

É fortemente desaconselhável armazenar sua senha em texto simples no playbook, mas usar [criptografia ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (seja embutido ou em um arquivo separado, carregado, por exemplo, usando include_vars)

Acesso anônimo por padrão

    nexus_anonymous_access: false

O acesso anônimo por padrão está desativado. Mais informações sobre acesso anônimo.

Nome público do host

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

Nome de domínio completo e esquema (https ou http) pelo qual a instância do Nexus será acessível para seus clientes.

Acesso API para esta função

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

Essas variáveis controlam como a função se conecta à API do Nexus para fornecer.
Apenas para usuários avançados. Provavelmente, você não deseja alterar essas configurações padrão

Configuração do proxy reverso

    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

Instale Proxy reverso SSL.
Para isso, é necessário instalar o httpd. Observação: quando httpd_setup_enable está definido comoverdadeiro, o nexus se conecta a 127.0.0.1:8081, assim não sendo acessível diretamente através da porta HTTP 8081 com o endereço IP externo.

O nome do host padrão em uso é nexus_public_hostname. Se você precisar de nomes diferentes por qualquer motivo, pode definir httpd_server_name com outro valor.

Com httpd_copy_ssl_files: true (por padrão) os certificados acima mencionados devem existir no seu diretório do playbook e serão copiados para o servidor e configurados no Apache.

Se você quiser usar certificados existentes no servidor, defina httpd_copy_ssl_files: false e forneça as seguintes variáveis:

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

localização_do_arquivo_cadeia_certificado_ssl_httpd é opcional e deve ser deixado como não configurado se você não quiser configurar o arquivo da cadeia

    httpd_email_administrador_default: "admin@example.com"

Definir o endereço de e-mail do administrador padrão

Configuração LDAP

Conexões LDAP e o domínio de segurança padrão estão desativados

    nexus_realm_ldap: false
    ldap_connections: []

Conexões LDAP, cada item se parece com o seguinte:

    nexus_realm_ldap: true
    ldap_connections:
      - ldap_name: 'LDAP da Minha Empresa' # usado como chave para atualizar a configuração ldap
        ldap_protocol: 'ldaps' # ldap ou ldaps
        ldap_hostname: 'ldap.minhaempresa.com'
        ldap_port: 636
        ldap_use_trust_store: false # Se deve ou não usar certificados no repositório de confiança do nexus
        ldap_search_base: 'dc=minhaempresa,dc=net'
        ldap_auth: 'none' # ou simples
        ldap_auth_username: 'nome_de_usuário' # se auth = simples
        ldap_auth_password: 'senha' # se auth = simples
        ldap_user_base_dn: 'ou=usuarios'
        ldap_user_filter: '(cn=*)' # (opcional)
        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=grupos'
        ldap_group_object_class: 'posixGroup'
        ldap_group_id_attribute: 'cn'
        ldap_group_member_attribute: 'memberUid'
        ldap_group_member_format: '${username}'
        ldap_group_subtree: false

Exemplo de configuração LDAP para autenticação anônima (vinculação anônima), esta também é uma configuração 'mínima':

    nexus_realm_ldap: true
    ldap_connection:
      - ldap_name: 'Configuração LDAP mais simples'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.minhaempresa.com'
        ldap_search_base: 'dc=minhaempresa,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'

Exemplo de configuração LDAP para autenticação simples (usando uma conta DSA):

    nexus_realm_ldap: true
    ldap_connections:
      - ldap_name: 'Configuração LDAP com DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.minhaempresa.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=meunexus,ou=dsa,dc=minhaempresa,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # é melhor manter senhas em um cofre ansible
        ldap_search_base: 'dc=minhaempresa,dc=net'
        ldap_user_base_dn: 'ou=usuarios'
        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

Exemplo de configuração LDAP para autenticação simples (usando uma conta DSA) + grupos mapeados como funções:

    nexus_ldap_realm: true
    ldap_connections
      - ldap_name: 'Configuração LDAP com DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simples'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # é melhor manter senhas em um cofre 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

Exemplo de configuração LDAP para autenticação simples (usando uma conta DSA) + grupos, mapeados dinamicamente como funções:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'Configuração LDAP com DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simples'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # é melhor manter senhas em um cofre 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_map_groups_as_roles_type: 'dinâmico'
        ldap_user_memberof_attribute: 'memberOf'

Privilégios

    nexus_privileges:
      - name: all-repos-read # usado como chave para atualizar um privilégio
        # type: 
        description: 'Acesso de Leitura & Navegação a todos os repositórios'
        repository: '*'
        actions: # pode ser add, browse, create, delete, edit, read ou * (todos)
          - read
          - browse
        # pattern: padrão
        # domain: domínio
        # script_name: nome

Lista privilégios para configuração. Consulte a documentação e a interface gráfica para verificar quais variáveis devem ser definidas dependendo do tipo de privilégio.

Esses itens se combinam com os seguintes valores padrão:

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

Funções (dentro do Nexus)

    nexus_roles:
      - id: Desenvolvedores # pode mapear para um ID de grupo LDAP, também usado como chave para atualizar uma função
        name: desenvolvedores
        description: Todos os desenvolvedores
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # referências a outros nomes de função

Lista funções para configuração.

Usuários

    nexus_local_users: []
      # - username: jenkins # usado como chave para atualizar
      #   state: present # valor padrão se omitido, use 'absent' para remover usuário
      #   first_name: Jenkins
      #   last_name: CI
      #   email: support@company.com
      #   password: "s3cr3t"
      #   roles:
      #     - desenvolvedores # ID da função

Lista de usuários/contas locais (não LDAP) a serem criados no nexus.

Lista de usuários locais (não LDAP) / contas a serem criadas no Nexus.

      nexus_ldap_users: []
      # - nome de usuário: j.doe
      #   estado: presente
      #   funções:
      #     - "nx-admin"

Mapeamento de usuários / funções do LDAP. Estado absent remove funções de um usuário existente, se ele já existir.
Usuários LDAP não são removidos. Tentar atribuir uma função a um usuário inexistente resultará em erro.

Seletores de conteúdo

  nexus_content_selectors:
  - nome: docker-login
    descrição: Seletor para privilégio de login do docker
    expressão_de_busca: format=="docker" and path=~"\/v2\/"

Para mais informações sobre o seletor de conteúdo, veja. A documentação.

Para usar o seletor de conteúdo, adicione um novo privilégio com type: repository-content-selector e o correspondentecontentSelector

- nome: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  descrição: 'Login no registro Docker'
  repositório: '*'
  ações:
  - ler
  - navegar

Armazenamentos de blob e repositórios

    nexus_delete_default_repos: false

Remove os repositórios da configuração inicial padrão da instalação do nexus. Este passo é executado apenas na primeira instalação (quando nexus_data_dir foi detectado vazio).

Remoção de repositórios da configuração padrão inicial do Nexus. Este passo é executado apenas na primeira instalação (quando nexus_data_dir está vazio).

    nexus_delete_default_blobstore: false

Remove o armazenamento de blob padrão da configuração inicial da instalação do nexus. Isso só pode ser feito se nexus_delete_default_repos: true e todos os repositórios configurados (veja abaixo) tiverem um blob_store: custom. Este passo é executado apenas na primeira instalação (quando nexus_data_dir foi detectado vazio).

A remoção do armazenamento de blobs (artefatos binários) está desativada por padrão na configuração inicial. Para remover o armazenamento de blobs (artefatos binários), desative nexus_delete_default_repos: true. Este passo é executado apenas na primeira instalação (quando nexus_data_dir está vazio).

    nexus_blobstores: []
    # exemplo de item de armazenamento de blob:
    # - nome: separate-storage
    #   tipo: file
    #   caminho: \/mnt\/custom\/path
    # - nome: s3-blobstore
    #   tipo: S3
    #   config:
    #     bucket: s3-blobstore
    #     accessKeyId: "{{ VAULT_ENCRYPTED_KEY_ID }}"
    #     secretAccessKey: "{{ VAULT_ENCRYPTED_ACCESS_KEY }}"

Armazenamentos de blobs para criar. Um caminho de armazenamento de blobs e um repositório de armazenamento de blobs não podem ser atualizados após a criação inicial (qualquer atualização aqui será ignorada na reprovisionamento).

A configuração do armazenamento de blobs no S3 é fornecida como conveniência e não faz parte dos testes automatizados que executamos no travis. Por favor, note que armazenar no S3 é recomendado apenas para instâncias implantadas na AWS.

Criando Armazenamentos de blobs. O caminho para o armazenamento e repositório de armazenamento não pode ser atualizado após a criação inicial (qualquer atualização aqui será ignorada na reinstalação).

A configuração do armazenamento de objetos BLOB no S3 é fornecida para conveniência. Observe que o armazenamento no S3 é recomendado apenas para instâncias implantadas na 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
    # exemplo com login/senha :
    # - 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

Acima está um exemplo de configuração proxy Maven.

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # um dos "allow", "allow_once" ou "deny"

Maven repositórios hospedados configuração. A configuração do cache negativo é opcional e usará os valores acima como padrão se omitido.

Configuração repositórios hospedados Maven. A configuração do cache negativo (-1) é opcional e usará por padrão os valores acima se não for especificada.

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

Configuração grupos Maven.

Todos os três tipos de repositório são combinados com os seguintes valores padrão:

    _nexus_repos_maven_defaults:
      blob_store: default # Nota: não pode ser atualizado uma vez que o repositório foi criado
      strict_content_validation: true
      version_policy: release # release, snapshot ou mixed
      layout_policy: strict # strict ou permissive
      write_policy: allow_once # um dos "allow", "allow_once" ou "deny"
      maximum_component_age: -1  # padrão da GUI do Nexus. Apenas para proxies
      maximum_metadata_age: 1440  # padrão da GUI do Nexus. Apenas para proxies
      negative_cache_enabled: true # padrão da GUI do Nexus. Apenas para proxies
      negative_cache_ttl: 1440 # padrão da GUI do Nexus. Apenas para proxies

Tipos de repositórios Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS e yum:
veja defaults/main.yml para essas opções:

Repositórios Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS e yum estão por padrão desativados:
Veja defaults/main.yml para essas opções:

      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

Observe que pode ser necessário ativar certas áreas de segurança se quiser usar outros tipos de repositórios além do maven. Isso é falso por padrão

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # necessário para acesso anônimo ao docker

O Realm de Usuário Remoto também pode ser ativado com

nexus_rut_auth_realm: true

e o cabeçalho pode ser configurado definindo

nexus_rut_auth_header: "CUSTOM_HEADER"

Tarefas agendadas

    nexus_scheduled_tasks: []
    #  #  Exemplo de tarefa para compactar o blobstore:
    #  - nome: compactar-blobstore-docker
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: alerts@example.org  # opcional
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # todos os atributos da tarefa são armazenados como strings internamente pelo nexus
    #  #  Exemplo de tarefa para eliminar snapshots do maven
    #  - nome: Eliminar-snapshots-maven
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: alerts@example.org  # opcional
    #    taskProperties:
    #      repositoryName: "*"  # * para todos os repositórios. Altere para um nome de repositório se você quiser apenas um específico
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Exemplo de tarefa para eliminar manifestos e imagens docker não utilizados
    #  - nome: Eliminar manifestos e imagens docker não utilizados
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: alerts@example.org  # opcional
    #    taskProperties:
    #      repositoryName: "*"  # * para todos os repositórios. Altere para um nome de repositório se você quiser apenas um específico
    #  #  Exemplo de tarefa para eliminar uploads de docker incompletos
    #  - nome: Eliminar uploads de docker incompletos
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: alerts@example.org  # opcional
    #    taskProperties:
    #      age: "24"

Tarefas agendadas para configuração. typeId e específicos para a tarefataskProperties/booleanTaskProperties pode ser adivinhado como:

  • da hierarquia de tipos Java org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • verificando o formulário HTML de criação de tarefas no seu navegador
  • observando as requisições AJAX no navegador durante a configuração manual da tarefa.

As propriedades da tarefa devem ser declaradas no bloco yaml correto dependendo de seu tipo:

  • taskProperties para todas as propriedades de string (ou seja, nomes de repositórios, nomes de armazenamento, períodos de tempo…).
  • booleanTaskProperties para todas as propriedades booleanas (ou seja, principalmente caixas de seleção na interface gráfica da tarefa de criação do nexus).

Backups

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # Veja a definição das expressões cron na GUI de criação de tarefas do nexus
      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  # Mantenha 4 rotações de backup por padrão (atual + últimas 3)

O backup não será configurado até que você ative nexus_backup_configure em verdadeiro.
Nesse caso, a tarefa programada será configurada para ser executada no Nexus
com o intervalo especificado em nexus_backup_cron (por padrão às 21:00 todos os dias).
Veja [o modelo groovy para essa tarefa](templates / backup.groovy.j2) para mais detalhes.
Essa tarefa programada não depende de outros nexus_scheduled_tasks, que você
declarar em seu playbook.

Se você quiser rotacionar/remover backups, defina nexus_backup_rotate: true e configure a quantidade de backups que você gostaria de manter com nexus_backup_keep_rotations (padrão 4).

Ao usar rotação, se você quiser economizar espaço em disco adicional durante o processo de backup,
você pode definir nexus_backup_rotate_first: true. Isso configurará a rotação/exclusão preliminar antes do backup. Por padrão, a rotação ocorre após a criação do backup. Observe que, nesse caso, os backups antigos
serão excluídos antes que o backup atual seja feito.

Procedimento de restauração

Execute o playbook com o parâmetro -e nexus_restore_point=
(por exemplo, 2017-12-17-21-00-00 para 17 de dezembro de 2017 às 21:00)

Remoção do nexus

Atenção: isso removerá completamente os dados atuais. Certifique-se de fazer um backup anteriormente, se necessário.

Use a variável nexus_purge, se precisar reiniciar do zero e reinstalar a instância do nexus excluindo todos os dados.

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

Alterar a senha do administrador após a primeira instalação

    nexus_default_admin_password: 'admin123'

Isso não deve ser alterado em seu playbook. Esta variável é preenchida com a senha padrão do administrador do Nexus na primeira instalação e garante que podemos alterar a senha do administrador para nexus_admin_password.

Se você quiser alterar a senha do administrador após a primeira instalação, pode temporariamente alterá-la para a senha antiga a partir da linha de comando. Após a alteração, nexus_admin_password em seu livro de jogadas você pode executar:

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

Canal do Telegram sobre Nexus Sonatype: https://t.me/ru_nexus_sonatype

Apenas usuários registrados podem participar da pesquisa. Entre, por favor.

Quais repositórios de artefatos você está utilizando?

  • Sonatype Nexus gratuito

  • Sonatype Nexus pago

  • Artifactory gratuito

  • Artifactory pago

  • Harbor

  • Pulp

9 usuários votaram. 3 usuários abstiveram-se.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster