在容器化環境中部署靜態分析和單元測試(1):如何為容器化開發環境配置Parasoft C/C++test 2020.1
如何為容器化開發環境配置
的發行版帶來了一系列增強功能,這些增強功能使其易于與Docker容器一起使用。我將引導您完成配置以在容器化開發環境中工作的步驟。
嵌入式開發團隊喜歡Docker容器
開發工具的容器化部署正成為嵌入式開發團隊的生力軍。盡管最初開發容器是為了解決微服務和基于Web的應用程序部署方面的問題,但它們最近在嵌入式團隊(尤其是使用容器來管理復雜工具鏈的大型團隊)中越來越受歡迎。
在管理復雜的開發環境時,尤其是在對安全至關重要的領域中,團隊通常會面臨以下挑戰:
- 將整個團隊的升級同步到工具的新版本,例如編譯器、構建工具鏈等。
- 動態響應庫或軟件開發套件(SDK)等的新安全補丁。
- 確保所有團隊成員和自動化基礎架構(CI/CD)的工具鏈的一致性。
- 能夠對開發環境進行版本控制并還原它,以服務于已通過特定工具鏈認證的產品的舊版本。
- 入職并設置新的開發人員。
使用容器很容易解決所有這些問題。難怪團隊喜歡容器!讓我們看一下如何配置以在容器化環境中使用。
將與容器化編譯工具鏈一起使用
配置可以很容易地與編譯工具鏈和部署在容器中的執行環境一起使用。我們支持基于Linux和Docker容器的部署。以下是該類型設置外觀的高級概述:
如您所見,訪問容器化編譯器(GNU GCC)和運行時環境。在此特定設置中,有兩個單獨的Docker容器:
- 一種用于編譯器和構建工具
- 另一個用于執行環境(例如,嵌入式Linux的剝離版本)
編譯工具鏈用于靜態分析,以在解析之前對代碼進行預處理,并用于單元測試以編譯檢測到的源代碼。執行環境僅用于單元測試,以運行帶有單元測試用例的創建的測試二進制文件。
配置
讓我們看看如何配置使其與容器內編譯工具鏈和執行環境一起使用。在示例中,我們將使用Docker集線器提供的最新GCC容器映像。
以下說明假定您已在環境中正確安裝和配置了Docker引擎。與相同。
步驟1:啟動
1.確保您的Docker工作正常。讓我們先進行快速測試,并打印出GCC容器的“最新”映像中包含的GCC編譯器的版本號:
2.在運行之前,將專用的環境變量CPPTEST_CONTAINER_NAME設置為容器的名稱。這是告訴應該使用哪個容器來調用編譯器或鏈接器的簡單方法。它與Jenkins工作配合得很好。
3.另外,建議您將CPPTEST_INSTALL變量設置為指向安裝目錄。它使安裝簡單。一旦設置了變量,就可以開始。
4.對于您的工作區,在HOME目錄中的某個位置選擇一個位置(稍后將對此進行更多介紹)。
步驟2:創建一個演示項目
為了使創建演示項目超級簡單,讓我們使用標準的“新建項目”向導創建默認的“HelloWorld”項目。
1.選擇File Menu> New> C++ Project,然后選擇“Hello World C++ Project”。
2.輸入項目的選擇名稱。它看起來或多或少類似于以下屏幕截圖。
3.單擊“完成”為我們的示例創建默認項目。
步驟3:修改編譯器設置
創建項目后,在中修改幾個項目。
1.右鍵單擊項目,然后選擇屬性“Properties”,然后選擇Parasoft>C/C++test>Build Settings。
2.在構建設置“Build Settings”面板中,修改編譯器“Compiler”設置部分中的兩項:
- Family——進行更改以匹配容器中安裝的編譯器。在撰寫此文時,最新的“gcc”映像包含GNU GCC 9.2編譯器,提示選擇“GNU GCC 9.x (x86_64)”編譯器配置。
- 默認編譯器可執行文件——編譯器的默認可執行文件必須替換為特殊包裝,才能調用容器內編譯器,而不是直接安裝在主機操作系統中的常規編譯器。這些包裝程序remote-gcc和remote-g++隨發行版一起提供。在下面的屏幕截圖中,我在安裝目錄中使用了輔助環境變量。您可以為您的環境設置類似的變量,也可以使用完整路徑查找包裝腳本。
步驟4:驗證容器正在運行
使用之前,請確保帶有編譯工具鏈的容器已啟動并正在運行。
我們在上一步中設置的編譯器包裝器旨在在正在運行的容器中執行編譯器命令,這比每次調用都啟動容器要快。
對于CI/CD部署,可以在運行之前啟動容器,然后在運行之后停止容器,這是Jenkins作業的一部分。在此示例中,我們假定使用GUI base。為此,我們可以創建Eclipse運行配置。我建議創建兩個“C/C++應用程序”類型的配置,并將其命名如下:
- “啟動gcc容器”
- “停止gcc容器”
1.選擇運行菜單>運行配置......
2.創建兩個名為“啟動gcc容器”和“停止gcc容器”的運行配置。
3.在兩種配置的“Main”選項卡中,將您的Docker路徑作為“C/C++應用程序”輸入,如下所示:
4.對于“啟動gcc容器”,在參數選項卡中輸入以下命令:
run --rm -d -it --name gcc -v ${env_var:HOME}:${env_var:HOME}
-v ${env_var:CPPTEST_INSTALL}:${env_var:CPPTEST_INSTALL} gcc
如下面的屏幕截圖所示:
該命令有趣的部分是-v選項,用于映射卷。
第一個-v選項將本地HOME目錄映射到容器文件系統。這樣做的目的是使訪問在容器內運行的編譯器以及在主機操作系統中運行的Parasoft C/C++test的源代碼成為可能。
為了方便起見,我在示例中使用HOME是因為我將工作區直接放置在HOME中。
對于實際設置,您只能嚴格地將文件系統中包含源樹和Eclipse工作區的部分與項目映射。
第二個-v選項映射安裝目錄的位置,以允許訪問容器內的頭文件。
5.對于“停止gcc容器”,在參數選項卡中輸入以下命令,如下圖所示:
stop gcc
6.讓我們使用“啟動gcc容器”運行配置來運行容器。
Eclipse控制臺應向您顯示容器的哈希值。為確保一切正常,您可以切換到命令行并調用以下命令:
如果您在列表中看到我們的“gcc”容器,則可以開始使用來測試代碼了。
7.讓我們在導航器中選擇項目。使用菜單,選擇Test Using> Builtin> Unit Testing> Generate Unit Tests。
您應該看到在項目內部創建了一個新的“tests”目錄,并為“main”功能創建了一個單元測試。
8.生成測試用例后,就可以執行它們了。對于執行,請在容器中選擇Test Using> Builtin> Unit Testing> Run Unit Tests。
應該調用容器內部編譯和鏈接命令行的集合,最后在容器中創建和執行測試二進制文件。
于是,通過這些步驟,您準備了以使用容器內編譯工具鏈執行測試活動。
如果需要為項目更改編譯器或在運行時執行環境中進行某些修改,則可以更新容器映像或將其更改為其他版本。(記住要更新CPPTEST_CONTAINER_NAME變量。)
請繼續關注第二部分。我將解釋如何使用Parasoft C/C++test Standard創建容器映像。