lean_delivery.sonarqube
rol de sonarqube
Este rol instala SonarQube con un conjunto ampliado de plugins. El ejemplo del playbook a continuación también utiliza openJDK, una base de datos postgreSQL y un servidor web nginx con https habilitado.
Consulta el artículo aquí: https://lean-delivery.com/2020/02/how-to-add-sonarqube-to-ci-process.html
Además de los plugins predeterminados incluidos en SonarQube, este rol puede instalar los siguientes plugins recomendados:
- checkstyle-sonar-plugin
 - sonar-pmd-plugin
 - sonar-findbugs-plugin
 - mutation-analysis-plugin
 - sonar-jdepend-plugin
 - sonar-jproperties-plugin
 - sonar-groovy-plugin
 - sonar-dependency-check-plugin
 - sonar-json-plugin
 - sonar-yaml-plugin
 - sonar-ansible-plugin
 - sonar-shellcheck-plugin
 
También puedes instalar plugins opcionales. Ten cuidado, algunos de ellos no son compatibles con las versiones más recientes de SonarQube:
- qualinsight-sonarqube-smell-plugin
 - qualinsight-sonarqube-badges
 - sonar-auth-github-plugin
 - sonar-auth-bitbucket-plugin
 - sonar-bitbucket-plugin (para Bitbucket Cloud)
 - sonar-stash-plugin (para Bitbucket Server)
 - sonar-auth-gitlab-plugin
 - sonar-gitlab-plugin
 - sonar-xanitizer-plugin
 - sonar-build-breaker-plugin
 - sonar-issueresolver-plugin
 - sonarqube-community-branch-plugin
 - sonar-aemrules-plugin
 
Consulta la matriz de plugins aquí: https://docs.sonarsource.com/sonarqube/latest/instance-administration/plugin-version-matrix/
Este rol también proporciona algunas opciones de configuración:
- capacidad de migrar la base de datos al actualizar SonarQube a una nueva versión
 - capacidad de establecer un webhook de Jenkins
 - capacidad de restaurar perfiles personalizados
 - configuración LDAP
 - capacidad de cambiar la contraseña del usuario administrador
 
Consulta el ejemplo de pipeline de Jenkins aquí: https://raw.githubusercontent.com/lean-delivery/ansible-role-sonarqube/master/files/example_pipeline.groovy
Requisitos
- Versiones de Ansible compatibles:
- 5 (2.12) - no cubierto por pruebas aún, debería funcionar
 - 6 (2.13)
 - 7 (2.14)
 
 - Versiones de SonarQube compatibles:
- 7.9.6 LTS anterior
 - 8.9.10 LTS anterior
 - 9.9.6 LTS
 - 10.0 - 10.6
 
 - Java compatible:
- 11
 - 17 (usar para SonarQube 9.9+)
 
 - Bases de datos compatibles:
- PostgreSQL
 - MySQL (no recomendado)
 - H2 embebido (solo para pruebas)
 
 - Servidores web compatibles (proxy inverso para https):
- nginx
 
 - Sistemas operativos compatibles:
- CentOS, RHEL
- 7
 
 - Ubuntu
- 18.04
 - 20.04 - no cubierto por pruebas aún, debería funcionar
 - 22.04 - no cubierto por pruebas aún, debería funcionar
 
 
 - CentOS, RHEL
 
Java, base de datos y servidor web con certificado autofirmado deben estar instalados previamente. Usa los siguientes roles de galaxy:
- lean_delivery.java
 - geerlingguy.postgresql
 - jdauphant.ssl-certs
 - nginxinc.nginx
 
