gitlab 根据 sonar 扫描状态决定是否允许 merge

本贴最后更新于 2044 天前,其中的信息可能已经时异事殊

有这样一个应用场景:
当开发提交 merge request 时,gitlab 会自动触发 jenkins 任务去跑 sonar 扫描,如果扫描状态成功则允许 merge,否则拒绝。

这里有几个点需要解决:
1、jenkins 要拿到 sonar 扫描的结果状态,并把结果反馈给 gitlab
2、gitlab 要能够根据 pipeline 反馈的状态来决定是否允许 merge

gitlab 通过 webhook 触发 jenkins 任务的配置略

设置 gitlab,只有 pipeline 成功才允许 merge
image.png
部署 sonar 略,直接看 webhook 配置
image.png
点击创建,url 填"jenkins 地址/sonarqube-webhook/"
image.png
image.png
jenkins 要安装插件 Sonar Quality Gates Plugin
这样 pipeline 中就可以获取 sonar 执行后的状态了
updateGitlabCommitStatus 用来更新状态到 gitlab,只有成功 gitlab 才会允许 merge 就实现了

stage ('静态扫描') { steps { updateGitlabCommitStatus name: 'build', state: 'running' script { withSonarQubeEnv('sonar') { sh "mvn validate sonar:sonar -Dsonar.java.binaries=target/sonar" } def qg = waitForQualityGate() if (qg.status != 'OK') { error "未通过Sonarqube的代码质量阈检查,请及时修改!failure: ${qg.status}" updateGitlabCommitStatus name: 'build', state: 'failed' } if (qg.status == 'OK') { echo "通过Sonarqube的代码质量检测" updateGitlabCommitStatus name: 'build', state: 'success' } } } }

如果想拿到 sonar 扫描后生成的 url 发邮件,可以通过一个脚本实现

#!/bin/sh # 获取sonar扫描后返回的url,jenkins中使用方法:/data/tools/sonarurl ${JOB_URL} JOB_URL=${1/jenkins.hhotel.com/127.0.0.1:8080} id=`wget -qO- --content-on-error --no-proxy --auth-no-challenge --http-user=admin --http-password=297UVZU0u*5*1KNQ "${JOB_URL}/lastBuild/consoleText" | grep "More about the report processing" | head -n1 | awk -F "=" '{print $2}'` projectkey=`wget -qO- "http://sonar.hhotel.com/api/ce/task?id=${id}" --no-proxy --content-on-error | jq -r '.task' | jq -r '.componentKey'` sonarurl=http://sonar.hhotel.com/dashboard?id=${projectkey} echo ${sonarurl}

令牌获取方式
image.png

maven 配置 sonar,修改 settings.xml

<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>maven-release</id> <username>devOps</username> <password>devOps20190717</password> </server> <server> <id>maven-snapshots</id> <username>devOps</usernam> <password>devOps20190717</password> </server> </servers> <pluginGroups> <pluginGroup>org.sonarsource.scanner.maven</pluginGroup> </pluginGroups> <profiles> <profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <sonar.host.url> http://sonar.hhotel.com </sonar.host.url> </properties> </profile> <profile> <id>NexusRepo</id> <repositories> <repository> <id>nexus</id> <name>Nexus3 Repository</name> <url>http://172.19.151.229:8082/nexus/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>sonar</activeProfile> <activeProfile>NexusRepo</activeProfile> </activeProfiles> <mirrors> <mirror> <id>NexusRepo</id> <!-- *号代表所有仓库,此处也可以单独设置,以逗号隔开 --> <mirrorOf>*</mirrorOf> <name>NexusRepo</name> <url>http://172.19.151.229:8082/nexus/repository/maven-public/</url> </mirror> </mirrors> </settings>

这样就可以通过 mvn 命令执行 sonar 扫描了

mvn sonar:sonar
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    57 引用 • 25 回帖 • 7 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 701 关注
  • 导航

    各种网址链接、内容导航。

    43 引用 • 177 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    53 引用 • 40 回帖
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 638 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    345 引用 • 739 回帖 • 1 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    31 引用 • 108 回帖
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 567 关注
  • Visio
    1 引用 • 2 回帖 • 1 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 254 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 445 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 737 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 700 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 382 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用
  • 音乐

    你听到信仰的声音了么?

    61 引用 • 512 回帖
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    8 引用 • 26 回帖 • 1 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    31 引用 • 96 回帖
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • Access
    1 引用 • 3 回帖 • 6 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 214 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 394 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 6 关注