【发布时间】:2017-12-25 16:32:17
【问题描述】:
当使用 waitForQualityGate() 方法和 Sonar Scanner for MSbuild 导致 Sonar 质量门失败时,有什么方法可以破坏 Jenkins 构建?我找不到任何相同的文档。我能找到的只是 waitForQualityGate() 和声纳扫描仪的使用,但一般声纳扫描仪不推荐用于 MSbuild 项目。
下面提到的链接没有讨论使用 MSBuild 的 waitForQualityGate。 https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins#AnalyzingwithSonarQubeScannerforJenkins-AnalyzinginaJenkinspipeline
该文档讨论了声纳扫描仪,但我指的是 MSbuild 的声纳扫描仪,它完全是一个不同的扫描仪。我使用这个扫描仪的方式如下图所示。
void beginSonarMSBuild(String VERSION){
stage('Begin Sonar Analysis') {
def MSBuildScannerHome = tool 'sonar-scanner-msbuild-3.0.0.629';
withSonarQubeEnv('civil sonar') {
bat "${MSBuildScannerHome}\\SonarQube.Scanner.MSBuild.exe begin /k:mcdc
/n:mc-design-converter /v:${VERSION}.$BUILD_NUMBER /d:sonar.sourceEncoding=UTF-8
}
}
}
void build(){
stage ('Build'){
bat "Nuget restore SOMEHTING.sln"
bat "MSBuild.exe SOMETHING.csproj "
}
}
void endSonarMSBuild(){
stage ('Complete Sonar Analysis'){
def MSBuildScannerHome = tool 'sonar-scanner-msbuild-3.0.0.629';
bat "${MSBuildScannerHome}\\SonarQube.Scanner.MSBuild.exe end"
}
}
现在当我使用waitforqualitygate() 和beginSonarMSBuild(String VERSION) 时如下所示:
void beginSonarMSBuild(String VERSION){
stage('Begin Sonar Analysis') {
def MSBuildScannerHome = tool 'sonar-scanner-msbuild-3.0.0.629';
withSonarQubeEnv('civil sonar') {
bat "${MSBuildScannerHome}\\SonarQube.Scanner.MSBuild.exe begin /k:mcdc
/n:mc-design-converter /v:${VERSION}.$BUILD_NUMBER /d:sonar.sourceEncoding=UTF-8
}
}
stage("Quality Gate"){
timeout(time: 1, unit: 'MINUTES') {
def qg = waitForQualityGate()
if (qg.status != 'OK') {
error "Pipeline aborted due to quality gate failure: ${qg.status}"
}
}
}
void build(){
scripts here...
}
void endSonarMSBuild(){
scripts here...
}
我收到此错误消息java.lang.IllegalStateException: Unable to get SonarQube task id and/or server name. Please use the 'withSonarQubeEnv' wrapper to run your analysis.
当我使用waitForQualityGate() 和endSonarMSBuild() 步骤时,我也会遇到同样的错误,如下所示。
void beginSonarMSBuild(String VERSION){
stage('Begin Sonar Analysis') {
scripts here...
}
void build(){
scripts here...
}
void endSonarMSBuild(){
stage ('Complete Sonar Analysis'){
def MSBuildScannerHome = tool 'sonar-scanner-msbuild-3.0.0.629';
bat "${MSBuildScannerHome}\\SonarQube.Scanner.MSBuild.exe end"
}
stage("Quality Gate"){
timeout(time: 1, unit: 'MINUTES') {
def qg = waitForQualityGate()
if (qg.status != 'OK') {
error "Pipeline aborted due to quality gate failure: ${qg.status}"
}
}
}
}
所以我的问题是,MSBuild 的声纳扫描仪是否支持waitForQualityGate(),如果支持,那么如何使用它?
【问题讨论】:
-
我真的不明白你的问题。当代码没有通过声纳质量门时,构建会自动失败。而 waitForQualityGate() 是正确的方法。
-
但是在哪里使用waitForQualityGate()?作为
SonarQube.Scanner.MSBuild.exe begin或SonarQube.Scanner.MSBuild.exe end步骤的一部分?请注意sonar scanner与Sonar scanner for MSbuild不同
标签: jenkins msbuild sonarqube sonarqube-scan