jenkins - 如何在 Jenkins Pipeline 中获取 SonarQube taskId/report URL?
问题描述
我已经在 Jenkins Pipeline 中集成了 Sonarqube,它的工作方式如下定义:
stage('static check') {
steps {
echo "starting codeAnalyze with SonarQube......"
//sonar:sonar.QualityGate should pass
withSonarQubeEnv('sonar') {
sh "mvn -f pom.xml clean compile sonar:sonar -U"
}
script {
timeout(10) {
def qg = waitForQualityGate()
if (qg.status != 'OK') {
echo "failure: ${qg.status}"
# Plan to send notify to Slack, But can NOT to obtain the Sonar report URL or TaskId
}
}
}
}
}
计划向 Slack 发送相应的通知,但无法获取 Sonar 报告 URL 或 TaskId
并发现有些人建议使用 BUILD_LOG_REGEX: SonarQube result URL: ${BUILD_LOG_REGEX, regex=".*ANALYSIS SUCCESSFUL, you can browse (.*)", showTruncatedLines=false, substText="$1"}
,但这仅适用于电子邮件扩展插件。
另一个建议是这样编写报告 URL:ProjectURL = host + "/dashboard?id=" + ProjectID
,我们不容易获得 ProjectID,因为 projectID 是从 Pom.xml 编写为:groupId:artifactId
。
也许有一些简单的方法可以获取 Sonar TaskId 或 Report URL,尤其是是否waitForQualityGate() or other method
会返回 Sonar TaskId 或 Report URL?
解决方案
您可以通过阅读文件查看报告./target/sonar/report-task.txt
使用def getURL = readProperties file: './target/sonar/report-task.txt'
并通过调用这样的东西来提取,${getURL['dashboardUrl']}
这将给出报告的 url。上面的文件也有taskId。
所以它应该像这样
def qg = waitForQualityGate()
if (qg.status != 'OK') {
echo "failure: ${qg.status}"
def getURL = readProperties file: './target/sonar/report-task.txt
Add your slackmsg here use in that ${getURL['dashboardUrl']}
}
推荐阅读
- gitlab - Git Lab - 每月安排 MR
- linux-kernel - 为什么在 Linux 虚拟文件系统中,s_blocksize_bits 比普通二进制文件少一位?
- python-3.x - 自动尺寸注释框
- javascript - 小discord.js头像图片
- android - setSupportActionBar() 在 android studio 4.0 中不起作用
- firebase - 如何在 Firestore 中使用 WhereIn?
- apache-spark - 使用 Apache Spark 将数据存储导出到 GCS Bucket 中的 DATASTORE_BACKUP
- mysql - MySQL:删除 WordPress 上传路径之间的数字字符串
- xamarin - 如果是多个数组列表,我可以将它们存储在某处并调用它们,还是需要为每个 AL 创建单独的类
- sql - AND 的参数必须是布尔类型,而不是整数类型