如何从詹金斯管道中选择声纳质量门?

Posted

技术标签:

【中文标题】如何从詹金斯管道中选择声纳质量门?【英文标题】:How to select sonarqube quality gate from jenkins pipeline? 【发布时间】:2019-10-21 14:44:03 【问题描述】:

我已经在 jenkins 中配置了 sonarqube 服务器。在 sonarqube 中,我有不同的质量门,每个质量门都有不同的条件。 我有多个詹金斯管道工作。如何从 jenkins pipeline 中选择 sonarqube 质量门。

对于单独的工作,我可以从 jenkins 管道代码中选择特定的质量门来检查和分析我的代码。

我如何从 jenkins 管道代码中选择我的 sonarqube 质量门,而不是从 sonarqube 中选择质量门。

任何帮助

谢谢

【问题讨论】:

【参考方案1】:

SonarQube 提供了一个 REST api,可用于从 SonarQube 项目中提取信息,但您也可以使用它来修改 SonarQube 项目中的属性,例如质量门(或质量配置文件)。

在我设计的流程中,通常有一个“基础”SonarQube 项目,它具有我想在“派生”项目中设置的质量门和质量配置文件(我们还没有使用新式分支)。所以,我首先从基础项目中读取属性,然后将它们设置到派生项目中。

这样的代码用于从基础项目中获取属性:

def sonarQubeProjectName = sonarProps['sonar.motsid'] + ':' + SONAR_PROJECT_NAME
def authString = "$sonarProps['sonar.login']:$sonarProps['sonar.password']"

def qualityProfileResult =
    sh(returnStdout: true,
       script: "curl -s -X GET -u $authString \'$sonarProps['sonar.host.url']/api/qualityprofiles/search?project=$sonarQubeProjectName&language=java\'")
echo "qualityProfileResult[$qualityProfileResult]"
def qualityProfileName = new JsonSlurper().parseText(qualityProfileResult).profiles[0].name
echo "qualityProfileName[$qualityProfileName]"

def qualityGateResult   =
    sh(returnStdout: true,
       script: "curl -s -X GET -u $authString \'$sonarProps['sonar.host.url']/api/qualitygates/get_by_project?project=$sonarQubeProjectName\'")
echo "qualityGateResult[$qualityGateResult]"
def qualityGateId   = new JsonSlurper().parseText(qualityGateResult).qualityGate.id
echo "qualityGateId[$qualityGateId]"

然后将它们设置到派生项目中:

// Now associate the project with the quality gate.
def selectQualityGateResult =
    sh(returnStdout: true,
       script: "curl -s -X POST -u $authString \'$sonarProps['sonar.host.url']/api/qualitygates/select?gateId=$qualityGateId&projectKey=$projectAndBranch\'")
echo "selectQualityGateResult[$selectQualityGateResult]"

// Now associate the project with the quality profile.
def selectQualityProfileResult =
    sh(returnStdout: true,
       script: "curl -s -X POST -u $authString \'$sonarProps['sonar.host.url']/api/qualityprofiles/add_project?language=java&qualityProfile=$qualityProfileName&project=$projectAndBranch\'")
echo "selectQualityProfileResult[$selectQualityProfileResult]"

【讨论】:

以上是关于如何从詹金斯管道中选择声纳质量门?的主要内容,如果未能解决你的问题,请参考以下文章

詹金斯错误中的声纳扫描仪与任何配置的安装不匹配

詹金斯管道选择性删除

声纳质量门插件抛出 numberFormatException

声纳 - 如何跳过新代码的条件覆盖

如何在Jenkins管道中使用自定义Dockerfile名称?

复制詹金斯管道项目