在容器化环境中部署静态分析和单元测试(2):如何使用Parasoft C/C++test创建容器映像
如何使用创建容器映像
这篇文章的第1部分讨论了使用容器部署嵌入式开发工具链的好处。它展示了如何配置以使其与在容器中部署的编译工具链和测试执行环境一起使用。
现在,让我们看一下使用创建容器图像。我将演示一个包含容器内静态分析执行的简单示例。
在Docker容器中部署
作为基于命令行的工具,标准适用于容器内部署。它可以与编译器打包在一起,并将系统构建到一个容器映像中,并用于CI/CD,并部署到开发人员的桌面以进行本地命令行扫描。下图显示了此设置的高级概述:
该图显示Jenkins使用容器化的运行静态分析。在此特定设置中,,编译工具链和构建工具部署在该图右上角所示的容器中。
右下方它下方的容器提供了执行环境,执行运行时测试(例如单元测试或自动系统级测试)可能需要执行环境。
如果我们打算仅执行静态分析,则我们的设置很可能仅包含带有编译工具链和的一种容器。
使用创建容器映像
如果尚未安装,请安装最新版的。
为了简化使用创建容器映像的过程,最新版本附带了一个Dockerfile示例。您可以在以下位置找到该Dockerfile:
/integration/docker/Dockerfile
这个简单的Dockerfile仅关注构建映像所需的步骤。在大多数实际情况下,您需要将此文件与Dockerfile合并。
在分析示例Dockerfile中的内容之前,让我们看看它是如何工作的。我的示例假定以下简单文件结构:
$HOME/sandbox/parasoft_cpptest_standard-2020.1.0-linux.x86_64.tar.gz
1.解压缩发行版。
- cd $HOME/sandbox
- tar xzf parasoft_cpptest_standard-2020.1.0-linux.x86_64.tar.gz
2.从发行版中复制示例Dockerfile
- cp cpptest/integration/docker
3.使用有关许可证的信息为准备属性文件。我们将使用默认的cpptestcli.properties文件作为基础,因此我们将其复制到我们的工作目录中:
- cp cpptest / cpptestcli.properties
编辑它以插入有关您的许可证服务器位置的信息。使用您喜欢的编辑器来配置许可信息。完成后保存文件。
4.编辑Dockerfile,并取消注释行号13(将cpptestcli.properties文件从本地目录复制到容器中位置的行)。Dockerfile中的行应如下所示:
- COPY cpptestcli.properties /opt/parasoft/cpptest
5.现在,我们准备创建Docker映像。运行命令以使用构建第一个映像。图像名称为“cpptest_ci_image”。
- docker build -t cpptest_ci_image
Docker将花费一些时间来分析其缓存并下载所需的基本映像。完成此操作后,将复制发行版并将其安装到映像中。一两分钟后,图像应准备就绪。 通过执行命令以列出所有图像来确认它:
- docker image -list
在输出中,您应该看到顶部列出了“cpptest_ci_image”。太好了,因此我们已经建立了图像并准备就绪。现在该进行测试了!
测试容器映像
为了进行简单测试,请使用Dockerfile中提供的帮助程序/示例命令行之一。
使用您喜欢的编辑器打开Dockerfile,然后向下滚动到文件底部。您应该看到几个示例命令行,如下所示:
让我们使用第26行中的命令行在该发行版随附的示例之一上执行容器内静态分析。
由于我们决定使用许可信息将cpptestcli.properties文件构建到容器中,因此我们可以简化命令行并删除-settings选项。测试的命令行应如下所示:
- docker run --rm -v $PWD:$PWD -w /opt/parasoft/cpptest/examples/ATM cpptestcli -compiler gcc_9-64 -module . -trace make clean all
瞧!静态分析是在容器中执行的。结果在控制台上报告。
我们可以进一步配置该工具以在本地文件系统上生成HTML报告,但这是另一回事。我们的主要目标是创建内部带有的容器,并将其配置为执行静态分析。我们实现了目标。
使用静态分析设置CI服务器
如果您需要在流程中设置带有静态分析的CI服务器,则您的任务会简单得多。只需访问容器。如果您团队中的开发人员想要运行静态分析,则情况也是如此。
是否需要升级到最新版本?只需下载发行版,重建您的容器映像,即可完成!团队和自动化基础设施甚至都不会注意到此操作。如有必要,可平滑,轻松且可逆。
关于Dockerfile内容
在结束之前,让我们看一下用于创建映像的附带的Dockerfile的内容。下图显示了
详细信息如下:
- 第2行指定GCC映像的Docker集线器,容器映像基于该集线器。
- 第3行为将在此脚本中执行的后续命令设置工作目录。
- 第7行,我们将发行版(存档)复制到容器映像。
- 第10行将分布提取到容器内的位置:/opt/parasoft(请注意第4行的WORKDIR命令)
- 第13行将定制的cpptestcli.properties文件从本地目录复制到的容器内安装中。此步骤是可选的,默认情况下已被注释掉。在大多数情况下,您需要在的安装中嵌入一些属性。最典型的方案是许可证配置,其中将包括许可证服务器的位置、凭据等。
- 第16行删除了分发存档。这只是一个清理。
- 第18行将workdir重置为/home(可选)
- 第19行指定了在容器启动时要运行的可执行文件。
这就是使用创建一个简单容器即可执行静态分析所需的一切。
正如我提到的,这是一个简单的Dockerfile。它已添加到分发中,以为您提供一个示例,说明您可能需要为环境创建容器映像。您将需要对其进行调整,或者将其与现有的Dockerfile合并。