DevOps实践:在GitLab CI/CD中集成静态分析Helix QAC的工作原理与优势

基于云的GitLab CI/CD平台使开发团队能够简化其CI/CD流程,并加速软件开发生命周期(SDLC)。

将严格的、基于合规性的静态分析(如Helix QAC所提供)作为新阶段添加到现有的GitLab CI/CD流程中,将进一步增强SDLC,并将您的DevOps工作流从持续集成推进到持续合规。

GitLab用户为何应在CI/CD工作流中使用Helix QAC

GitLab是一个由AI驱动的DevSecOps平台,为Wiki、问题跟踪和CI/CD流程功能提供Git存储库管理器。它由GitLab公司开发,并于2011年发布。

GitLab CI/CD(与CI/CD流程定义和工作流相关的组件)被全球软件开发团队用于许多不同的软件项目,并且越来越多地应用于各种嵌入式行业,包括航空航天、国防、汽车、医疗设备和工业自动化。

GitLab CI/CD 深受开发人员欢迎,因为它整合了开发人员的工作流程,缩短了开发周期,降低了工程风险,帮助确保应用程序更加安全,并打通了孤岛和阶段之间的壁垒。现在,许多开发团队也希望将Helix QAC之类的静态分析工具添加到GitLab中,为其CI流程增加自动化、深入的程序间分析,以确保标准合规。

Helix QAC如何与GitLab相辅相成

Helix QAC是一款静态代码分析工具,可严格准确地遵守监管严格和安全关键型行业的编码标准。

对于使用GitLab CI/CD来简化工作流并缩短DevOps周期的嵌入式开发团队,可以从GitLab与Helix QAC的结合使用中获益。Helix QAC可以在开发过程的早期识别错误、代码质量问题、合规性故障和标准偏差,同时还能轻松地进行更改,从而帮助团队实现开发左移。

与许多静态分析工具不同,Helix QAC的深度和高精度分析引擎,很少或几乎不会返回误报和漏报结果,因此,开发人员无需浪费时间去调查误报,而可以信赖这些分析结果,从一开始就确保代码安全、可靠且易于维护。

最新版本的Helix QAC更新改进了现有的Delta分析功能,通过CI-builds实现了与Perforce Validate平台的完整CI/CD集成。其对CI构建的支持,可以扩展到在基于云的CI流程中运行的分析作业、容器化构建任务,以及通过内置Web API集成到不同的CI/CD平台(如Gitlab)。

将GitLab与Helix QAC结合使用

将GitLab等CI平台与Helix QAC结合使用,可为开发人员提供一个集中化和标准化的工作基础,通过脚本和命令行工具帮助实现CI自动化。

有多种方法可以将Helix QAC静态分析工具与GitLab(或类似环境)等CI系统相集成,因为Helix QAC提供了一个命令行界面(CLI)和灵活的工具,以适应大多数工作流程和各种配置。

例如,Helix QAC可以集成到DevOps工作流程中,作为合并请求自动测试的一部分。这意味着,当开发人员认为其功能已完成并准备合并时,GitLab将运行分析,并反馈是否发现问题,而无需任何额外输入。这样,开发人员就可以执行质量门,如果Helix QAC确实发现了功能分支引入的新问题,则强制进行审查;反之,则确认功能分支没有向主分支引入任何新问题,从而简化整个合并请求流程。

Helix QAC的CI和灵活分析功能可帮助团队管理结果,并识别相较于上一次完整分析的新更改所引入的潜在缺陷。此外,开发人员可以更快地就错误或更改进行沟通,而无需等待夜间构建,另外还可以通过Validate平台访问整个组织的结果和其他数据。

这些Helix QAC功能可在GitLab流程中自动执行测试,为多个并发流程构建质量门,以确保代码的质量、安全性和编码标准的合规性。

GitLab和Helix QAC集成的工作原理

以下视频是GitLab和Helix QAC集成演示,欢迎点击观看↓

