在容器化環(huán)境中部署靜態(tài)分析和單元測試(2):如何使用Parasoft C/C++test創(chuàng)建容器映像
如何使用Parasoft C/C++test創(chuàng)建容器映像
這篇文章的第1部分討論了使用容器部署嵌入式開發(fā)工具鏈的好處。它展示了如何配置Parasoft C/C++test Professional以使其與在容器中部署的編譯工具鏈和測試執(zhí)行環(huán)境一起使用。
現(xiàn)在,讓我們看一下使用Parasoft C/C++test Standard創(chuàng)建容器圖像。我將演示一個包含容器內(nèi)靜態(tài)分析執(zhí)行的簡單示例。
在Docker容器中部署Parasoft C/C++test Standard
作為基于命令行的工具,Parasoft C/C++test標(biāo)準(zhǔn)適用于容器內(nèi)部署。它可以與編譯器打包在一起,并將系統(tǒng)構(gòu)建到一個容器映像中,并用于CI/CD,并部署到開發(fā)人員的桌面以進(jìn)行本地命令行掃描。下圖顯示了此設(shè)置的高級概述:
該圖顯示Jenkins使用容器化的C/C++test運(yùn)行靜態(tài)分析。在此特定設(shè)置中,Parasoft C/C++test,編譯工具鏈和構(gòu)建工具部署在該圖右上角所示的容器中。
右下方它下方的容器提供了執(zhí)行環(huán)境,執(zhí)行運(yùn)行時測試(例如單元測試或自動系統(tǒng)級測試)可能需要執(zhí)行環(huán)境。
如果我們打算僅執(zhí)行靜態(tài)分析,則我們的設(shè)置很可能僅包含帶有編譯工具鏈和Parasoft C/C++test的一種容器。
使用Parasoft C/C++test創(chuàng)建容器映像
如果尚未安裝,請安裝最新版的Parasoft C/C++test 2020.1 for Linux。
為了簡化使用C/C++test創(chuàng)建容器映像的過程,最新版本附帶了一個Dockerfile示例。您可以在以下位置找到該Dockerfile:
/integration/docker/Dockerfile
這個簡單的Dockerfile僅關(guān)注構(gòu)建映像所需的C/C++test步驟。在大多數(shù)實(shí)際情況下,您需要將此文件與Dockerfile合并。
在分析示例Dockerfile中的內(nèi)容之前,讓我們看看它是如何工作的。我的示例假定以下簡單文件結(jié)構(gòu):
$HOME/sandbox/parasoft_cpptest_standard-2020.1.0-linux.x86_64.tar.gz
1.解壓縮C/C++test發(fā)行版。
- cd $HOME/sandbox
- tar xzf parasoft_cpptest_standard-2020.1.0-linux.x86_64.tar.gz
2.從發(fā)行版中復(fù)制示例Dockerfile
- cp cpptest/integration/docker
3.使用有關(guān)許可證的信息為C/C++test準(zhǔn)備屬性文件。我們將使用默認(rèn)的cpptestcli.properties文件作為基礎(chǔ),因此我們將其復(fù)制到我們的工作目錄中:
- cp cpptest / cpptestcli.properties
編輯它以插入有關(guān)您的許可證服務(wù)器位置的信息。使用您喜歡的編輯器來配置許可信息。完成后保存文件。
4.編輯Dockerfile,并取消注釋行號13(將cpptestcli.properties文件從本地目錄復(fù)制到容器中位置的行)。Dockerfile中的行應(yīng)如下所示:
- COPY cpptestcli.properties /opt/parasoft/cpptest
5.現(xiàn)在,我們準(zhǔn)備創(chuàng)建Docker映像。運(yùn)行命令以使用C/C++test構(gòu)建第一個映像。圖像名稱為“cpptest_ci_image”。
- docker build -t cpptest_ci_image
Docker將花費(fèi)一些時間來分析其緩存并下載所需的基本映像。完成此操作后,將復(fù)制C/C++test發(fā)行版并將其安裝到映像中。一兩分鐘后,圖像應(yīng)準(zhǔn)備就緒。 通過執(zhí)行命令以列出所有圖像來確認(rèn)它:
- docker image -list
在輸出中,您應(yīng)該看到頂部列出了“cpptest_ci_image”。太好了,因此我們已經(jīng)建立了圖像并準(zhǔn)備就緒?,F(xiàn)在該進(jìn)行測試了!
測試容器映像
為了進(jìn)行簡單測試,請使用Dockerfile中提供的幫助程序/示例命令行之一。
使用您喜歡的編輯器打開Dockerfile,然后向下滾動到文件底部。您應(yīng)該看到幾個示例命令行,如下所示:
讓我們使用第26行中的命令行在該發(fā)行版隨附的C/C++test示例之一上執(zhí)行容器內(nèi)靜態(tài)分析。
由于我們決定使用許可信息將cpptestcli.properties文件構(gòu)建到容器中,因此我們可以簡化命令行并刪除-settings選項(xiàng)。測試的命令行應(yīng)如下所示:
- docker run --rm -v $PWD:$PWD -w /opt/parasoft/cpptest/examples/ATM cpptestcli -compiler gcc_9-64 -module . -trace make clean all
瞧!靜態(tài)分析是在容器中執(zhí)行的。結(jié)果在控制臺上報(bào)告。
我們可以進(jìn)一步配置該工具以在本地文件系統(tǒng)上生成HTML報(bào)告,但這是另一回事。我們的主要目標(biāo)是創(chuàng)建內(nèi)部帶有C/C++test的容器,并將其配置為執(zhí)行靜態(tài)分析。我們實(shí)現(xiàn)了目標(biāo)。
使用靜態(tài)分析設(shè)置CI服務(wù)器
如果您需要在流程中設(shè)置帶有靜態(tài)分析的CI服務(wù)器,則您的任務(wù)會簡單得多。只需訪問容器。如果您團(tuán)隊(duì)中的開發(fā)人員想要運(yùn)行靜態(tài)分析,則情況也是如此。
是否需要將Parasoft C/C++test升級到最新版本?只需下載發(fā)行版,重建您的容器映像,即可完成!團(tuán)隊(duì)和自動化基礎(chǔ)設(shè)施甚至都不會注意到此操作。如有必要,可平滑,輕松且可逆。
關(guān)于Dockerfile內(nèi)容
在結(jié)束之前,讓我們看一下用于創(chuàng)建映像的Parasoft C/C++test附帶的Dockerfile的內(nèi)容。下圖顯示了
詳細(xì)信息如下:
- 第2行指定GCC映像的Docker集線器,容器映像基于該集線器。
- 第3行為將在此腳本中執(zhí)行的后續(xù)命令設(shè)置工作目錄。
- 第7行,我們將C/C++test發(fā)行版(存檔)復(fù)制到容器映像。
- 第10行將分布提取到容器內(nèi)的位置:/opt/parasoft(請注意第4行的WORKDIR命令)
- 第13行將定制的cpptestcli.properties文件從本地目錄復(fù)制到C/C++test的容器內(nèi)安裝中。此步驟是可選的,默認(rèn)情況下已被注釋掉。在大多數(shù)情況下,您需要在C/C++test的安裝中嵌入一些屬性。最典型的方案是許可證配置,其中將包括許可證服務(wù)器的位置、憑據(jù)等。
- 第16行刪除了分發(fā)存檔。這只是一個清理。
- 第18行將workdir重置為/home(可選)
- 第19行指定了在容器啟動時要運(yùn)行的可執(zhí)行文件。
這就是使用Parasoft C/C++test創(chuàng)建一個簡單容器即可執(zhí)行靜態(tài)分析所需的一切。
正如我提到的,這是一個簡單的Dockerfile。它已添加到分發(fā)中,以為您提供一個示例,說明您可能需要為環(huán)境創(chuàng)建容器映像。您將需要對其進(jìn)行調(diào)整,或者將其與現(xiàn)有的Dockerfile合并。