0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JenkinsでSonarQubeのQualityGateがFailedの場合にビルドを失敗させたい (プラグインを使わない場合)

Last updated at Posted at 2018-11-21

JenkinsでSonarQubeのQualityGateがFailedの場合にビルドを失敗させたい

  • 事情によりSonarQubeプラグインを使用することが困難だったため、SonarQubeプラグインを使わずにJenkinsからSonarQubeのQualityGateの状態を取得し、エラーだったらパイプラインをこけさせるように設定してみました。

バージョン

SonarQube

6.7.3

Jenkins

2.71

Jenkinsfile


QGSTATUS_WAITINTERVAL=5
QGSTATUS_TIMEOUT=60

@NonCPS
def jsonParse(text) {
    return new groovy.json.JsonSlurperClassic().parseText(text);
}

pipeline { 
    stages {
        stage('チェックアウト') {
            steps {
                git branch: 'develop', credentialsId: 'aaaaaaaaaaaaaaaaaaaaa', url: 'http://repository/project.git'
            }
        }
        stage('Build/UT/Upload to SonarQube') {
            steps {
                dir("project-root/") {
                    // テスト実行
                    sh "mvn -DskipTests=false -B -Dmaven.test.failure.ignore=true clean install"

                    // SonarQube解析
                    sh "mvn -Dmaven.test.skip=true --quiet sonar:sonar -Dsonar.host.url=http://example.com:9000 -Dsonar.branch="develop"
                }
                script {

                    // API経由でプロジェクトのQualityGateの状態を取得
                    sh "curl http://example.com:9000/api/qualitygates/project_status?projectKey=your_project_key -o qualityGate.json"

                    // 評価対象ファイルが存在するか確認する
                    def timer = 0
                    def executeFlag = false
                    while(true){
                    	sleep("${QGSTATUS_WAITINTERVAL}")
                    	timer = timer + QGSTATUS_WAITINTERVAL
                    	if(fileExists("qualityGate.json")){
                    		executeFlag = true
                    		break
                    	}
                    	if(timer > QGSTATUS_TIMEOUT){
                    		break
                    	}
                    }

                    if(executeFlag == true){
                    
                        // Jsonオブジェクトに変換
                        def qualitygate = jsonParse(readFile('qualityGate.json'))
                        echo qualitygate.toString()

                        // Statusがエラーだったらビルドを失敗させる
                        if ("ERROR".equals(qualitygate["projectStatus"]["status"])) {
                            error "Quality Gate failure"
                        }

                        // 評価対象ファイルを削除する
                        sh "rm -f ./qualityGate.json"
                    }
                }
            }
            post {
                always {
                    // ...
                }
            }
        }
    }
     post {
        success {
            // ...
        }
        unstable {
            // ...
        }
        failure {
            // ...
        }
    }
}

project_keyの取得方法

  • 「Administration」→ プルダウンのUpdate Keyで取得可能
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?