2017-07-20 3 views
0

Gibt es eine Möglichkeit Jenkins zu brechen bauen, wenn Sonar Quality Gate zusammen mit Sonar-Scanner für MSbuild mit waitForQualityGate() Methode versagt? Ich konnte keine Dokumentation für dasselbe finden. Alles, was ich finden konnte, ist die Verwendung von waitForQualityGate() zusammen mit Sonar-Scanner, aber der allgemeine Sonar-Scanner wird nicht für MSbuild-Projekte empfohlen.waitForQualityGate() mit Sonar-Scanner für MSbuild

Der unten erwähnte Link spricht nicht über die Verwendung von waitForQualityGate mit MSBuild.

Diese Dokumentation spricht über Sonar Scanner, aber ich beziehe mich auf Sonar-Scanner für MSbuild, die insgesamt ein anderer Scanner ist. Die Art, wie ich diesen Scanner benutze, ist wie unten gezeigt.

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" 
} 
} 

Wenn ich jetzt waitforqualitygate() mit beginSonarMSBuild(String VERSION) verwenden, wie unten dargestellt:

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... 
} 

ich diesen Fehler msg java.lang.IllegalStateException: Unable to get SonarQube task id and/or server name. Please use the 'withSonarQubeEnv' wrapper to run your analysis.

Auch ich die gleichen Fehler, wenn ich waitForQualityGate() mit endSonarMSBuild() Schritt verwenden, wie gezeigt unten.

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}" 
    } 
    } 
    } 
} 

So ist die Frage, die ich habe, ist, nicht Sonar-Scanner für MSBuild unterstützen auch waitForQualityGate(), wenn ja, dann wie das gleiche benutzen?

+0

ich Ihre Frage wirklich nicht bekommen. Die build schlägt automatisch fehl, wenn der Code das Sonarqualitätsgatter nicht passiert. Und waitForQualityGate() ist die richtige Methode dafür. – arifCee

+0

Aber wo waitForQualityGate()? als Teil von SonarQube.Scanner.MSBuild.exe begin? oder? SonarQube .Scanner.MSBuild.exe End-Schritt? Bitte beachten Sie, dass "Sonar-Scanner" unterscheidet sich von "Sonar-Scanner für MSbuild" –

Antwort

1

In der Dokumentation wird das Beispiel mit dem Scanner für Maven gemacht, aber es sollte mit jedem Scanner gut funktionieren, solange Sie es in einen withSonarQubeEnv Schritt verpacken.

Für den Scanner für MSBuild ist es wichtig, das Ende Schritt zu wickeln (aber der Schritt Einwickeln beginnen, ist auch eine gute Idee, um automatisch Anmeldeinformationen übergeben.

void beginSonarMSBuild(String VERSION) { 
    stage('Begin SonarQube 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 SonarQube Analysis') { 
     withSonarQubeEnv('civil sonar') { 
      def MSBuildScannerHome = tool 'sonar-scanner-msbuild-3.0.0.629'; 
      bat "${MSBuildScannerHome}\\SonarQube.Scanner.MSBuild.exe end" 
     } // Will collect task id 
    } 
    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}" 
      } 
     } 
    } 
} 
+0

Ich habe meine Frage aktualisiert, so dass es klarer ist. Mein Problem ist spezifisch für Sonar-Scanner für MSBuild . –

+0

Es ist wichtig, dass Sie den Endschritt mit 'withSonarQubeEnv' umbrechen. Ich habe meine Antwort mit einem Beispiel aktualisiert. –

+0

Danke für deine Hilfe @Julien H. Das hat funktioniert. –