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

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:

我有一个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:
    - # 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
==============================================