sonarQube是一个代码质量和安全性检测工具,社区版免费,可以帮助开发人员在开发阶段就避免各种质量和安全的问题。
1、安装
官网地址:https://www.sonarqube.org/
可以直接下载运行,bin目录下有各个系统的运行脚本,包括linux、mac、windows,不过运行的时候需要确认本地的JDK版本,7.7以上都需要JDK11。或者使用跑在k8s上面,yaml如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: r3-sonar-qube
name: r3-sonar-qube
namespace: common
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: r3-sonar-qube
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: r3-sonar-qube
spec:
containers:
- env:
- name: LANG
value: en_US.UTF-8
- name: LANGUAGE
value: 'en_US:en'
- name: LC_ALL
value: en_US.UTF-8
- name: JAVA_HOME
value: /opt/java/openjdk
- name: SONARQUBE_HOME
value: /opt/sonarqube
- name: SQ_DATA_DIR
value: /opt/sonarqube/data
- name: SQ_EXTENSIONS_DIR
value: /opt/sonarqube/extensions
- name: SQ_LOGS_DIR
value: /opt/sonarqube/logs
- name: SQ_TEMP_DIR
value: /opt/sonarqube/temp
- name: SONARQUBE_JDBC_URL
value: >-
jdbc:mysql://rm-uf61ldmcjuyy58370to.mysql.rds.aliyuncs.com:3306/sonar?useSSL=false&useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
- name: SONARQUBE_JDBC_USERNAME
value: sonar
- name: SONARQUBE_JDBC_PASSWORD
value: Burgeon123
image: 'sonarqube:7.8-community'
imagePullPolicy: Always
name: r3-sonar-qube
ports:
- containerPort: 9000
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status:
availableReplicas: 1
conditions:
- lastTransitionTime: '2020-06-15T08:58:44Z'
lastUpdateTime: '2020-06-28T13:18:37Z'
message: ReplicaSet "r3-sonar-qube-5c6c764c" has successfully progressed.
reason: NewReplicaSetAvailable
status: 'True'
type: Progressing
- lastTransitionTime: '2020-07-03T17:28:19Z'
lastUpdateTime: '2020-07-03T17:28:19Z'
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: 'True'
type: Available
observedGeneration: 9
readyReplicas: 1
replicas: 1
updatedReplicas: 1
这里建了一个数据库给sonar用,如果不建库的话默认会使用内置的数据库;
2、本地扫描修复
如果是IDEA的话则可以下载sonarlint插件,ctrl+shift+s,就可以进行本代码扫描,扫描规则可以在本地IDEA进行配置;
但是该插件并不会同步扫描结果到sonarQube,即使本地配置了sonarQube的地址及相关信息,不确定是缺陷还是本身就不支持。
如果需要将本地的修复结果同步,则可以使用maven打包的方式同步,修改setting.xml
1.增加插件节点
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
2.增加profile节点
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.host.url>
http://47.100.190.150:9000
</sonar.host.url>
</properties>
</profile>
3.在maven工程的项目pom添加插件引用
<build>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.6.0.1398</version>
</plugin>
</plugins>
</build>
4.reimport后则会出现sonar的打包按钮
点击后开始扫描分析上传,如果sonarQube上没有该项目,则会自动创建一个新的;
sonar的扫描分析等级由高到低:Blocker>Critical>Major>Minor>Info
3、Jenkins发布自动扫描
Jenkins结合sonar比较简单
maven打包的时候加上soanr的server地址就行
mvn clean package install sonar:sonar -Dsonar.host.url=http://47.100.190.150:9000