jenkins - 如何从 Jenkins 管道中选择sonarqube质量门?

标签 jenkins sonarqube jenkins-pipeline quality-gate

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

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

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

任何帮助

谢谢

最佳答案

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

关于jenkins - 如何从 Jenkins 管道中选择sonarqube质量门?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56471497/

相关文章:

java - Maven 依赖项失败并出现 501 错误

java - 从 Java 执行 Sonar 嵌入式 Runner 后无法删除 persistit_tempvol 文件

jenkins - 如何为 ChoiceParameterDefinition 参数设置默认值

jenkins - 无法打开 Blue Ocean 可视化管道编辑器

angular - Karma 以什么顺序运行测试?

curl - Jenkins - 使用 curl 获取最新的工件

svn - 根据环境变量/shell输出构建特定项目

java - 从 Eclipse 实例运行 Sonar 代码分析

sonarqube - Sonar Maven 集成

jenkins - 无法通过 SCM 跳过插件跳过 Jenkins 构建