最近,我们对SonarQube服务器进行了升级,并根据下面提到的配置为我们提供了将其与GitLab集成的机会:
https://docs.sonarqube.org/latest/analysis/gitlab-cicd/
现在我们遇到的问题是,external
声纳作业无法通过管道,以防质量门无法达到。
虽然这是正确的预期行为,但我想知道是否存在任何某种配置,即使没有达到质量门,也不会使整个管道失败。
我担心的是,我们针对许多项目进行了开发,其中一些项目已经过时(旧版代码),并且可能并不总是达到为其定义的质量门。我知道我要问的不是最优的-即始终应该达到质量要求-但鉴于我工作场所的当前情况,没有其他选择。
我的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_failure: true
,但是external
作业总是失败。我阅读了文档,将其设置为false
应该会使管道没有失败,但事实并非如此。
有什么办法可以做到这一点?我的SonarQube版本是8.1.0
答案 0 :(得分:0)
您可以使用自定义脚本来实现此目的,并使用声纳Web API获取QualityGate状态并将工作设置为失败和成功。
运行./gradlew sonarqube -Dsonar.projectKey=${CI_PROJECT_ID} ${ADDITIONAL_SONAR_OPTIONS}
(删除-Dsonar.qualitygate.wait=true
)时,将在工作区文件夹中创建 report-task.txt 。
注意:文件 report-task.txt 的位置取决于用于生成该文件的工具(在您的情况下为gradle)。例如。例如“ mvn sonar:sonar”任务默认为“ target / sonar”。此位置由“ sonar.scanner.metadataFilePath”属性控制
您将在report-task.txt中获得 ceTaskUrl 和 ceTaskId 。现在,您可以使用该ceTaskUrl获取 analysisId 。
您可以使用下面的Web API通过analysisId获取质量门状态。
https:// localhost:9000 / sonarqube / api / qualitygates / project_status?analysisId = $ ANALYSIS_ID“