首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将声纳质量门与Gitlab-CI集成

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

Stack Overflow用户
提问于 2017-05-20 13:28:21
回答 5查看 10K关注 0票数 3

我有一个gitlab-ci集成,需要一个声纳分析和如果质量门通过,以建立一个码头形象。

这能用gitlab-ci吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-06-07 12:55:50

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

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

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

3.等待一段时间,直到第2步的状态成功、取消或失败。

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

5.如果成功,那么使用/api/ce/ analysisId返回的JSON的analysisId?/api/qualitygates/project_status?analysisId=YYY (id=XXX,step2),并立即打电话给step2检查质量门的状态。例:- status?analysisId=Your analysisId

6.步骤5给出了临界、主要和次要错误阈值的状态。

7.基于极限破坏的建筑。

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

代码语言:javascript
运行
复制
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
票数 9
EN

Stack Overflow用户

发布于 2021-02-05 08:24:22

从build 8.1开始,使用build命令中的一个参数是可能的。参见https://docs.sonarqube.org/latest/analysis/gitlab-integration/,“当质量门失败时失败管道作业”:

当质量门失败时,当质量门发生故障时,当质量门在GitLab侧发生故障时,扫描器需要等待SonarQube质量门状态。若要启用此功能,请在sonar.qualitygate.wait=true文件中设置.gitlab-ci.yml参数。可以将sonar.qualitygate.timeout属性设置为扫描程序应等待处理报表的时间(以秒为单位)。默认为300秒。

示例:

代码语言:javascript
运行
复制
mvn verify sonar:sonar -Dsonar.qualitygate.wait=true
票数 3
EN

Stack Overflow用户

发布于 2019-09-10 04:15:16

谢谢你的回答。看来解决方案是针对Linux的。我希望它与Windows兼容。

代码语言:javascript
运行
复制
- $url = (findstr "ceTaskUrl" "<report-task.txt location>").Substring(10) 
- sleep 10 #Need some buffer time to get the report updated from sonarqube analyzer
- $response = &"<Curl exe location>" -u <SonarAdminUserName>:<Password> $url #using curl to login to sonarqube to check analysis ran properly or not. Using sonar admin credentials/token
- $sonardata = $response | ConvertFrom-Json #converting returned data to json 
- $sonarBuildStatus=$sonardata.task.status
- |
      if ("$sonarBuildStatus" -eq "SUCCESS"){ 
          echo "SONARQUBE ANALYSIS IS SUCCESSFUL"
          $sonarAnalysisId= $sonardata.task.analysisId
          $projurl = (findstr "serverUrl" "<report-task.txt location>").Substring(10)
          $projNewUrl = $projurl+"/api/qualitygates/project_status?analysisId="+$sonarAnalysisId
          $projresponse = &"<Curl exe location>" -u <SonarAdminUserName>:<Password> $projNewUrl
          $sonarprojdata = $projresponse | ConvertFrom-Json
          $sonarProjStatus=$sonarprojdata.projectStatus.status
          if ("$sonarProjStatus" -eq "ERROR"){ #Checks if the project has meet all the quality gates specified
              echo  "SONARQUBE QUALITY GATES FAILED FOR $CI_PROJECT_NAME"
              echo $sonarprojdata.projectStatus.conditions
              exit 1 #breaks the build for violations
          }
          else{
              echo "SONARQUBE QUALITY GATES SUCCESSFUL FOR $CI_PROJECT_NAME"
              echo $sonarprojdata.projectStatus.conditions
              exit 0
          }
          
      }
      else{
          echo "SONARQUBE ANALYSIS FAILED"
          exit 1 #breaks the build for violations
      }

有关更多信息,请参考链接https://www.codeproject.com/Tips/5165909/Gated-Check-in-in-Git-repository

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44086452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档