SonarQube最佳实践

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: SonarQube最佳实践

安装

直接docker-compose整起

version: '3'
services:
  # 使用 PostgreSQL 作为 SonarQube 的持久化方案
  # 注:由于 SonarQube 7.9 及之后的版本不支持 MySQL,因此 MySQL 不作为考虑对象
  postgres:
    image: postgres:12
    container_name: sonarqube_postgres
    privileged: true
    ports:
      - "5432:5432"
    networks:
      - sonarnet
    restart: always
    # 将 PostgreSQL 数据文件存放至宿主机
    volumes:
      - ./postgres:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: sonar
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
  sonarqube:
    image: hub4rpi64/sonarqube:8.3.1.34397
    #image: hub4rpi64/sonarqube:7community
    container_name: sonarqube
    privileged: true
    ports:
      - "9000:9000"
    restart: always
    networks:
      - sonarnet
    depends_on:
      - postgres
    # 将 SonarQube 日志文件、数据文件、配置文件、扩展插件存放至宿主机
    volumes:
      - ./data:/opt/sonarqube/data
      - ./extensions:/opt/sonarqube/extensions
      - ./logs:/opt/sonarqube/logs
      - ./conf:/opt/sonarqube/conf
        #- ./lib:/opt/sonarqube/lib
    # 配置 SonarQube 的数据源,本例为 PostgreSQL
    environment:
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
      SONAR_JDBC_URL: jdbc:postgresql://postgres:5432/sonar?useUnicode=true&characterEncoding=utf8
    # 由于 SonarQube 内部会启动 ElasticSearch,因此需要此配置
    ulimits:
      nproc: 65535
      nofile:
        soft: 65536
        hard: 65536
networks:
  sonarnet:
    driver: bridge

由于是在arm架构部署,所以我用的镜像不是官方的,environment的变量与官方不同,需要注意

下载插件

中文插件

https://github.com/xuhuisheng/sonar-l10n-zh

对应版本自个找

gitlab插件

# 最高4.1.0
https://github.com/gabrie-allaigre/sonar-gitlab-plugin
# 4.2.0
https://github.com/javamachr/sonar-gitlab-plugin/releases/tag/4.2.0

对应版本自个找

分支插件

https://github.com/mc1arke/sonarqube-community-branch-plugin

对应版本自个找

配置插件

将插件放到extensions/plugins目录下,重新启动sonarQube即可

注意:分支插件比较特殊,还需要将插件拷贝到容器的lib/common

docker cp sonarqube-community-branch-plugin.jar <容器id>:/opt/sonarqube/lib/common

也可以直接在docker-compose配置卷

volumes:
  - ./sonarqube-community-branch-plugin.jar:/opt/sonarqube/lib/common/sonarqube-community-branch-plugin.jar

SonarQube控制台

打开:http://ip:9000

配置质量规则

由于执行代码检测前需要有质量规则,不然鬼晓得怎么检测

在控制台:配置——> 应用市场

搜索插件:Java Code Quality and Security, 安装

找不到直接搜索java, 找到描述是Code Analyzer for Java的

安装完重启sonarQube

控制台经常安装转圈圈,转着转着就没了,想知道插件是否在下载,进入sonar安装目录,extensions/downloads,可以看到.tmp的文件,ll命令查看文件大小,看看是不是一直在变

配置gitlab

控制台:配置->配置 -> gitlab

  • 修改GitLab url
  • gitlab user token

user token 生成方式:http://{gitlab}/profile/personal_access_tokens

配置ALM

控制台:配置->配置 -> ALM -> gitlab

生成个人token: http://{gitlab}/profile/personal_access_tokens

生成appid 和secret: https://{gitlab}/oauth/applications/

配置回调地址: https://{sonar}/oauth2/callback/gitlab

需要先在通用配置中配置 serverBaseUrl: https://{sonar}

安全审计插件(可选)

应用市场搜

  • findBugs
  • dependecy-check

新建项目

当与gitlab集成之后,并且开启了组同步功能,有关新增的用户与项目会自动划分的同名的群组下

新建群组

配置 -> 权限 -> 群组

配置权限模板

配置 -> 权限 -> 权限模板 -> 创建模板

填写项目标识,使用正则表达式,使得提交的项目与权限模板像匹配

新建项目

在控制台:右上角,点击+号,新建项目

按照指示来就成

只需在第一次新建项目时使用,主要为了生成一个token,后续可以直接使用token推送项目

JAVA项目配置

配置maven插件

<pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.sonarsource.scanner.maven</groupId>
          <artifactId>sonar-maven-plugin</artifactId>
          <version>3.7.0.1746</version>
        </plugin>
        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>0.8.4</version>
        </plugin>
      </plugins>
</pluginManagement>
<plugins>
  <plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <executions>
      <execution>
        <id>prepare-agent</id>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
      </execution>
      <execution>
        <id>report</id>
        <goals>
          <goal>report</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

配置gitlab-ci

stages:
  - sonarqube_analysis
  - dependecy-check
variables:
  APP_NAME: xxxx
  SONAR_TOKEN: xxxx
  SONAR_HOST_URL: http://ip:port
# 执行 SonarQube 分析,并将检测结果反馈至 GitLab
sonarqube_analysis:
  stage: sonarqube_analysis
  script:
    - mvn --batch-mode verify -Dmaven.test.skip=true sonar:sonar -Dsonar.projectKey=$APP_NAME -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_TOKEN -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME -Dsonar.branch.name=$CI_COMMIT_REF_NAME -Dsonar.gitlab.project_id=$CI_PROJECT_ID
  tags:
    - xxx

依赖扫描

这个项目的依赖呀,都是人写的,人写的,就会有漏洞,怎么办,扫呗

  1. 在gitlab-runner的服务器中安装denpendecy-check
https://github.com/jeremylong/DependencyCheck/

下个release,装就完啦,比如我下好解压在/opt/sonar目录下

  1. 配置runner的映射

由于我的ci是docker跑得,所以要有映射

打开runner配置文件:vim /etc/gitlab-runner/config.toml

在volumes项加个映射:/opt/sonar:/opt/sonar

配置ci

stages:
  - dependecy-check
# 依赖扫描
dependecy-check:
  stage: dependecy-check
  script:
    - mvn clean package -Dmaven.test.skip=true
    - /opt/sonar/dependency-check/bin/dependency-check.sh -s xx.jar -f HTML -o ./java-sec-code-report.html
    - mvn --batch-mode verify sonar:sonar -Dsonar.projectKey=$APP_NAME -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_TOKEN -Dsonar.dependencyCheck.htmlReportPath=java-sec-code-report.html
  when: manual
  tags:
    - xxx

依赖扫描需要装dependecy-check插件

现在,提交代码,跑个ci看看吧~

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
安全 关系型数据库 Java
SonarQube实战:部署(一)
基于Docker部署SonarQube及中文汉化。
367 0
|
2月前
|
jenkins Java 关系型数据库
jenkins学习笔记之十二:sonarqube9.9、SonarScanner4.8部署
jenkins学习笔记之十二:sonarqube9.9、SonarScanner4.8部署
【Sonarqube】初体验
【Sonarqube】初体验
109 0
|
jenkins Java 关系型数据库
jenkins持续集成从0入门到实战【八】集成sonarqube代码检测
SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检 测。
376 1
jenkins持续集成从0入门到实战【八】集成sonarqube代码检测
|
jenkins Devops 测试技术
Jenkins + Gitlab + Sonarqube 集成初体验
Jenkins + Gitlab + Sonarqube 集成初体验
320 0
Jenkins + Gitlab + Sonarqube 集成初体验
|
jenkins 持续交付 开发工具
SonarQube集成Jenkins自动化检查代码
SonarQube集成Jenkins自动化检查代码
SonarQube集成Jenkins自动化检查代码
|
安全 Oracle 关系型数据库
SonarQube搭建手记
这篇文章记录的是SonarQube服务搭建的详细过程,应用于云迁移后的PipleLine的代码扫描环节。
519 0
SonarQube搭建手记
|
存储 IDE Java
SonarQube环境搭建
SonarQube是一款开源的代码质量检查工具,主要用于源代码的质量检查,是devops流水线中很常用的一个工具,以插件化的形式,支持多种编程/脚本语言的代码分析,同时也提供了对常用IDE工具的支持。
SonarQube环境搭建
|
jenkins 程序员 持续交付
代码质量管理:SonarQube + Jenkins Pipeline配置
前段时间对自己的项目进行代码质量扫描,曾经以为自己的代码质量算是不错的,结果发现一堆的bug或者smell code,灵魂受到1w点伤害。
598 0
代码质量管理:SonarQube + Jenkins Pipeline配置
|
网络协议 关系型数据库 Java
Sonarqube部署
Sonar(SonarQube)是一个开源平台,用于管理源代码的质量,这里结合Jenkins使用,用于代码检测
582 0
下一篇
无影云桌面