SonarQube和Artifactory的全自动推广管道

Sonarqube和Artifactory

本文由JFrog的Jonathan Roquelaure和SonarSource的Fabrice Bellingard共同撰写,并发表在SonarSource博客

我们的上一篇博文展示了如何连接Artifactory和SonarQube,以帮助在部署或交付高质量软件时做出更好的决策。将一个相当简单的脚本添加到您的管道中,就可以很容易地在Artifactory中查看工件是否通过了质量闸门,并相应地决定是否可以提升它。

我们不能再深入一点吗?

现在我们知道了如何将质量门结果附加到工件上,让我们不只是在Artifactory中将此信息作为元数据收集。相反,我们希望基于这些知识自动触发(或不触发)促销活动——比如将工件移动或复制到可以在下一个阶段使用的位置。显然,每个公司都有自己的工作流程,应该能够为这种自动推广实现自己的逻辑。

而且,大多数现实生活中的项目都有复杂的构建管道,开发团队希望尽快得到反馈(管道中的第一个或“提交”构建应该尽可能快——正如Jez Humble和Dave Farley在他们关于持续交付的书中所说的那样)。SonarQube可以花一些时间来分析一个项目,并提供质量闸门状态与Artifactory集成不应该阻塞管道;在SonarQube处理分析报告时,任何其他潜在的下游步骤都应该能够运行。

所以让我们看看我们是否能想出一个非阻塞的、可定制的和自动化的解决方案,让Artifactory和SonarQube一起工作来帮助你提供高质量软件

可定制的自动化集成

这些词听起来很耳熟,我们马上就会想到webhook, api和用户插件。

SonarQube人

作为组成CI/CD过程的许多部分之一,SonarQube使用人则分析报表处理完成后通知其他业务。不管处理任务的状态如何,都会进行HTTPS调用,并且它的有效负载包含许多有用的信息,稍后Artifactory用户插件将使用这些信息来决定对给定工件执行什么操作。下面是一个SonarQube webhook发布的JSON有效载荷的例子:

{“analysedAt”:“2016 - 11 - 18岁t10:46:28 + 0100”,“项目”:{“关键”:“org。sonarqube:example", "name": " example"}, "properties": {}, "qualityGate": {"conditions": [{"errorThreshold": "1", "metric": "new_security_rating", "onLeakPeriod": true, "operator": "GREATER_THAN", "status": "OK", "value": "1"}, {"errorThreshold": "1", "metric": "new_reliability_rating", "onLeakPeriod": true, "operator": "GREATER_THAN", "status": "ERROR", "value": "1"},…, "name": "SonarQube way", "status": "ERROR"}, "serverUrl": "https://localhost:9000","status": "SUCCESS", "taskId": "AVh21JS2JepAEhwQ-b3u"

在我们的背景中,有趣的信息是:

  • taskId-它将被用来识别Artifactory中给定的工件
  • 质量闸门状态-这是最重要的信息,应该考虑推广或不相应的工件

在SonarQube中,webhooks可以在每个项目中配置(在项目设置中),也可以在全局级别配置——当SonarQube分析的大多数项目也在Artifactory中管理时,这就更加方便了。

Artifactory用户插件

使用Artifactory Pro和Enterprise,您可以轻松地扩展Artifactory的行为用户插件用Groovy编写。Plugins can implement a wide range of behavior such as executing scheduled tasks (e.g. cleanup), executing your own logic in response to a specific event (e.g. change response on download, specific security realm,…) and even exposing new API endpoints (e.g. implement specific workflow based on a SonarQube webhook ).

在下面的代码片段中,我们将暴露一个新的端点,它可以被SonarQube webhooks使用以下URL:

https://admin: password@ < ARTIFACTORY_URL >: 8081 / artifactory / api /插件/执行/ updateSonarTaskStatus ? params = targetRepo = gradle-staging-local
执行{//为sonarqube webhook暴露一个新的端点updateSonarTaskStatus(httpMethod: 'POST', users: ["admin"], groups: [], params:[targetRepo: "]) {params, Re2022世界杯阿根廷预选赛赛程sourceStreamHandle body -> targetRepo = getStringProperty(params, 'targetRepo', true) bodyJson = new JsonSlurper().parse(body. inputstream) sonarTaskId = bodyJson. taskid//实现基于SonarQube质量门结果的工作流}}

詹金斯是粘合剂

在Jenkins CI服务器中,我们实现了一个提交构建负责向提交者提供快速反馈,并(如我们上一篇文章所述)在SonarQube分析(任务Id)和Artifactory构建信息(以及相关工件)之间建立链接。

节点(){阶段'构建获取源' git url: 'https://github.com/SonarSource/sonar-scanning-examples.git',分支:'master'阶段'Artifactory配置'//创建一个Artifactory服务器实例
/ /(参考://www.si-fil.com/confluence/display/RTF/Working + +管道+工作+在+ Jenkins)def server = Artifactory.server('artifactory_local')//创建并设置一个Artifactory Gradle Build实例def rtGradle = Artifactory.newGradleBuild() rtGradle。rtGradle.deployer服务器:服务器,repo: 'gradle-dev-local'//在Jenkins "Manage"中设置Gradle工具:rtGradle。rtGradle. tool = 'GRADLE_TOOL'。usesPlugin = false stage“运行Gradle并发布到Artifactory”//使用sonarqube和artifactory任务运行Gradle builddir('sonarqube-scanner-gradle'){def buildInfo = rtGradle.run rootDir: ".", buildFile: 'build. "gradle', task: "clean sonarqube build artifactoryPublish——stacktrace".toString()//从声纳报告文件中获取变量(文件和路径取决于工具和CI-server)def ceTaskId = sh(returnStdout: true, script: "cat build/sonar/report-task.txt | grep ceTaskId | cut -f2 -d'='").trim()SONAR_CETASKID=ceTaskId buildInfo.env.capture = true buildInfo.env.collect()//发布build-info到Artifactory:服务器。publishBuildInfo buildInfo}}

大局

现在我们在jenkins上有了一个提交构建,允许在提交时快速反馈(我的代码是在共享环境中构建的吗?我打碎什么东西了吗?我可以继续编码吗?)

SonarQube和Artifactory

提交构建工作流

关于SonarQube质量闸门结果的逻辑在第二个“分段”工作流中实现。在这里,您可以简单地提升构建,也可以触发外部工具进行更高级的测试、集成、部署……

SonarQube和Artifactory

阶段工作流程

尝试一下

我们很高兴Sonarsource和JFrog的合作正在取得成果。现在我们想听听您使用集成的经验。请与我们联系集成GitHub项目

要查看此集成的实际情况,并学习如何将基于度量的质量检验关应用于你的CI/CD管道,我们邀请您参观在香港举行的联合网络研讨会2018年9月。

查看网络研讨会

如果你还没有准备好自己尝试一下……

开始SonarCloud的免费试用SonarQube as a Service(对开源项目免费)。