专栏首页Ryan MiaoJenkins集成Sonar Quabe和权限配置

Jenkins集成Sonar Quabe和权限配置

安装Sonar

Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。 此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

这里使用docker安装sonar. 要求宿主机器安装了docker和docker-compose

docker-compose.yaml

version: "3"

services:
  sonarqube:
    image: sonarqube:7.7-community
    ports:
      - "9000:9000"
    networks:
      - sonarnet
    environment:
      - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
    volumes:
      - sonarqube_conf:/opt/sonarqube/conf
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins

  db:
    image: postgres:11-alpine
    networks:
      - sonarnet
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar
    volumes:
      - postgresql_data:/var/lib/postgresql/data

networks:
  sonarnet:
    driver: bridge

volumes:
  sonarqube_conf:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_bundled-plugins:
  postgresql_data:

sonar的配置文件会挂载出来,目录类似/var/lib/docker/volumes/sonarqube_sonarqube_conf/_data.

修改sonar.properties,以添加自定义配置,比如sso,比如ldap

命令行执行启动

docker-compose up -d

浏览器访问localhost:9000

Jenkins配置sonar

安装sonar插件 SonarQube Scanner for Jenkins

然后

Jenkins 系统配置SonarQube servers

name: SonarQube

Jenkins 全局工具配置Sonar Scanner

name: SonarQube Scanner

Maven Jenkins Job配置

如果选择构建一个maven类型的Jenkins Job, 需要在构建后添加步骤执行sonar scan

添加post step, 需要指定sonar-project.properties配置文件

sonar-project.properties会指定项目的分组key。Sonar通过分组key前缀可以设置分组权限。比如

# must be unique in a given SonarQube instance
# 项目的唯一性id,使用分组标识做为前缀,比如项目属于部门my
sonar.projectKey=my:demo
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=my:demo
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
# 要扫描的模块位置,如果是根目录,就是.
sonar.sources=web-api

# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
# 这里需要指定编译后jar所在目录
sonar.java.binaries=**/target/classes

然后,点击构建即可在sonar上看到结果。

Pipeline Jenkins Job配置

如果采用Pipeline作为Jenkins Job, 需要修改Jenkinsfile的步骤。

参考官方文档

添加两个stage

    stage('SonarQube analysis') {
        def sonarqubeScannerHome = tool name: 'SonarQube Scanner'

        withSonarQubeEnv('SonarQube') {
            //这里project_module是模块所在路径,目的是指定配置文件
            sh "${sonarqubeScannerHome}/bin/sonar-scanner -Dproject.settings=./${project_module}/sonar-project.properties"
        }

    }

    // No need to occupy a node
    stage("Quality Gate"){
        //最多等待1min,如果扫描没通过,超时失败
        timeout(time: 1, unit: 'MINUTES') { // Just in case something goes wrong, pipeline will be killed after a timeout
            def qg = waitForQualityGate() // Reuse taskId previously collected by withSonarQubeEnv
            if (qg.status != 'OK') {
                error "Pipeline aborted due to quality gate failure: ${qg.status}"
            }
        }
    }

由于等待sonar扫描结果需要回调webhook, 因此,需要在sonar配置Jenkins的webhook回调地址。

假设Jenkins地址为: http://jenkins.demo.com

打开sonar-administration-configuration-webhooks, 添加一个webhook

http://jenkins.demo.com/sonarqube-webhook/

这样扫描结果会通知Jenkins.

Sonar权限管理

Sonar设置权限有admin和普通用户以及分组和创建者。我们默认创建者和admin有所有权限, 接下来就是我们关注的分组权限。百度大部分文章都没提到,只是到sonar扫描就结果了。而一个代码质量检测平台肯定是给人用的,就必须设置权限问题。我们希望,不同部门的人只能看到部门自己的代码结果。所以代码必须和组进行关联。

集成ldap可以直接使用公司现有的组织架构,也可以手动添加group,然后group添加人。

接下来,如何绑定项目给指定group? 当然可以直接手动设置,但公司那么多项目,肯定需要配置化自动绑定。Sonar提供了permission template来实现这个功能。参见官网

use the "Create" button on Administration > Security >** Permission Templates. It is possible to provide a Project key pattern**.

这里有个问题,就是Project Key Pattern是正则表达式,所以,针对我们前面demo,这个内容应是

my.*

先要配置好permission template, 设置哪些组可以有哪些权限,比如设置组my可以访问所有my为前缀的项目。 然后进行代码扫描,生成的项目就会绑定这个模板对应的权限了。

Sonar quality Gate通过阈值设置

Sonar通过quality gate规则来决定扫描是否通过,指标有很多种,比如设定bug不能超过10个, 当扫描结果bug大于10就会失败。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ

    之前有文章 《从0到1学习Flink》—— Flink 写入数据到 Kafka 写过 Flink 将处理后的数据后发到 Kafka 消息队列中去,当然我们常用的...

    zhisheng
  • 「docker实战篇」python的docker-破解中间人无法联网之ssl pining技术分析与xponsed安装(20)

    1.根据浏览器或者说是操作系统(android)自带的证书链 2.使用自签名证书 3.自签名证书加上SSL pinning特性

    IT故事会
  • 「docker实战篇」python的docker-docker系统管理-基本命令(29)

    PS:docker的基本命令很重要,但是如果会使用help这个功能官方介绍的更清楚,我这里也是把英文做了翻译。主要还是理解原理。

    IT故事会
  • 「docker实战篇」python的docker- 多设备端并发抓取抖音粉丝数据(23)

    PS:调试过程中,夜神模拟器,appium,python代码插件没有问题的话,程序在运行过程中出现的最多的问题还是xpath定位的问题,对于python的代码其...

    IT故事会
  • 「docker实战篇」python的docker-打造多任务端app应用数据抓取系统-系统介绍(27)

    IT故事会
  • docker常用命令

    更新 : @snakeliwei 的提醒, 现在的docker有了专门清理资源(container、image、网络)的命令。 docker 1.13 中增加了...

    用户1437675
  • Docker清理占用的磁盘空间

    摘要:用了 Docker,好处挺多的,但是有一个不大不小的问题,它会一不小心占用太多磁盘,这就意味着我们必须及时清理。

    用户1437675
  • 「docker实战篇」python的docker- 抖音视频抓取(中)(25)

    IT故事会
  • 微服务架构演进过程及好处,技术点总结与展望

    微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活、更能适应现在需求快速变更的大环境。

    用户4447430
  • 0574-5.16.1-CDSW1.4升级1.5版本db-migrate镜像启动失败问题解决

    通过上篇文章《0573-5.16.1-如何将CDSW从1.4.2升级到1.5》升级CDSW服务后,启动CDSW服务在Cloudera Manager上显示服务启...

    Fayson

扫码关注云+社区

领取腾讯云代金券