GitLab和Helix QAC集成演示

演示示例展示了开发人员打开合并请求,启动包含Helix QAC分析的CI流程的过程,该分析配置为在被合并的分支和它要合并到的项目之间执行Delta分析。在这种情况下,由于添加了新问题,GitLab提示流程失败,并提供了一个链接,供开发人员或审查员在Validate中查看这些问题。

在开发项目时,您的CI流程可以在关键步骤(如合并请求或主分支更新时)自动运行系统化的Helix QAC静态分析。

对主分支进行定期的Helix QAC分析至关重要,它能够确保其他分支与之比较的基线始终是最新的。主分支上的变更应该始终通过合并请求获得批准,因此在添加新问题时,不应该出现失败状态。

示例流程:

qac integration analysis:stage: testonly:-masterscript:-make clean-rm -rfpqra pqraproject.xml-$HELIX_QACLI_PATH validate config -c -P . -U $VALIDATE_URL -b
$VALIDATE_PROJECT-$HELIX_QACLI_PATH sync -P . -t INJECT -g --make-$HELIX_QACLI_PATH validate build -P .
  • qacli validate config 命令可确保分析配置与Validate中的配置完全相同,从而在开发周期的各个阶段正确执行项目的标准和要求。
  • qacli sync 命令可确保分析所有项目文件,以防在两次提交之间添加或删除了某些文件。
  • qacli validate build 命令按配置运行分析,并将结果作为新的构建文件上传到Validate。
  • 运行合并请求的流程时,添加新问题时的反馈至关重要,因此流程也有所不同:
qac_MRstage: testonly:-merge_requestsscript: -make clean-rm -rfpqrapqraproject.xml-$HELIX_QACLI_PATH validate config -c -P . -U $VALIDATE_URL -b
$VALIDATE_PROJECT-$HELIX_QACLI_PATH sync -P . -t INJECT -g -- make-$HELIX_QACLI_PATH validate cibuild -P . -b
$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME-$CI_JOB_ID | tee file.txtafter_script:- >if[$CI_JOB_STATUS == 'success']; thenecho "no issued found !"elsegrep http://file.txt> out.txtglab mr note $CI_MERGE_REQUEST_IID --unique --message $(cat out.txt)fi

该脚本与主分支的脚本非常相似,但不同之处在于现在使用了qacli validate cibuild命令。这个新命令会分析项目,更重要的是,与主分支相比,如果要添加新的问题,它会通过delta分析进行检查。然后,结果将作为特定的 ci-build 上传到Validate,如果发现新问题,任务就会失败。after_script 用于自动向合并请求添加注释,并在Validate Web界面中提供带有ci-build 结果的链接。

ci-build 是Helix QAC 2024.2版本的旗舰功能,它基于现有的delta分析进行构建,可通过以下方式简化问题报告:

  • 如果添加了新问题,可提供即时反馈,这种情况下,系统设为simply fail 即可。
  • 可直接在Validate Web界面中查看问题,避免通过来回操作、在本地重新运行分析来检查任何新问题。
  • 被标记为偏差的问题(如ignore status)可以通过默认的质量门,从而使上述问题和流程能够顺利进行。

在此演示中,ci-builds 命令显示,合并请求中提出的所有问题都需要修复或正确偏离,才能通过CI检查。这样就能确保主分支中的所有问题都已被接受、已知并记录在案。

在 Web消息浏览器中,您可以看到所有问题并确定到底发生了什么。就像Validate中的任何其他问题一样,您可以为其分配负责人、指定状态并输入注释。在这种情况下,您应该设置一个状态来修复它,或者要求提交合并请求的开发人员修复此代码。

如果合并请求通过,或者开发人员修复了代码,您看到的问题就会越来越少,或者剩下的问题可以忽略不计。

