lean_delivery.sonarqube

SonarQube角色

License Galaxy Ansible Ansible

此角色安装SonarQube,并附带一套扩展插件。下面的剧本示例还使用了openJDK、PostgreSQL数据库和启用HTTPS的Nginx网页服务器。

详细信息请参见文章: https://lean-delivery.com/2020/02/how-to-add-sonarqube-to-ci-process.html

除了SonarQube自带的默认插件,此角色还可安装以下推荐插件:

  • 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

您还可以安装可选插件,请注意,有些插件在最新版本的SonarQube中不受支持:

  • qualinsight-sonarqube-smell-plugin
  • qualinsight-sonarqube-badges
  • sonar-auth-github-plugin
  • sonar-auth-bitbucket-plugin
  • sonar-bitbucket-plugin(对于Bitbucket Cloud)
  • sonar-stash-plugin(对于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

有关插件矩阵的信息,请参见: https://docs.sonarsource.com/sonarqube/latest/instance-administration/plugin-version-matrix/

该角色还提供一些配置选项:

  • 在更新SonarQube到新版本时迁移数据库的能力
  • 设置Jenkins webhook的能力
  • 恢复自定义配置文件的能力
  • LDAP配置
  • 更改管理员用户密码的能力

有关Jenkins流水线示例,请参见: https://raw.githubusercontent.com/lean-delivery/ansible-role-sonarqube/master/files/example_pipeline.groovy

要求

  • 支持的Ansible版本
    • 5 (2.12) - 尚未测试,但应该可以工作
    • 6 (2.13)
    • 7 (2.14)
  • 支持的SonarQube版本
    • 7.9.6 之前的LTS
    • 8.9.10 之前的LTS
    • 9.9.6 LTS
    • 10.0 - 10.6
  • 支持的Java
    • 11
    • 17(用于SonarQube 9.9+)
  • 支持的数据库
    • PostgreSQL
    • MySQL(不推荐)
    • 嵌入式H2(仅限测试用)
  • 支持的网页服务器(用于HTTPS的反向代理)
    • nginx
  • 支持的操作系统
    • CentOS, RHEL
      • 7
    • Ubuntu
      • 18.04
      • 20.04 - 尚未测试,但应该可以工作
      • 22.04 - 尚未测试,但应该可以工作

Java、数据库、带自签名证书的网页服务器应提前安装。使用以下Galaxy角色:

  • lean_delivery.java
  • geerlingguy.postgresql
  • jdauphant.ssl-certs
  • nginxinc.nginx

角色变量

  • sonar_version - SonarQube版本
  • sonar_path - 安装目录
    默认: /opt/sonarqube
  • sonar_user - 安装SonarQube的用户
    默认: sonar
  • sonar_group - SonarQube用户组
    默认: sonar
  • sonar_nofile - 运行SonarQube的用户可以打开的文件描述符数量
    默认: 65536
  • sonar_nproc - 运行SonarQube的用户可以打开的线程数量
    默认: 4096
  • sonar_max_map_count - Elasticsearch所需的mmap计数限制
    默认: 262144
  • sonar_log_level - SonarQube服务器的日志级别
    默认: INFO
  • sonar_java_opts:
    • web - SonarQube网页部分的额外Java选项
      默认: -Xmx512m -Xms128m
    • es - Elasticsearch的额外Java选项
      默认: -Xms512m -Xmx512m
    • ce - 计算引擎的额外Java选项
      默认: -Xmx512m -Xms128m
  • web:
    • host - SonarQube绑定的IP地址
      默认: 0.0.0.0
    • port - 用于传入HTTP连接的TCP端口
      默认: 9000
    • path - 网页上下文
      默认: /
  • sonar_db - 数据库设置
    • type
      默认 : postgresql
    • port
      默认 : 5432
    • host
      默认 : localhost
    • name
      默认: sonar
    • user
      默认: sonar
    • password
      默认: sonar
    • options
      默认:
  • sonar_store - SonarQube工件提供者
    默认: https://sonarsource.bintray.com/Distribution/sonarqube
  • sonar_check_url - SonarQube启动验证的URL
    默认: http://{{ web.host }}:{{ web.port }}
  • sonar_download - 是否需要下载sonarqube.zip。如果无法下载zip,请手动将zip放到sonar_download_path中,然后再运行剧本。 默认: true
  • sonar_download_path - 本地下载路径
    默认: /tmp/
  • sonar_proxy_type - 仅支持nginx的Web服务器
    默认: nginx
  • sonar_proxy_server_name - 网页服务器配置中的服务器名称
    默认: '{{ ansible_fqdn }}'
  • sonar_proxy_http - 是否允许HTTP连接
    默认: false
  • sonar_proxy_http_port - HTTP端口
    默认: 80
  • sonar_proxy_ssl - 是否允许HTTPS连接
    默认: true
  • sonar_proxy_ssl_port - HTTPS端口
    默认: 443
  • sonar_proxy_ssl_cert_path - 证书路径
    默认: '/etc/ssl/{{ sonar_proxy_server_name }}/{{ sonar_proxy_server_name }}.pem'
  • sonar_proxy_ssl_key_path - 密钥路径
    默认: '/etc/ssl/{{ sonar_proxy_server_name }}/{{ sonar_proxy_server_name }}.key'
  • sonar_proxy_client_max_body_size - 网页服务器配置中的客户端最大正文大小设置
    默认: 32m
  • sonar_install_recommended_plugins - 是否需要推荐插件
    默认: true
  • sonar_recommended_plugins - 推荐插件列表\
  • sonar_update_default_plugins - 是否需要更新默认插件
    默认: true
  • sonar_default_plugins - 默认插件列表\
  • sonar_install_optional_plugins - 是否需要可选插件
    默认: false
  • sonar_optional_plugins - 默认关闭的可选插件列表。并非所有插件在最新的SonarQube版本中都受支持,所以请选择所需的插件并覆盖此属性。
  • sonar_excluded_plugins - 从SonarQube安装程序中排除的旧插件列表
  • sonar_default_excluded_plugins - 您不需要的默认插件列表
    默认: []
  • sonar_web_user - 管理员用户的用户名
    默认: admin
  • sonar_web_password - 管理员用户的密码
    默认: admin
  • change_password - 设置为true以更改密码
    默认: false
  • sonar_web_old_password - 当前密码(更改前)
    默认: admin
  • sonar_migrate_db - 是否需要数据库迁移。当更新现有SonarQube至新版本时设置为true。
    默认: false
  • sonar_set_jenkins_webhook - 是否需要Jenkins webhook配置
    默认: false
  • sonar_jenkins_webhook_name - Jenkins webhook的名称
    默认: jenkins
  • sonar_jenkins_webhook_url - Jenkins webhook的URL
    默认: https://jenkins.example.com/sonarqube-webhook/
  • sonar_restore_profiles - 是否需要恢复配置文件
    默认: false
  • sonar_profile_list - 要恢复的配置文件列表
  • sonar_updatecenter_activate - 激活SonarQube更新中心
    默认: true

LDAP配置部分。 有关描述,请参见 https://docs.sonarqube.org/latest/instance-administration/delegated-auth/#header-6

  • ldap:
    默认: 未定义
    • authenticator_downcase
      默认: false
    • url
      默认: ldap://myserver.mycompany.com
    • bind_dn
      默认: my_bind_dn
    • bind_password
      默认: my_bind_password
    • authentication
      默认: simple
    • realm
      默认:
    • contextFactoryClass
      默认: com.sun.jndi.ldap.LdapCtxFactory
    • StartTLS
      默认: false
    • followReferrals
      默认: true
    • user_base_dn
      默认 : ou=Users,dc=mycompany,dc=com
    • user_request
      默认: (&(objectClass=inetOrgPerson)(uid={login}))
    • user_real_name_attribute
      默认: cn
    • user_email_attribute
      默认: mail
    • group_base_dn
      默认: ou=Groups,dc=sonarsource,dc=com
    • group_request
      默认: (&(objectClass=posixGroup)(memberUid={uid}))
    • group_idAttribute
      默认: cn

示例剧本

---
- name: 安装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  # 设置为true则更新SonarQube至新版本 
    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: 安装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: 安装epel
      package:
        name: https://dl.fedoraproject.org/pub/epel/epel-release-latest-{{ ansible_distribution_major_version }}.noarch.rpm
        state: present
      when: ansible_distribution == 'RedHat'
    # 删除之前安装的sonar以防止插件冲突
    - name: 删除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: 删除默认的nginx配置
      file:
        path: /etc/nginx/conf.d/default.conf
        state: absent
    - name: 重新加载nginx
      command: 'nginx -s reload'

许可证

Apache

作者信息

作者:

安装
ansible-galaxy install lean_delivery.sonarqube
许可证
apache-2.0
下载
25.1k
拥有者
Simplify by using!