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: test
	only:
		-master
	script:
		-make clean
		-rm -rf
		  pqra 
		  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_MR
  stage: test
  only:
     -merge_requests
  script: 
   -make clean
   -rm -rf
     pqra
     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 cibuild -P . -b
$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME-$CI_JOB_ID | tee file.txt
  after_script:
   - >
      if[$CI_JOB_STATUS == 'success']; then
         echo "no issued found !"
       else
         grep http://file.txt> out.txt
         glab 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静态分析工具销售工程师

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是恶意爬虫,有什么应对措施

在当今数字化时代,网络爬虫作为一种重要的数据收集工具,广泛应用于搜索引擎、数据分析、商业情报等领域。然而,恶意爬虫的出现,却给网站安全带来了前所未有的挑战。今天我们就来简单了解下什么是恶意爬虫,爬虫对网站的…

【Power Query】List.Select 筛选列表

List.Select 筛选列表 ——在列表中返回满足条件的元素 List.Select(列表,判断条件) 不是列表的可以转成列表再筛选&#xff0c;例如 Record.ToList 不同场景的判断条件参考写法 (1)单条件筛选 列表中小于50的数字 List.Select({1,99,8,98,5},each _<50) (2)多条件筛…

39.3K Star,一个现代的数据库ORM工具,专为Node.js和TypeScript设计

大家好&#xff0c;今天给大家分享一个现代的数据库对象关系映射&#xff08;Object-Relational Mapping&#xff0c;ORM&#xff09;工具Prisma ORM&#xff0c;它旨在简化数据库操作&#xff0c;提高开发效率&#xff0c;并确保类型安全。 项目介绍 Prisma ORM适用于各种需要…

在Windows 10操作系统中搭建FTP

在Windows 10操作系统中搭建FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;服务器&#xff0c;可以为局域网内的用户提供文件共享和传输服务。以下是详细的搭建步骤&#xff0c;包括准备工作、安装与配置FTP服务、以及测试与访问FTP服务器等环节。…

HarmonyOS第一课——HarmonyOS介绍

HarmonyOS第一课 HarmonyOS介绍 HarmonyOS是新一代的智能终端操作系统&#xff08;泛终端服务的载体&#xff09;&#xff1b; 智慧互联协同&#xff0c;全场景交互体验&#xff1b; 核心技术理念&#xff1a; 一次开发 多次部署&#xff1a; 预览 可视化开发UI适配 事件交…

关闭或开启Win11系统的自动更新

Win11系统老是自动更新&#xff0c;每次更新后不仅拖慢计算机的运行速度&#xff0c;甚至打印机都无法使用了&#xff0c;给我们带来了很多困扰。 那么我们该如何彻底关闭Win11系统的自动更新呢&#xff1f;关闭Win11系统自动更新会有什么弊端呢&#xff1f; 下面就分享几个小方…

笛卡尔空间内的阻抗控制

目录 1. 笛卡尔空间内的阻抗控制方程推导2. 笛卡尔空间内的阻抗控制的控制框图3. 一些变体变体 1.1变体 1.2变体 2 4.笛卡尔空间内的阻抗控制方法总结参考资料 1. 笛卡尔空间内的阻抗控制方程推导 目标&#xff1a;让机器末端执行器在笛卡尔空间内的每个方向上都体现出由弹簧阻…

Java-线程池技术

一、线程池简介 线程池是一种池化的思想&#xff0c;是将一些共同资源放到池中进行管理和使用&#xff0c;从而避免大量的创建销毁带来的资源浪费等问题&#xff0c;线程池主要优点体现在&#xff1a; 降低资源消耗&#xff1a;普通线程创建执行完任务之后即被销毁&#xff0…

【C++】类和对象(附题)

目录 一、类的定义 1.1.类定义格式 1.2.访问限定符 1.3.类域 二、实例化 2.1.实例化概念 2.2.对象大小 三、this指针 附加题&#xff1a;&#xff08;增进对this指针的理解&#xff09; 1.下面程序编译运行结果是&#xff08;&#xff09; 2.下面程序编译运行结果是&…

linux下gpio模拟spi时序

