全自动推广管道与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 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构建信息(以及相关工件)之间建立链接。

node(){阶段'构建获取源代码' git url: 'https://github.com/SonarSource/sonar-scanning-examples.git',分支:'master'阶段'人工配置'//创建Artifactory服务器实例
/ /(参考://m.si-fil.com/confluence/display/RTF/Working + +管道+工作+在+ Jenkins)def server = Artifactory.server('artifactory_local')//创建并设置一个人工Gradle Build实例:gradle = Artifactory.newGradleBuild()rtGradle.deployer server: server, repo: 'gradle-dev-local'//设置一个在Jenkins "Manage"中定义的Gradle工具:rtGradle。rtGradle. tool = 'GRADLE_TOOL'usesPlugin = false stage '运行Gradle并发布到Artifactory'//使用sonarqube和人工任务运行Gradle builddir('sonarqube-scanner-gradle'){def buildInfo = rtGradle.run rootDir: ".", buildFile: 'build. 'gradle', tasks: "clean sonarqube build artifactoryPublish——stacktrace".toString()//从声纳报告文件中获取变量(文件和路径取决于工具和ci服务器)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即服务(对开源项目免费)。