Sonarqube 如何将声纳质量门与Gitlab CI集成
我有一个gitlab ci集成,需要声纳分析,如果质量门通过,则需要构建docker图像 使用gitlab ci可以实现这一点吗?您应该尝试。它允许返回非零,这将破坏Gitlab CI Runner的构建,而不执行下一步(构建Docker映像) 在项目的根目录中创建.gitlab-ci.yml文件:Sonarqube 如何将声纳质量门与Gitlab CI集成,sonarqube,gitlab,gitlab-ci,sonar-runner,gitlab-ci-runner,Sonarqube,Gitlab,Gitlab Ci,Sonar Runner,Gitlab Ci Runner,我有一个gitlab ci集成,需要声纳分析,如果质量门通过,则需要构建docker图像 使用gitlab ci可以实现这一点吗?您应该尝试。它允许返回非零,这将破坏Gitlab CI Runner的构建,而不执行下一步(构建Docker映像) 在项目的根目录中创建.gitlab-ci.yml文件: stages: - sonarqube - docker_build image: maven:3-jdk-8 sonarqube: stage: sonarqube script:
stages:
- sonarqube
- docker_build
image: maven:3-jdk-8
sonarqube:
stage: sonarqube
script:
- # sonarqube running command (plugin installed), mvn blabla
docker_build
stage: docker_build
script:
- docker build .
对Gitlab的提交将运行
sonarqube
阶段,并仅在sonarqube通过质量门时继续执行docker\u build
。要为失败的质量门中断CI构建
1.在/report-task.txt中搜索CE任务URL(ceTaskUrl)和CE的值
任务Id(0)
2.调用/api/ce/task?id=XXX,其中XXX是从步骤1检索到的ce任务id
例如:https:///api/ce/task?id=Your 鲸蜡垫木
3.等待一段时间,直到步骤2的状态为成功、取消或失败
4.如果失败,则中断构建(此处失败无法生成声纳报告)
5.如果成功,则使用/api/ce/task返回的JSON中的analysisId?
id=XXX(步骤2)并立即调用/api/qualitygates/project_status?analysisId=YYY
检查质量门的状态。
例如:https:///api/qualitygates/project_status?analysisId=Your
分析ID
6.步骤5给出了关键、主要和次要错误阈值限制的状态
7.根据限制,打破构建
8.使用脚本时遵循适当的缩进
谢谢你的回答。看来解决方案是针对Linux的。我希望它与Windows兼容。
-$url=(findstr“ceTaskUrl”“)。子字符串(10)
-睡眠10#需要一些缓冲时间从sonarqube analyzer更新报告
-$response=&“-u:$url#使用curl登录sonarqube以检查分析是否正确运行。使用sonar管理员凭据/令牌
-$sonardata=$response | CONVERTFORM Json#将返回的数据转换为Json
-$sonarBuildStatus=$sonardata.task.status
- |
如果($status)-eq“SUCCESS”){
回声“声纳QUBE分析成功”
$sonarAnalysisId=$sonardata.task.analysisId
$projurl=(findstr“serverUrl”“)。子字符串(10)
$projNewUrl=$projurl+“/api/qualitygates/project_status?analysisId=“+$sonanalysisid
$projresponse=&“-u:$projNewUrl
$sonarprojdata=$projresponse |从Json转换
$sonarProjStatus=$sonarprojdata.projectStatus.status
如果(“$sonarProjStatus”-eq“ERROR”){#检查项目是否符合规定的所有质量标准
echo“SONARQUBE质量门因$CI_项目名称而失败”
echo$sonarprojdata.projectStatus.conditions
退出1#因违规而中断构建
}
否则{
echo“SONARQUBE质量门成功获得$CI_项目名称”
echo$sonarprojdata.projectStatus.conditions
出口0
}
}
否则{
回声“声纳分析失败”
退出1#因违规而中断构建
}
有一个编写的Go,可以与SQ 5.*-8.2一起使用,以简单地检查特定项目的SQ QG。它需要SQ实例的URL、项目密钥和令牌或登录名和密码才能运行
它还有一个额外的技巧,就是在项目上有挂起的任务时等待。现在还有一个轻量级的apriorit/go-check声纳。这样使用:
$ docker run --rm -it apriorit/go-check-sonar -project=PROJ -server=http://sonar.dev.local -token=dead**beef
Running SonarQube Quality Gate checker!
Checking if any tasks are running for the provided project...
Waiting for pending tasks to finish...
1 pending tasks remaining for PROJ component...
1 pending tasks remaining for PROJ component...
1 pending tasks remaining for PROJ component...
0 pending tasks remaining for PROJ component...
All tasks on project PROJ are finished!
Checking Quality Gate status of the project...
==============================================
Project Status: OK
==============================================
从SonarQube 8.1开始,这可以通过build命令中的参数实现。请参阅“质量门失败时管道作业失败”: 质量门失败时管道作业失败 为了使质量门在SonarQube端失败时在GitLab端失败,扫描仪需要等待SonarQube质量门状态。要启用此功能,请在
.gitlab ci.yml
文件中设置sonar.qualitygate.wait=true
参数。
您可以将sonar.qualitygate.timeout
属性设置为扫描仪应等待处理报告的时间量(秒)。默认值为300秒
例如:
mvn验证声纳:声纳-Dsonar.qualitygate.wait=true
您试过了吗?我问过Sonarqube的一位官员,他们没有回答我。是的。。使用它。SonarQube运行程序(带有构建中断插件)只会抛出一个异常。。停止进一步的构建。在.gitlab-ci.yml中应该有两个阶段(例如:test
和build
)。那么第二个构建将等待质量关卡,而runner任务将处于空闲状态?你能分享一些细节吗?它不会“等待”,它会失败的第一步,永远不会建立。新提交(如修复质量门问题)将触发新构建。BuildBreaker与SonarQube 7.3+不兼容不幸的是,您是否可以共享此脚本示例?非常感谢。添加了脚本。请检查一下。如果有效,请将其标记为答案,以便任何人都可以使用。
$ docker run --rm -it apriorit/go-check-sonar -project=PROJ -server=http://sonar.dev.local -token=dead**beef
Running SonarQube Quality Gate checker!
Checking if any tasks are running for the provided project...
Waiting for pending tasks to finish...
1 pending tasks remaining for PROJ component...
1 pending tasks remaining for PROJ component...
1 pending tasks remaining for PROJ component...
0 pending tasks remaining for PROJ component...
All tasks on project PROJ are finished!
Checking Quality Gate status of the project...
==============================================
Project Status: OK
==============================================