目录 前言一、配置内容二、驱动代码实现三、总结 前言 本笔记总结linux下使用gpio模拟spi时序的方法&#xff0c;基于arm64架构的一个SOC&#xff0c;linux内核版本为linux5.10.xxx&#xff0c;以驱动三线spi(时钟线sclk&#xff0c;片选cs&#xff0c;sdata数据读和写使用同一…

antv g6问题处理汇总

关于自定义边时&#xff0c;箭头始终没出现的问题处理 问题&#xff1a; 问题对应的代码 解决方法&#xff1a;将箭头的偏移量调整y坐标 完整代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8" /><title&…

使用vue+kkFileview组件实现各种类型文件预览

关于kkFileView 【参考】&#xff1a;https://kkfileview.keking.cn/zh-cn/docs/home.html 文档在线预览项目解决方案&#xff0c;项目使用流行的spring boot搭建&#xff0c;易上手和部署。万能的文件预览开源项目&#xff0c;基本支持主流文档格式预览 本项目介绍 项目使用…

无忧树闪耀2024中国防水展:智能新材料,引领新赛道!

2024年10月16日&#xff0c;上海无忧树新材料科技有限公司在上海国家会展中心5.2号馆5103展位&#xff0c;成功亮相2024中国国际屋面和建筑防水技术展览会。作为新材料科技领域的佼佼者&#xff0c;无忧树以创新的技术、卓越的产品和专业的服务&#xff0c;赢得了现场观众的广泛…

COVON全意卫生巾,轻薄透气,绵柔速干,马来西亚热销中

随着女性健康意识的提高&#xff0c;卫生巾作为女性日常生活中的必需品&#xff0c;其品质和舒适度越来越受到关注。今天&#xff0c;我们要为大家介绍一款来自马来西亚热销的卫生巾——COVON全意卫生巾&#xff0c;以其轻薄透气、绵柔速干的特点&#xff0c;赢得了广大女性的喜…

【有啥问啥】视频插帧算法技术原理详解

视频插帧算法技术原理详解 引言 视频插帧&#xff08;Video Interpolation&#xff09;技术&#xff0c;作为计算机视觉领域的一项重要应用&#xff0c;旨在通过算法手段在已有的视频帧之间插入额外的帧&#xff0c;从而提升视频的帧率&#xff0c;使其看起来更加流畅。这一技…

oracle19c的k8s部署

前提条件 1、首先要有一个oracle 账号 2、需要一台能连接网络并安装docker的机器用Oracle账号登录Home 点击database 跳转到下一个页面 记得一定sign in ,否则无法拉取镜像 docker pull container-registry.oracle.com/database/enterprise:latest 执行拉取后使用镜像进行部…

基于Ubuntu24.04,下载并编译Android12系统源码 (二)

1. 前言 上篇文章&#xff0c;我们基于Ubuntu24.04&#xff0c;已经成功下载下来了Android12的源码&#xff0c;这篇文章我们会接着上文&#xff0c;基于Ubuntu24.04来编译Android源码。 2. 编译源码 2.1 了解源码编译的名词 Makefile &#xff1a; Android平台的一个编译系…

Diffusion Probabilistic Models for 3D Point Cloud Generation——点云论文阅读(8)

此内容是论文总结&#xff0c;重点看思路&#xff01;&#xff01; 文章概述 该文献介绍了一种用于3D点云生成的概率模型。点云是表示3D物体和场景的常用方式&#xff0c;但由于其不规则的采样模式&#xff0c;与图像相比&#xff0c;点云生成更具挑战性。现有方法如GANs、流…

Flutter通过showDialog实现下拉筛选菜单效果

一、效果图 二、 实现方式 获取固定在顶部筛选头部Widget在屏幕上的位置和它的高度在弹窗中通过获取到的高度进行内容显示区域定位巧用AnimatedContainer组件实现下拉动画效果最后在底部加上黑色蒙层 unawaited(showDialog(context: context,useSafeArea: false,barrierColor…

Golang | Leetcode Golang题解之第503题下一个更大元素II

题目&#xff1a; 题解&#xff1a; func nextGreaterElements(nums []int) []int {n : len(nums)ans : make([]int, n)for i : range ans {ans[i] -1}stack : []int{}for i : 0; i < n*2-1; i {for len(stack) > 0 && nums[stack[len(stack)-1]] < nums[i%…