更进一步来说,虽然此演示示例展示的是一个基本流程,但它还可以扩展更多的功能。例如,Validate有一个应用程序接口(API),可用于以各种方式增强集成,如:

  • 让合并请求中出现的注释包含更多信息,说明引入了多少问题,严重程度如何。
  • 发现新问题时,自动应用已知的系统偏差和抑制。
  • 使用自定义质量门来识别任务是否成功,而不是依赖默认的 ci-build 返回代码。

Helix QAC中CI构建功能的灵活性使开发人员能够根据需求自定义流程。

开始使用GitLab和Helix QAC

Helix QAC是一款理想的静态分析工具,可帮助基于GitLab CI/CD运行的CI/CD流程严格执行编码标准,确保功能安全合规性。Helix QAC CI/CD集成可自动执行分析,并确保开发团队拥有安全可靠的代码、一致的样式和更易于维护的代码库。

立即开始使用Gitlab和Helix QAC,优化您的DevOps合规流程。

获取更多产品支持,请咨询Perforce中国授权合作伙伴——龙智:
🌐 官网:www.shdsd.com
📞 电话:400-666-7732
📮 邮箱:marketing@shdsd.com

来源:https://bit.ly/4eLlivz
作者:Pierre-Edouard Lepere,Perforce静态分析工具销售工程师

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 NumPy 和 Matplotlib 进行数据可视化

如何使用 NumPy 和 Matplotlib 进行数据可视化 在数据科学领域,NumPy 和 Matplotlib 是 Python 中最常用的两个库。NumPy 用于科学计算和数据处理,而 Matplotlib 提供了丰富的图表工具来展示数据。本文将介绍如何将这两个库结合使用,轻松进行…

现货黄金怎么交易能快速入门?

现货黄金交易的核心在于以小博大,即用较小的亏损去搏击较大的利润,成功不仅要靠资金上的管理,更需要心态和策略的支持。现货黄金交易的过程也是人性修炼的过程,新手投资者不仅要学会交易技巧,更需要学会控制情绪&#…

sql server 行转列及列转行

