一、自由风格的项目
1. 新建任务 (构建一个自由风格的软件项目)>
创建任务.png
2. 源码管理中填写gitlab仓库地址,以及凭据
填写源码地址.png
3. 在构建中选择“Execute SonarQube Scanner”
image.png
- 填写配置文件,配置文件书写规则
sonar.projectKey=simple-python-pyinstaller-app
sonar.projectName=simple-python-pyinstaller-app
sonar.sourceEncoding=UTF-8
sonar.sources=.
image.png
4.点击构建即可查看结果
image.png
-
失败原因为:单元测试的覆盖率太低。阀值的设置在前面SonarQube中已涉及过
image.png
二、使用流水线的任务
1.新建任务,填写名称,类型选择流水线
image.png
2.在项目的根目录创建文件:sonar-project.properties
sonar.projectKey=simple-python-test
sonar.projectName=simple-python-test
sonar.projectVersion=1.2
# 指定python版本
sonar.python.version = 3.8
# 项目描述
sonar.projectDescription = 测试项目
# 项目检测的语言类型
sonar.language=py
# 项目的源码地址,根目录使用 .
sonar.sources=sources
sonar.sourceEncoding=UTF-8
# 排除检测的文件目录(逗号隔开)
sonar.exclusions=**/static/**,**/__init__.py,**/*.xml
# 测试文件的地址
sonar.tests=./tests
sonar.test.inclusions = **/test_*.py
# 排除测试文件(逗号隔开)
sonar.test.exclusions = **/static/**,**/__init__.py,**/coverage.xml
# 单元测试覆盖率
sonar.python.coverage.reportPaths=tests/report/coverage.xml
# 用来从覆盖率报告中排除的匹配方式(逗号隔开)
sonar.coverage.exclusions=**/static/**,**/__init__.py
# 单元测试执行(显示执行数量)
sonar.python.xunit.skipDetails=false
sonar.python.xunit.reportPath = tests/report/junit_report.xml
# 配置不需要检测重复率的文件
# sonar.cpd.exclusions =
# 控制分析期间生产的日志的数量/级别
# sonar.log.level = INFO
3. jenkinsfile增加
pipeline {
agent {
label "windows_node"
}
stages {
stage('环境') {
steps {
sh 'D:/Python3.8/python -m venv ./venv'
sh './venv/Scripts/python -V'
sh './venv/Scripts/pip install --default-timeout=200 -i https://mirrors.aliyun.com/pypi/simple/ --upgrade -r requirements.txt'
}
}
stage('单元测试') {
steps {
sh './venv/Scripts/coverage run -m pytest --junitxml="./tests/report/junit_report.xml"'
sh './venv/Scripts/coverage xml -o tests/report/coverage.xml -i'
}
}
stage('SonarQube analysis') {
steps {
script {
scannerHome = tool "MysonarScannerForJenkins"
}
withSonarQubeEnv("MySonaraServer") {
sh "../../tools/hudson.plugins.sonar.SonarRunnerInstallation/MysonarScannerForJenkins/bin/sonar-scanner"
}
}
}
stage('Quality Gate') {
steps {
timeout(time: 120, unit: 'SECONDS') {
sleep(8)
waitForQualityGate abortPipeline: true
}
}
}
stage('清理') {
steps {
sh 'rm -rf log'
sh 'rm -rf static'
sh 'rm -rf tests/report'
}
}
}
}
4. 构建结果,可以查看报告
image.png
5. 查看报告,并修改使用的质量阀
5.1 测试的质量阀规定:代码超过200行则为失败
image.png
5.2. 重新构建完以后,失败,不进行后续的构建
image.png
image.png