如何将声纳质量门与 Gitlab-CI 集成

Dim*_*iwa 3 gitlab sonar-runner sonarqube gitlab-ci gitlab-ci-runner

我有一个 gitlab-ci 集成,需要声纳分析,如果质量门通过,则构建 docker 图像。

这可以使用 gitlab-ci 吗?

Sah*_*hit 8

为失败的质量门打破 CI 构建,

1.在/report-task.txt中搜索CE任务URL(ceTaskUrl)和CE任务ID(ceTaskId)的值

2.Call /api/ce/task?id=XXX 其中XXX是从步骤1中检索到的CE Task Id Ex:- https:///api/ce/task?id=Your ceTaskId

3.等待一段时间,直到第 2 步的状态为 SUCCESS、CANCELED 或 FAILED

4.如果失败,则中断构建(此处失败无法生成声纳报告)

5.如果成功,那么使用/api/ce/task返回的JSON中的analysisId?id=XXX(step2) 并立即调用 /api/qualitygates/project_status?analysisId=YYY 来检查质量门的状态。例如:- https:///api/qualitygates/project_status?analysisId=您的 analysisId

6.Step 5 给出关键、主要和次要错误阈值限制的状态

7.基于极限突破构建。

8. 使用脚本时遵循适当的缩进

build:
  stage: build
  before_script:
   - yum -y install epel-release
   - yum -y install jq
   - yum install -y coreutils
  script:
    - mvn sonar:sonar -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_LOGIN_TOKEN -Dsonar.working.directory=../target/.sonar
    - export url=$(cat ../target/.sonar/report-task.txt | grep ceTaskUrl | cut -c11- ) #URL where report gets stored
    - sleep 15s #Wait time for the report
    - curl -k -u "$SONAR_LOGIN_TOKEN":"" $url -o analysis.txt
    - export status=$(cat analysis.txt | jq -r '.task.status') #Status as SUCCESS, CANCELED or FAILED
    - export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') #Get the analysis Id
    - |
      if [ "$status" == "SUCCESS" ];then 
        echo -e "SONAR ANALYSIS SUCCESSFUL...ANALYSING RESULTS";
        curl -k -u "$SONAR_LOGIN_TOKEN":"" https://yourSonarURI/api/qualitygates/project_status?analysisId=$analysisId -o result.txt; #Analysis result like critical, major and minor issues
        export result=$(cat result.txt | jq -r '.projectStatus.status');

        if [ "$result" == "ERROR" ];then
          echo -e "91mSONAR RESULTS FAILED";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #prints the critical, major and minor violations
          exit 1 #breaks the build for violations
        else
          echo -e "SONAR RESULTS SUCCESSFUL";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
          exit 0 
        fi
    else 
        echo -e "\e[91mSONAR ANALYSIS FAILED\e[0m";
        exit 1 #breaks the build for failure in Step2
     fi
Run Code Online (Sandbox Code Playgroud)


apa*_*a64 6

从 SonarQube 8.1 开始,可以通过构建命令中的参数实现这一点。请参阅https://docs.sonarqube.org/latest/analysis/gitlab-integration/,“质量门失败时管道作业失败”:

当 Quality Gate 失败时管道作业失败 为了让 Quality Gate 在 SonarQube 端失败时在 GitLab 端失败,扫描器需要等待 SonarQube Quality Gate 状态。要启用此功能,请在文件sonar.qualitygate.wait=true中设置参数.gitlab-ci.yml。您可以将该sonar.qualitygate.timeout属性设置为扫描仪等待处理报告的时间(以秒为单位)。默认值为 300 秒。

例子:

mvn verify sonar:sonar -Dsonar.qualitygate.wait=true
Run Code Online (Sandbox Code Playgroud)