代码质量与安全 | Docker教程:如何将Helix QAC创建为一个容器并运行?
快速部署: Docker可以为每个进程创建一个容器,这些容器可以按需快速启动和关闭,而无需启动平台操作系统(OS)。这将部署过程时间缩短到几秒钟。此外,Docker镜像的启动几乎是即时的。 可移植性: Docker可以将经过测试的容器化应用程序部署到任何其他运行Docker的系统上,并确保它的性能与测试时完全相同。Docker镜像可以与其他团队共享。 性能: 尽管虚拟机(VM)是容器的替代方案,但VM具有操作系统,而Docker容器没有。这意味着容器比VM占用更少的资源,创建速度更快,并且启动和关闭的时间也更快。 持续集成效率: Docker使您能够构建容器镜像,并在开发、测试和部署的每个步骤中使用它。此外,您还可以将非依赖性步骤分开,然后并行运行它们,从而缩短从构建阶段到生产部署阶段所需的时间。这缩短了设置环境和调试环境特定问题的时间,使它们更可靠且更易于维护。
Docker不能替代虚拟机:在虚拟机中运行的许多应用都可以移动到容器中,但并不是说所有的应用都需要或都可以移动到容器中。例如,具有严格监管要求的行业可能无法用容器替换虚拟机,因为虚拟机提供比容器更高级别的隔离。 容器中的数据:有时容器会出现故障,在这种情况下,它需要备份和恢复策略。虽然有几种解决方案,但没有一种是自动化或可以扩展的。另一个限制是,除非在容器关闭之前将其保存在某个地方,否则当容器关闭时,其中的所有数据都将永远消失。 跨平台兼容性: 如果一个应用程序设计为在特定平台(例如Windows操作系统平台或Linux)上的Docker容器中运行,则无法在任何其他平台上运行。然而,虚拟机不受此限制,因此这种限制使Docker对于一些由Windows和Linux服务器组成的高度异构的环境不太具有吸引力。 使用图形界面运行应用程序:总的来说,Docker是为托管在命令行上运行的应用程序而设计的。虽然有几种方法(比如使用X11转发或MobaXterm)可以让我们在Docker容器中运行图形界面,但这些过程很繁琐。因此,可以说Docker对于需要丰富接口的应用程序来说不是一个好的解决方案。
第一部分:准备Docker引擎
$ sudo docker运行hello-world 该命令将下载一个简单的“hello-world”测试Docker镜像并在容器中运行它。因此,当容器运行时,它会打印一条信息性消息并退出。
第二部分:创建、构建和运行
Helix-QAC-2022.2(C/C++静态分析解析器) ASCM-3.3.0(AUTOSAR C++14编码合规性) M3CM-3.3.0(MISRA C 2012编码合规性) MCPP-2.3.0(MISRA C++ 2008编码合规性) CERTCCM-2.3.0(C语言的安全编码标准支持) CERTCCPCM-2.3.0(CPP的安全编码标准支持)
在我的示例中,将有六个文件(一个解析器工具文件和五个编码合规性模块)。
第1行选择了Ubuntu 22.04作为基础镜像。 第4行到第7行使Ubuntu操作系统保持最新状态,并允许设置时区。 第10行是可选的,但建议添加这些有用的工具,因为Ubuntu基础镜像是准系统。 第15行将安装基本的构建工具、GNU编译器依赖项和任何支持文件。这一步针对编译器工具链的使用需求会有所不同。但是,在我的示例中,这个镜像将使用gcc/g++ 11编译器。 第19行和第20行指示Docker引擎创建一个名为“QacWorkspace”的工作目录,所有后续命令都将使用该目录。 第25行将所有安装文件的权限更改为可执行。 第28行以静默模式安装Helix-QAC解析器工具并接受许可协议。 第31行至第35行以静默模式安装选定的编码合规性模块并接受许可协议。 第38行清理安装文件,使Docker镜像尽可能减少占用空间。
拉取和无缓存参数用于确保始终获取最新的ubuntu镜像,并从头开始构建Docker镜像。 -f是qacDockerfile名称,默认情况下原始名称是Dockerfile。 -t是格式“name:tag”因此名称是“qacscatools”,标签是“22v2”,以指示使用了哪个Helix-QAC工具版本。 不要忘记末尾的“dot”,它表示这是一个本地目录。
构建镜像过程完成后,可以看到最后两行消息,指示写入文件并标记镜像。若要验证构建是否成功,请运行以下命令以显示所有可用Docker镜像列表。
$>docker images
第三部分:在本地项目上运行DaaQT
第3行是对桌面计算机上项目文件夹名称的引用。 第7行是Helix QAC仪表板服务器上项目持有者的名称,用于上传诊断消息和项目信息。(注意:第8行可用于匹配本地文件夹名称。) 第9行到第11行是有关Helix QAC仪表板服务器的信息,例如URL地址(或FQDN)、服务器端口和许可证服务器端口。 第14行是本地桌面项目工作区名称服务器URL地址(或 FQDN)、服务器端口和许可证服务器端口。 第15行和第16行是对Helix QAC解析器工具所在位置的内部Docker镜像的引用,以及映射项目工作区的位置。 第19行供Docker与许可证服务器通信,以请求使用工具许可证。 第25行将Docker镜像设置为正确的入口点,以便定位映射的项目工作区。 第28行到第29行是选择一个规则配置文件用于项目。这些默认文件名是针对特定规则组配置进行标识的。您可以通过合并任何一个或多个规则配置文件来创建自己的自定义RCF文件,但在使用之前,必须在Helix QAC桌面GUI应用程序中完成自定义RCF文件的创建。此外,新的自定义名称需要与默认文件名不同。 第34行和第35行是为编译器工具链进行映射。在我的示例中,我已经映射到要使用地GNU C/CPP 11.2版本。 第38行用于创建PRQA项目配置并设置需求项目配置。 第41行让Helix QAC能够监控和跟踪项目如何用其命令进行本地构建。 如果项目需要执行一些关系跨模块分析(RCMA)和/或多线程分析(MTA),则通常使用第44行和第45行。 第47行到第49行是选择一个编码合规性模块,用于满足您的编码合规性要求需求。请确保此设置与第28行至第31行的RCF设置相匹配。 第52行是使用上述所有配置和设置参数,对您的项目执行静态代码分析。 第55行是将项目分析扫描结果上传到Helix QAC的仪表板服务器,并将其放在项目持有人中。上传的信息是包含诊断消息以及项目配置设置的源文件。
“run”,就是执行。 “-it”以交互方式运行Docker(因此您会获得一个带有STDIN的伪TTY)。 “–rm”会导致Docker在容器退出时自动删除容器。 “-v”表示卷映射LocalHostVolume:DockerVolume。 “–entrypoint” 为登录后的开始位置,可以是命令行开始运行带有指示内容的location/file_name.sh。
Dzuy Tran
Klocwork和Helix QAC高级解决方案架构师,Perforce公司
文章来源:https://bit.ly/3ZTux4I
如需了解Perforce旗下静态代码分析工具Helix QAC如何帮助您保护提升软件质量和安全性,请立即联系Perforce授权合作伙伴——龙智:
官网:www.shdsd.com
电话:400-666-7732
邮箱:marketing@shdsd.com