如何将声纳质量门与Gitlab-CI集成 [英] How to integrate Sonar Quality Gates with Gitlab-CI

查看:143
本文介绍了如何将声纳质量门与Gitlab-CI集成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个gitlab-ci集成,需要进行声纳分析,如果质量门通过,就可以构建docker镜像.

I have a gitlab-ci integration that require a sonar analysis and if the quality gates pass, to build a docker image.

使用gitlab-ci可以吗?

Is this possible using gitlab-ci ?

推荐答案

要为失败的质量门而中断CI构建,

To break the CI build for a failed Quality Gate,

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

1.Search in /report-task.txt the values of the CE Task URL (ceTaskUrl) and CE Task Id (ceTaskId)

2.Call/api/ce/task?id = XXX,其中XXX是从步骤1中检索到的CE任务ID 例如:-https:///api/ce/task?id =您的ceTaskId

2.Call /api/ce/task?id=XXX where XXX is the CE Task Id retrieved from step 1 Ex:- https:///api/ce/task?id=Your ceTaskId

3.等待一段时间,直到步骤2中的状态为成功",已取消"或失败"

3.Wait for sometime until the status is SUCCESS, CANCELED or FAILED from Step 2

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

4.If it is FAILED, break the build (Here failure is unable to generate sonar report)

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

5.If successful,then Use the analysisId from the JSON returned by /api/ce/task? id=XXX(step2)and Immediately call /api/qualitygates/project_status?analysisId=YYY to check the status of the quality gate. Ex:- https:///api/qualitygates/project_status?analysisId=Your analysisId

6.步骤5给出了严重,严重和轻微错误阈值限制的状态

6.Step 5 gives the status of the critical, major and minor error threshold limit

7.基于限制,中断构建.

7.Based on the limit break the build.

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

这篇关于如何将声纳质量门与Gitlab-CI集成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