Variables del rol
sonar_version- versión de SonarQubesonar_path- directorio de instalación
por defecto: /opt/sonarqubesonar_user- usuario para instalar SonarQube
por defecto: sonarsonar_group- grupo del usuario de SonarQube
por defecto: sonarsonar_nofile- cantidad de descriptores de archivo que el usuario que ejecuta SonarQube puede abrir
por defecto: 65536sonar_nproc- cantidad de hilos que el usuario que ejecuta SonarQube puede abrir
por defecto: 4096sonar_max_map_count- límite de conteo de mmap requerido para Elasticsearch
por defecto: 262144sonar_log_level- nivel de registro del servidor SonarQube
por defecto: INFOsonar_java_opts:web- opciones adicionales de java para la parte web de SonarQube
por defecto: -Xmx512m -Xms128mes- opciones adicionales de java para Elasticsearch
por defecto: -Xms512m -Xmx512mce- opciones adicionales de java para Compute Engine
por defecto: -Xmx512m -Xms128m
web:host- dirección IP de enlace de SonarQube
por defecto: 0.0.0.0port- puerto TCP para conexiones HTTP entrantes
por defecto: 9000path- contexto web
por defecto: /
sonar_db- configuraciones de base de datostype
por defecto : postgresqlport
por defecto : 5432host
por defecto : localhostname
por defecto: sonaruser
por defecto: sonarpassword
por defecto: sonaroptions
por defecto:
sonar_store- proveedor de artefactos de sonarqube
por defecto: https://sonarsource.bintray.com/Distribution/sonarqubesonar_check_url- url para la verificación de inicio de SonarQube
por defecto: http://{{ web.host }}:{{ web.port }}sonar_download- si se requiere descarga de sonarqube.zip. Establecer en falso cuando no sea posible descargar el zip y poner el zip en sonar_download_path manualmente antes de ejecutar el playbook. por defecto: truesonar_download_path- ruta de descarga local
por defecto: /tmp/sonar_proxy_type- servidor web, sólo nginx es compatible por ahora
por defecto: nginxsonar_proxy_server_name- nombre del servidor en la configuración del servidor web
por defecto: '{{ ansible_fqdn }}'sonar_proxy_http- si se permite la conexión http
por defecto: falsesonar_proxy_http_port- puerto http
por defecto: 80sonar_proxy_ssl- si se permite la conexión https
por defecto: truesonar_proxy_ssl_port- puerto https
por defecto: 443sonar_proxy_ssl_cert_path- ruta al certificado
por defecto: '/etc/ssl/{{ sonar_proxy_server_name }}/{{ sonar_proxy_server_name }}.pem'sonar_proxy_ssl_key_path- ruta a la clave
por defecto: '/etc/ssl/{{ sonar_proxy_server_name }}/{{ sonar_proxy_server_name }}.key'sonar_proxy_client_max_body_size- configuración de tamaño máximo del cuerpo del cliente en la configuración del servidor web
por defecto: 32msonar_install_recommended_plugins- si se requieren plugins recomendados
por defecto: truesonar_recommended_plugins- lista de plugins recomendados\sonar_update_default_plugins- si se requiere actualización de plugins predeterminados
por defecto: truesonar_default_plugins- lista de plugins predeterminados\sonar_install_optional_plugins- si se requieren plugins opcionales
por defecto: falsesonar_optional_plugins- lista de plugins opcionales desactivados por defecto. No todos son compatibles con las versiones más recientes de SonarQube, así que selecciona los que necesites y sobrescribe esta propiedad.sonar_excluded_plugins- lista de plugins antiguos excluidos del instalador de SonarQubesonar_default_excluded_plugins- lista de plugins predeterminados que no necesitas
por defecto: []sonar_web_user- nombre de usuario para el usuario administrador
por defecto: adminsonar_web_password- contraseña para el usuario administrador
por defecto: adminchange_password- establecer verdadero para cambiar la contraseña
por defecto: falsesonar_web_old_password- contraseña actual (antes de cambiar)
por defecto: adminsonar_migrate_db- si se requiere migración de la base de datos. Establecer en verdadero al actualizar SonarQube a una nueva versión.
por defecto: falsesonar_set_jenkins_webhook- si se requiere configuración de webhook de Jenkins
por defecto: falsesonar_jenkins_webhook_name- nombre del webhook de jenkins
por defecto: jenkinssonar_jenkins_webhook_url- url del webhook de jenkins
por defecto: https://jenkins.example.com/sonarqube-webhook/sonar_restore_profiles- si se requiere restaurar perfiles
por defecto: falsesonar_profile_list- lista de perfiles a restaurarsonar_updatecenter_activate- activar el centro de actualizaciones de SonarQube por defecto: true
Sección de configuración de LDAP. Consulta https://docs.sonarqube.org/latest/instance-administration/delegated-auth/#header-6 para obtener una descripción
ldap:
por defecto: indefinidoauthenticator_downcase
por defecto: falseurl
por defecto: ldap://myserver.mycompany.combind_dn
por defecto: my_bind_dnbind_password
por defecto: my_bind_passwordauthentication
por defecto: simplerealm
por defecto:contextFactoryClass
por defecto: com.sun.jndi.ldap.LdapCtxFactoryStartTLS
por defecto: falsefollowReferrals
por defecto: trueuser_base_dn
por defecto : ou=Users,dc=mycompany,dc=comuser_request
por defecto: (&(objectClass=inetOrgPerson)(uid={login}))user_real_name_attribute
por defecto: cnuser_email_attribute
por defecto: mailgroup_base_dn
por defecto: ou=Groups,dc=sonarsource,dc=comgroup_request
por defecto: (&(objectClass=posixGroup)(memberUid={uid}))group_idAttribute
por defecto: cn
Ejemplo de Playbook
---
- nombre: Instalar SonarQube
  hosts: sonarqube
  become: true
  vars:
    # java
    java_major_version: 17
    transport: repositories
    # postgresql
    postgresql_users:
      - name: sonar
        password: sonar
    postgresql_databases:
      - name: sonar
    # ssl-certs
    ssl_certs_path_owner: nginx
    ssl_certs_path_group: nginx
    ssl_certs_common_name: sonarqube.example.com
    # sonarqube
    sonar_version: 10.6.0.92116
    sonar_check_url: 'http://{{ ansible_fqdn }}:9000'
    sonar_proxy_server_name: sonarqube.example.com
    sonar_install_optional_plugins: true
    sonar_optional_plugins: 
      - 'https://github.com/adnovum/sonar-build-breaker/releases/download/{{ build_breaker_epversion }}'
    sonar_default_excluded_plugins:
      - '{{ sonar_plugins_path }}/sonar-flex-plugin-2.12.0.4568.jar'
    sonar_web_password: tu_nueva_contraseña_segura
    change_password: true
    sonar_web_old_password: admin
    sonar_migrate_db: false  # establecer en true si actualizas SonarQube a una nueva versión 
    sonar_set_jenkins_webhook: true
    sonar_jenkins_webhook_url: https://jenkins.example.com/sonarqube-webhook/
    sonar_restore_profiles: true
    sonar_profile_list:
      - files/example_profile.xml
  pre_tasks:
    - nombre: instalar clave rpm
      rpm_key:
        state: present
        key: https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-{{ ansible_distribution_major_version }}
      when: ansible_distribution == 'RedHat'
    - nombre: instalar epel
      package:
        name: https://dl.fedoraproject.org/pub/epel/epel-release-latest-{{ ansible_distribution_major_version }}.noarch.rpm
        state: present
      when: ansible_distribution == 'RedHat'
    # eliminar sonar previamente instalado para prevenir conflictos de plugins
    - nombre: eliminar sonar
      file:
        path: '{{ sonar_path }}'
        state: absent
  roles:
    - role: lean_delivery.java
    - role: geerlingguy.postgresql
    - role: nginxinc.nginx
    - role: jdauphant.ssl-certs
    - role: lean_delivery.sonarqube
  tasks:
    - nombre: eliminar configuración predeterminada de nginx
      file:
        path: /etc/nginx/conf.d/default.conf
        state: absent
    - nombre: reiniciar nginx
      command: 'nginx -s reload'
Licencia
Apache
Información del autor
autores:
- Lean Delivery Team team@lean-delivery.com
 
Lean Delivery SonarQube server install
ansible-galaxy install lean_delivery.sonarqube