Gitlab 使外部作业有条件地使管道失败

Gitlab 使外部作业有条件地使管道失败,gitlab,sonarqube,gitlab-ci,Gitlab,Sonarqube,Gitlab Ci,最近,我们的SonarQube服务器进行了升级,使我们有机会根据此处提到的配置将其与GitLab集成: 现在我们遇到的问题是,如果未达到质量门,外部声纳作业会使管道失败 虽然这是正确和预期的行为,但我想知道是否有任何配置不会使整个管道失败,即使没有达到质量门 我担心的是,我们已经针对许多项目进行了开发,其中一些项目非常陈旧(遗留代码),可能并不总是达到为它们定义的质量标准。我知道我所要求的并不是最优的——也就是说,应该始终达到质量标准——但考虑到我目前的工作环境,没有其他选择 作为参考,我的s

最近,我们的SonarQube服务器进行了升级,使我们有机会根据此处提到的配置将其与GitLab集成:

现在我们遇到的问题是,如果未达到质量门,
外部
声纳作业会使管道失败

虽然这是正确和预期的行为,但我想知道是否有任何配置不会使整个管道失败,即使没有达到质量门

我担心的是,我们已经针对许多项目进行了开发,其中一些项目非常陈旧(遗留代码),可能并不总是达到为它们定义的质量标准。我知道我所要求的并不是最优的——也就是说,应该始终达到质量标准——但考虑到我目前的工作环境,没有其他选择

作为参考,我的
sonar
CI作业如下:

sonar:
  stage: analysis
  variables:
    SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"
    GIT_DEPTH: "0"
  script: ./gradlew sonarqube -Dsonar.qualitygate.wait=true -Dsonar.projectKey=${CI_PROJECT_ID} ${ADDITIONAL_SONAR_OPTIONS}
  allow_failure: true
  rules:
    - if: $CI_COMMIT_BRANCH == "master"
    - if: $CI_COMMIT_BRANCH =~ /^support\/\d+[.]\d+$/ || $CI_COMMIT_BRANCH =~ /^support\/\d+$/
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_PIPELINE_SOURCE == "schedule" || $CI_PIPELINE_SOURCE == "api"
      when: never
作业设置为
allow\u failure:true
,但反过来
外部作业总是失败。我阅读了文档,将其设置为
false
应该不会使管道失败,但情况似乎并非如此


有什么办法可以做到这一点吗?我的SonarQube版本是
8.1.0

您可以使用自定义脚本来实现这一点,使用sonar web api获取QualityGate状态,并将作业设置为失败和成功

运行
/gradlew sonarqube-Dsonar.projectKey=${CI_PROJECT_ID}${ADDITIONAL_SONAR_OPTIONS}
(删除
-Dsonar.qualitygate.wait=true
)时,将在工作区文件夹中创建报告任务.txt

注意:文件report task.txt的位置取决于用于生成它的工具(在您的例子中是gradle)。例如,“mvn声纳:声纳”任务默认为“目标/声纳”。此位置由“sonar.scanner.metadataFilePath”属性控制

您将在report-task.txt中获得ceTaskUrlcetaskuid。现在,您可以使用该ceTaskUrl获取分析ID

您可以使用下面的web api使用analysisId获取质量关卡状态


https://localhost:9000/sonarqube/api/qualitygates/project_status?analysisId=$ANALYSIS\u ID“

您可以使用自定义脚本来实现这一点,以使用sonar web api获取QualityGate状态,并将作业设置为失败和成功

运行
/gradlew sonarqube-Dsonar.projectKey=${CI_PROJECT_ID}${ADDITIONAL_SONAR_OPTIONS}
(删除
-Dsonar.qualitygate.wait=true
)时,将在工作区文件夹中创建报告任务.txt

注意:文件report task.txt的位置取决于用于生成它的工具(在您的例子中是gradle)。例如,“mvn sonar:sonar”任务默认为“target/sonar”。此位置由“sonar.scanner.metadataFilePath”属性控制

您将在report-task.txt中获取ceTaskUrlcetaskuid。现在,您可以使用该ceTaskUrl获取分析ID

您可以使用下面的web api使用analysisId获取质量关卡状态

https://localhost:9000/sonarqube/api/qualitygates/project_status?analysisId=$ANALYSIS_ID“