lean_delivery.sonarqube
Rôle SonarQube
Ce rôle installe SonarQube avec un ensemble élargi de plugins. L'exemple de playbook ci-dessous utilise également openJDK, une base de données PostgreSQL et un serveur web nginx avec HTTPS activé.
Voir l'article ici : https://lean-delivery.com/2020/02/how-to-add-sonarqube-to-ci-process.html
En plus des plugins par défaut, SonarQube peut installer les plugins recommandés suivants :
- plugin 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
Vous pouvez également installer des plugins optionnels. Soyez prudent, certains d'entre eux ne sont pas pris en charge dans les dernières versions de SonarQube :
- plugin qualinsight-sonarqube-smell
- plugin qualinsight-sonarqube-badges
- plugin sonar-auth-github
- plugin sonar-auth-bitbucket
- plugin sonar-bitbucket (pour Bitbucket Cloud)
- plugin sonar-stash (pour Bitbucket Server)
- plugin sonar-auth-gitlab
- plugin sonar-gitlab
- plugin sonar-xanitizer
- plugin sonar-build-breaker
- plugin sonar-issueresolver
- plugin sonarqube-community-branch
- plugin sonar-aemrules
Voir la matrice des plugins ici : https://docs.sonarsource.com/sonarqube/latest/instance-administration/plugin-version-matrix/
Ce rôle propose également quelques options de configuration :
- possibilité de migrer la base de données lors de la mise à jour de SonarQube vers une nouvelle version
- possibilité de définir un webhook Jenkins
- possibilité de restaurer des profils personnalisés
- configuration LDAP
- possibilité de changer le mot de passe de l'utilisateur admin
Voir l'exemple de pipeline Jenkins ici : https://raw.githubusercontent.com/lean-delivery/ansible-role-sonarqube/master/files/example_pipeline.groovy
Exigences
- Versions Ansible prises en charge :
- 5 (2.12) - pas encore couvert par les tests, devrait fonctionner
- 6 (2.13)
- 7 (2.14)
- Versions SonarQube prises en charge :
- 7.9.6 version LTS précédente
- 8.9.10 version LTS précédente
- 9.9.6 LTS
- 10.0 - 10.6
- Java pris en charge :
- 11
- 17 (à utiliser pour SonarQube 9.9+)
- Bases de données prises en charge :
- PostgreSQL
- MySQL (non recommandé)
- H2 embarqué (pour tests uniquement)
- Serveurs web pris en charge (proxy inverse pour HTTPS) :
- nginx
- Systèmes d'exploitation pris en charge :
- CentOS, RHEL
- 7
- Ubuntu
- 18.04
- 20.04 - pas encore couvert par les tests, devrait fonctionner
- 22.04 - pas encore couvert par les tests, devrait fonctionner
- CentOS, RHEL
Java, base de données et serveur web avec certificat auto-signé doivent être préalablement installés. Utilisez les rôles galaxy suivants :
- lean_delivery.java
- geerlingguy.postgresql
- jdauphant.ssl-certs
- nginxinc.nginx
Variables du rôle
sonar_version
- version de SonarQubesonar_path
- répertoire d'installation
par défaut : /opt/sonarqubesonar_user
- utilisateur pour installer SonarQube
par défaut : sonarsonar_group
- groupe de l'utilisateur SonarQube
par défaut : sonarsonar_nofile
- nombre de descripteurs de fichiers que l'utilisateur exécutant SonarQube peut ouvrir
par défaut : 65536sonar_nproc
- nombre de threads que l'utilisateur exécutant SonarQube peut ouvrir
par défaut : 4096sonar_max_map_count
- limite des comptes mmap requise pour Elasticsearch
par défaut : 262144sonar_log_level
- Niveau de journalisation du serveur SonarQube
par défaut : INFOsonar_java_opts
:web
- options Java supplémentaires pour la partie web de SonarQube
par défaut : -Xmx512m -Xms128mes
- options Java supplémentaires pour Elasticsearch
par défaut : -Xms512m -Xmx512mce
- options Java supplémentaires pour le moteur de calcul
par défaut : -Xmx512m -Xms128m
web
:host
- adresse ip de liaison SonarQube
par défaut : 0.0.0.0port
- port TCP pour les connexions HTTP entrantes
par défaut : 9000path
- contexte web
par défaut : /
sonar_db
- paramètres de la base de donnéestype
par défaut : postgresqlport
par défaut : 5432host
par défaut : localhostname
par défaut : sonaruser
par défaut : sonarpassword
par défaut : sonaroptions
par défaut :
sonar_store
- fournisseur d'artéfacts sonarqube
par défaut : https://sonarsource.bintray.com/Distribution/sonarqubesonar_check_url
- url pour la vérification du démarrage de SonarQube
par défaut : http://{{ web.host }}:{{ web.port }}sonar_download
- téléchargement de sonarqube.zip requis. Définir à faux si le téléchargement de zip n'est pas possible et mettre le zip sur sonar_download_path manuellement avant l'exécution du playbook. par défaut : truesonar_download_path
- chemin de téléchargement local
par défaut : /tmp/sonar_proxy_type
- serveur web, nginx est le seul supporté pour l’instant
par défaut : nginxsonar_proxy_server_name
- nom du serveur dans la configuration du serveur web
par défaut : '{{ ansible_fqdn }}'sonar_proxy_http
- le connexion HTTP est-elle autorisée
par défaut : falsesonar_proxy_http_port
- port http
par défaut : 80sonar_proxy_ssl
- la connexion HTTPS est-elle autorisée
par défaut : truesonar_proxy_ssl_port
- port https
par défaut : 443sonar_proxy_ssl_cert_path
- chemin vers le certificat
par défaut : '/etc/ssl/{{ sonar_proxy_server_name }}/{{ sonar_proxy_server_name }}.pem'sonar_proxy_ssl_key_path
- chemin vers la clé
par défaut : '/etc/ssl/{{ sonar_proxy_server_name }}/{{ sonar_proxy_server_name }}.key'sonar_proxy_client_max_body_size
- paramètre de taille maximale du corps client dans la configuration du serveur web
par défaut : 32msonar_install_recommended_plugins
- les plugins recommandés sont-ils requis
par défaut : truesonar_recommended_plugins
- liste des plugins recommandés\sonar_update_default_plugins
- la mise à jour est-elle requise pour les plugins par défaut
par défaut : truesonar_default_plugins
- liste des plugins par défaut\sonar_install_optional_plugins
- les plugins optionnels sont-ils requis
par défaut : falsesonar_optional_plugins
- liste des plugins optionnels désactivés par défaut. Tous ne sont pas pris en charge dans les dernières versions de SonarQube, donc sélectionnez ceux dont vous avez besoin et remplacez cette propriété.sonar_excluded_plugins
- liste des anciens plugins exclus de l'installateur SonarQubesonar_default_excluded_plugins
- liste des plugins par défaut dont vous n'avez pas besoin
par défaut : []sonar_web_user
- nom d'utilisateur pour l'utilisateur admin
par défaut : adminsonar_web_password
- mot de passe pour l'utilisateur admin
par défaut : adminchange_password
- définir sur vrai pour changer le mot de passe
par défaut : falsesonar_web_old_password
- mot de passe actuel (avant le changement)
par défaut : adminsonar_migrate_db
- migration de la base de données nécessaire ? Définir sur vrai lors de la mise à jour de SonarQube vers une nouvelle version.
par défaut : falsesonar_set_jenkins_webhook
- configuration du webhook Jenkins requise ?
par défaut : falsesonar_jenkins_webhook_name
- nom du webhook Jenkins
par défaut : jenkinssonar_jenkins_webhook_url
- url du webhook Jenkins
par défaut : https://jenkins.example.com/sonarqube-webhook/sonar_restore_profiles
- restauration des profils requise ?
par défaut : falsesonar_profile_list
- liste des profils à restaurersonar_updatecenter_activate
- activer le centre de mise à jour SonarQube
par défaut : true
Section de configuration LDAP. Voir https://docs.sonarqube.org/latest/instance-administration/delegated-auth/#header-6 pour obtenir la description
ldap
:
par défaut : non définiauthenticator_downcase
par défaut : falseurl
par défaut : ldap://myserver.mycompany.combind_dn
par défaut : my_bind_dnbind_password
par défaut : my_bind_passwordauthentication
par défaut : simplerealm
par défaut :contextFactoryClass
par défaut : com.sun.jndi.ldap.LdapCtxFactoryStartTLS
par défaut : falsefollowReferrals
par défaut : trueuser_base_dn
par défaut : ou=Users,dc=mycompany,dc=comuser_request
par défaut : (&(objectClass=inetOrgPerson)(uid={login}))user_real_name_attribute
par défaut : cnuser_email_attribute
par défaut : mailgroup_base_dn
par défaut : ou=Groups,dc=sonarsource,dc=comgroup_request
par défaut : (&(objectClass=posixGroup)(memberUid={uid}))group_idAttribute
par défaut : cn
Exemple de Playbook
---
- name: Installer 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: your_new_secure_password
change_password: true
sonar_web_old_password: admin
sonar_migrate_db: false # à définir sur vrai si mise à jour de SonarQube vers une nouvelle version
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:
- name: installer la clé rpm
rpm_key:
state: present
key: https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-{{ ansible_distribution_major_version }}
when: ansible_distribution == 'RedHat'
- name: installer epel
package:
name: https://dl.fedoraproject.org/pub/epel/epel-release-latest-{{ ansible_distribution_major_version }}.noarch.rpm
state: present
when: ansible_distribution == 'RedHat'
# supprimer le sonar précédemment installé pour éviter les conflits de plugins
- name: supprimer 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:
- name: supprimer la configuration nginx par défaut
file:
path: /etc/nginx/conf.d/default.conf
state: absent
- name: recharger nginx
command: 'nginx -s reload'
Licence
Apache
Informations sur l'auteur
auteurs :
- Équipe Lean Delivery team@lean-delivery.com
Lean Delivery SonarQube server install
ansible-galaxy install lean_delivery.sonarqube