图1 图2 1.行转列 (图1->图2) 1.方法一 (数据库通用),使用max 加case when 函数 -- 行转列 图1->图2 SELECT name,MAX(CASE WHEN subject语文 THEN score ELSE 0 END) AS "语文",MAX(CASE WHEN subject数学 …

雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的

如果域名处填写的分别为 IP 与域名,那么当使用进行 IP 请求时,则将会命中第一个配置的站点 以上图为例,如果用户使用 IP 访问,命中 example.com。 如果域名处填写的分别为域名与泛域名,除非准确命中域名,否…

将后端返回的网络url转成blob对象,实现pdf预览

调用e签宝返回的数据是网络链接就很让人头疼,最后想到可以转换成blob对象,便在百度上找到方法,记录一下。 祝大家节日快乐!! 代码在最后!!!! 代码在最后!&a…

Yandex搜索广告开户与投放全攻略!

Yandex 是俄罗斯最大的搜索引擎与数字广告平台,在俄罗斯市场具有广泛的影响力和庞大的用户基础。以下是 Yandex 搜索广告开户与投放的全攻略,包括云衔科技支持的相关服务。 一、Yandex 搜索广告的优势 1、广泛的市场覆盖:Yandex 在俄罗斯的…

Git合并多个分支中的提交内容

IDEA中使用 IEAD编辑器中使用Git IEAD编辑器中使用Git 案例一: 把test分支的其中提交的内容合并到main分支上。 你现在通过IDEA开发的分支是test分支,当你在test分支把内容都写完了并且提交内容保存到了本地的git暂存区中的时候,如果此时你的…

接口测试(九)jmeter——关联(JSON提取器)

一、JSON提取器介绍 要检查的响应字段:样本数据源引用名称:可自定义设置引用方法:${引用变量名}匹配数字 匹配数字含义-1表示全部0随机1第一个2第二个…以此类推 缺省值:匹配失败时的默认值ERROR,可以不写 二、js…

记一次js泄露pass获取核心业务

文章目录 一、漏洞原因二、漏洞成果三、漏洞利用过程1.js泄露口令信息2、进入系统后台,管理数据库权限(22个)3、执行命令获取服务器权限4、通过添加扫描脚本,获取存活的内网信息四、免责声明一、漏洞原因 系统存在js泄露口令信息,获取系统超级管理员权限。系统为核心数据研…

ASP.NET MVC-font awesome-localhost可用IIS不可用

环境: win10, .NET 6.0,IIS 问题描述 本地IIS正常显示,但放到远程服务器上,每个icon都显示?。同时浏览器的控制台报错: fontawesome-webfont.woff2:1 Failed to load resource: the server responded with a statu…

Ubuntu下Mysql修改默认存储路径

首先声明,亲身经验,自己实践,网上百度了好几个帖子,全是坑,都TMD的不行,修改各种配置文件,就是服务起不来,有以下几种配置文件需要修改 第一个文件/etc/mysql/my.cnf 这个文件是存…

力扣382:链表随机结点

给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。 实现 Solution 类: Solution(ListNode head) 使用整数数组初始化对象。int getRandom() 从链表中随机选择一个节点并返回该节点的值。链表中所有…

Vue开发

新建 Vue 项目 vue create project_name按照自己的需求模块进行安装 选择安装 Router、Vuex 插件 选择 Vue3 版本 是否使用 history 模式的路由,按需选 Y 或者 n 后面的选项都默认即可 是否记住上面的选择项:否 总体配置 启动项目 cd demo…

solr安装ik分词器

环境 系统 windows docker v4.34.3 solr:8.11.2 ik:ik-analyzer-solr7-7.x 1.安装步骤 1.1启动solr 1.1启动(为了方便编辑配置文件,挂载了文件目录) docker run -d -p 8983:8983 -v C:\docker\solr\classes:/opt/solr/server/solr-webap…

Windows解决localhost拒绝了连接请求

最近,在开发前端Vue项目时,Vue项目启动成功,没有任何报错,服务控制台已出现APP访问地址,如下图所示。 览器打开后页面先是空白,然后过了一会儿显示无法访问此网站,localhost拒绝了我们的连接请…

关于写更新接口的一些理解

“更新”接口的思路 在上篇文章中,我们讲了如何编写删除接口。这篇文章将讲解如何编写更新接口。 其实,更新接口和新增接口非常相似。整体思路都是传入form参数,然后在service层将form转换成entity,最后调用updateById方法&…

idea删除git历史提交记录

前言:此文章是我在实际工作中有效解决问题的方法,做记录的同时也供大家参考! 一、 首先,通过idea的终端或系统的cmd控制台,进入到你的项目文件根目录,idea终端默认就是项目根目录。 二、确保你当前处于要删…

Java多线程详解①(全程干货!!!)

这里是Themberfue 今天,我们将正式进入多线程章节的讲解,希望我的讲解能够让你理解😎 进程 在进入多线程的讲解中,我们先引入进程的概念及其解释 操作系统都是大家耳熟能详的名词,常见的操作系统主要有:Li…

opencv - py_ml - py_knn k-最近邻算法

文章目录 1.理解 k-最近邻算法目标理论OpenCV 中的 kNN其他资源 2.使用 kNN 对手写数据进行 OCR目标手写数字的 OCR英文字母的 OCR其他资源 1.理解 k-最近邻算法 目标 在本章中,我们将理解 k-最近邻算法 (kNN) 的概念。 理论 kNN 是监督学习中最简单的分类算法之…

【js逆向专题】12.RPC技术

目录 一. websocket1. 什么是websocket2. websocket的原理3. websocket实现方式1. 客户端2.服务端3. 实际案例1. 案例目标2. 解析思路 二. RPC1. RPC 简介2.Sekiro-RPC1. 使用方法1. 执行方式2.客户端环境3.使用参数说明 2. 测试使用1. 前端代码2. SK API3.python调用代码 三.项…