【问题标题】:Make SonarQube external job conditionally failing a pipeline使 SonarQube 外部作业有条件地使管道失败
【发布时间】:2020-11-12 10:30:19
【问题描述】:

最近我们的 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

【问题讨论】:

    标签: gitlab sonarqube gitlab-ci


    【解决方案1】:

    您可以使用自定义脚本来实现此目的,使用 sonar 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 中获得 ceTaskUrlceTaskId。现在,您可以使用该 ceTaskUrl 来获取 analysisId

    您可以使用以下 web api 通过 analysisId 获取质量门状态。

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

    【讨论】:

      猜你喜欢
      • 2019-07-09
      • 2021-03-27
      • 2021-03-04
      • 1970-01-01
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-13
      相关资源
      最近更新 更多