在kubernetes中部署sonarqube,Jenkins pipeline+sonar+python自动化测试和代码质量检测
SonarQube是一个开源的代码质量管理平台,它可以扫描出我们代码中的一些bug、重复代码、单元测试覆盖率等问题。Sonar对应有服务端和客户端,服务端需要我们安装Sonar Server,而客户端通过Sonar Scanner进行项目源码扫描,然后上传导Sonar Server中。Sonar的整体架构如下图:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: sonar
spec:
replicas: 1
template:
metadata:
name: sonar
labels:
name: sonar
app: sonar
spec:
containers:
- image: sonarqube:lts
name: sonar
env:
- name: SONARQUBE_JDBC_USERNAME
value: sonar
- name: SONARQUBE_JDBC_PASSWORD
value: sonar
- name: SONARQUBE_JDBC_URL
value: jdbc:postgresql://xxx:1543/sonar
ports:
- containerPort: 9000
name: sonar
volumeMounts:
- name: sonarqube-extensions
mountPath: /opt/sonarqube/extensions
- name: sonarqube-data
mountPath: /opt/sonarqube/data
volumes:
- name: sonarqube-extensions
nfs:
server: ""
path: "/sonarqube/extensions"
readOnly: false
- name: sonarqube-data
nfs:
server: ""
path: "/sonarqube/data"
readOnly: false
---
apiVersion: v1
kind: Service
metadata:
name: sonar
labels:
name: sonar
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9000
selector:
app: sonar
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: sonar
spec:
rules:
- host: sonar.xxx.com
http:
paths:
- path: /
backend:
serviceName: sonar
servicePort: 80
jenkins配置部分
安装插件
![](http://idcsec.com/wp-content/uploads/2019/09/image-4-1024x111.png)
配置 SonarScanner
![](http://idcsec.com/wp-content/uploads/2019/09/image-5-1024x269.png)
配置sonarQubeService 添加secret
![](http://idcsec.com/wp-content/uploads/2019/09/image-9-1024x300.png)
![](http://idcsec.com/wp-content/uploads/2019/09/image-8-1024x301.png)
配置项目
https://github.com/saurabhjuneja/sonar-example
https://github.com/zbbkeepgoing/pipeline-sample
在要检查的代码工程目录下创建文件sonar-project.properties文件复制一下内容修改
# Required metadata
sonar.projectKey=org.codehaus.sonar:python-simple-sonar-runner
sonar.projectName=mx_company_data_server
sonar.projectVersion=sonar_dev_v1
# Comma-separated paths to directories with sources (required)
sonar.sources=./
# Language
sonar.language=py
# Encoding of the source files
sonar.sourceEncoding=UTF-8
#pylint
sonar.python.pylint.reportPath=pylint-report.txt
#coverage
sonar.python.coverage.reportPath=*coverage-*.xml
sonar.python.xunit.reportPath=nosetests.xml
sonar.python.xunit.skipDetails=true
修改新增pipeline
stage('SonarQube analysis') {
def sonarqubeScannerHome = tool name: 'SonarQube4.0'
withSonarQubeEnv('SonarQube') {
sh "${sonarqubeScannerHome}/bin/sonar-scanner"
}
}
![](http://idcsec.com/wp-content/uploads/2019/09/image-10-1024x337.png)
![](http://idcsec.com/wp-content/uploads/2019/09/image-11-1024x297.png)
Pylint报告
Pylint是一个Python代码分析工具,它分析Python代码中的错误,查找不符合代码风格标准和有潜在问题的代码。安装方法为:“pip install pylint”,命令行生成报告的方法为:
pylint <module_or_package> -r n --msg-template="{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}" > <report_file>
https://docs.sonarqube.org/latest/analysis/languages/python/
- Pylint 是一个 Python 工具,除了平常代码分析工具的作用之外,它提供了更多的功能:如检查一行代码的长度,变量名是否符合命名标准,一个声明过的接口是否被真正实现等等。
- Pylint 的一个很大的好处是它的高可配置性,高可定制性,并且可以很容易写小插件来添加功能。
- 如果运行两次 Pylint,它会同时显示出当前和上次的运行结果,从而可以看出代码质量是否得到了改进。
- 目前在 eclipse 的 pydev 插件中也集成了 Pylint。
https://docs.sonarqube.org/latest/analysis/analysis-parameters/
https://docs.sonarqube.org/display/SONARQUBE44/Python+Plugin
覆盖率报告
https://docs.sonarqube.org/latest/analysis/coverage/
coverage erase
coverage run --branch --source=<python packages> <program>
coverage xml -i
单元测试报告
Python里单元测试报告要借助nose,连接为:https://nose.readthedocs.io/en/latest/ 该连接里都有具体的安装说明,生成单元测试报告的方法为:
nosetests --with-xunit [tests to execute]