Windows上應用Docker容器技術的動態程式碼測試

創提科技
2022/10/27

分享到

“轉載自維克多汽車技術(上海)有限公司,作者Vector China”


隨著軟體專案複雜度的提升和不可控的團隊資源變更,研發組織對DevOps部署的靈活性、可快速遷移和適配CI/CD的反覆運算提出了更高的要求。傳統的虛擬機器方案,即類比出一個完整作業系統,對這類需求顯得力不從心;而輕巧和便捷的容器技術通過在宿主機作業系統上應用虛擬化,直接勝出。本文主要介紹容器技術的代表產品Docker,並對Docker與虛擬機器進行對比,以及如何在Windows上應用Docker開展動態程式碼測試和實現與Jenkins的持續集成。


Docker簡介
 
Docker是一組PaaS(Platform as a Service,平臺即服務)產品,通過作業系統層級的虛擬化提供稱為容器的打包軟體服務。Docker起源自2008年在巴黎初創的dotCloud公司,後於美國進行孵化和註冊,於2013年3月宣佈遵從Apache2.0協議開源,同年9月正式更名為Docker,次年在0.9版本上用Go語言編寫的libcontainer元件替代了LXC(Linux Container)。


Windows上应用Docker容器技术的动态代码测试-1.png
圖1|Docker架構圖

 
如圖1(https://docs.docker.com/get-started/overview/)所示,Docker可以讓開發者基於選定的鏡像(Image),打包目標應用以及依賴包到一個羽量級、可移植的容器(Container)中,並通過用戶端的docker命令實現對Docker主機內容器的操控;當前容器也可創建成新的鏡像,而所有鏡像都存放在倉庫(Registry)中,類似GitHub一樣分為共有倉庫和私有倉庫。


容器技術與虛擬機器的比較
 
容器和虛擬機器雖然都使用虛擬化技術,但容器(圖2)並不是類比一個完整的作業系統,而是在宿主機作業系統上應用虛擬化技術;勝在“輕巧”,可實現軟體應用的秒級啟動和回應。相比而言,虛擬機器冗餘步驟多、啟動太慢、佔用記憶體硬碟資源,過於笨重。
 
此外,容器彼此間互相隔離,可通過預定管道進行通信(即共用宿主機的作業系統)。基於鏡像可便捷地創建容器和分發構建環境,契合DevOps和敏捷開發等對快速部署和應用的需求。
 

Windows上应用Docker容器技术的动态代码测试-2.jpg

圖2|容器與虛擬機器的比較


Windows上使用Docker運行VectorCAST
 
Windows上Docker安裝資訊可參照:https://docs.docker.com/desktop/windows/install/


3.1 運行帶GUI的Ubuntu鏡像,創建並啟動容器
 
鏡像使用參照https://hub.docker.com/r/dorowu/ubuntu-desktop-lxde-vnc/


Windows上应用Docker容器技术的动态代码测试-3.png


參數解析
 
    1. docker,Docker的二進位執行檔。
 
    2. run,與前面的docker組合來運行一個容器。
 
    3. -p,指埠綁定。
 
    4. -v,設定共用目錄,為了將安裝包保存到容器中,需要指定目錄。D:\Docker\Data指本地目錄,可以自訂;/dev/shm是指容器中的目錄。將需要複製到容器中的檔放置到D:\Docker\Data中,在容器中就可以進入/dev/shm來訪問這些檔。
 
    5. –name,設定容器名稱,如不指定,則設置一個隨機生成的名字。
 
    6. :xenial,指定鏡像的版本,如不指定,則默認使用最新版本。
 
    7. dorowu/ubuntu-desktop-lxde-vnc:xenial,指定要運行的鏡像,Docker 首先從本地主機上查找鏡像是否存在,如果不存在,Docker就會從鏡像倉庫Docker Hub下載公共鏡像。
 
上述命令完整的意思可以解釋為:Docker以dorowu/ubuntu-desktop-lxde-vnc:xenial鏡像創建一個名為ubuntu-desktop的容器,指定埠6080:80進行通信,指定D:\Docker\Data以及/dev/shm為Windows和Ubuntu的共用目錄。


3.2 在容器中安裝並使用VectorCAST
 
    a. 在流覽器中打開http://127.0.0.1:6080/,進入Ubuntu的桌面介面,打開命令列。

Windows上应用Docker容器技术的动态代码测试-4.jpg
圖3|打開Ubuntu容器的命令列


    b. 進入/dev/shm目錄找到在Windows的D:\Docker\Data下存放的VectorCAST安裝檔,並按Linux下的安裝方法常規安裝以及配置,在此不作贅述。


Windows上应用Docker容器技术的动态代码测试-5 小.jpg
圖4|容器內安裝VectorCAST


    *若提示找不到命令時(鏡像未安裝),可執行apt update以及apt install命令進行安裝即可。
 
    c. 運行VectorCAST,確認獲取到License。


Windows上应用Docker容器技术的动态代码测试-6 小.jpg
圖5|打開VectorCAST工具


    d. 創建環境並執行測試用例。


Windows上应用Docker容器技术的动态代码测试-7 小.jpg
圖6|VectorCAST中創建環境並執行用例


3.3 基於已有容器創建私有鏡像
 
為實現工具安裝的快速部署和避免依賴包可能導致的不相容問題,在安裝VectorCAST的容器基礎上創建私有鏡像提交至本地並打包,即可通過推送或分發達成需求。
 
    a. docker images查看現有鏡像:


Windows上应用Docker容器技术的动态代码测试-8 小.jpg
圖7|用docker images命令查看現有鏡像


    b. docker ps查看在運行中的容器:


Windows上应用Docker容器技术的动态代码测试-9 小.jpg
圖8|用docker ps命令查看在運行中的容器


此容器已經安裝了VectorCAST,在此基礎上創建鏡像。Commit命令需要使用這裡的紅框內容器ID。
 
    c. docker commit創建鏡像,並用docker images查看已創建的鏡像myubuntu:2.0:
 
      • docker commit -m "create ubuntu with VectorCAST installed" -a "vector" e94998fcde2f myubuntu:2.0


Windows上应用Docker容器技术的动态代码测试-10 小.jpg
圖9|用docker commit命令創建新的鏡像


    d. 基於創建的新鏡像創建容器並啟動:
 
      • docker run -p 6081:80 --name ubuntu_new myubuntu:2.0


Windows上应用Docker容器技术的动态代码测试-11 小.jpg
圖10|基於創建的新鏡像創建容器並啟動


    e. 進入Ubuntu桌面,確認容器中有已安裝好的VectorCAST


Windows上应用Docker容器技术的动态代码测试-12 小.jpg
圖11|確認基於新鏡像的容器


    f. Docker save打包鏡像至tar檔,可以拷貝至其他宿主機使用:
 
      • docker save -o my_ubuntu_v2.tar 919c1693ccee


Windows上应用Docker容器技术的动态代码测试-13 小.jpg
圖12|docker save命令打包鏡像


Jenkins + Docker實現CI/CD
 
Docker為DevOps提供了很好的基礎支撐:
 
    • 輕量。可以快速啟動和部署一個複雜的開發環境;
 
    • 通過編寫Dockerfile可以將業務容器化。將Dockerfile提交到程式碼倉庫中,在持續集成的過程中基於已有的Dockerfile來構建鏡像 ,極大提升持續集成的構建速度;
 
    • 鏡像倉庫使分發變得十分簡單。當鏡像構建完成後,無論在哪裡只需要執行docker pull命令就可以快速地將鏡像拉取到本地並且啟動應用。


Windows上应用Docker容器技术的动态代码测试-14 小.jpg


圖13|基於Docker+Jenkins部署CI/CD


接下來介紹從Jenkins Pipeline中啟動Docker容器,運行VectorCAST測試環境並生成測試報告的過程。


4.1 編寫測試腳本
 
在容器中編寫運行VectcorCAST測試工程的腳本start_vcast_cmd.sh,後續會在Pipeline中調用此腳本:


Windows上应用Docker容器技术的动态代码测试-15 小.jpg
圖14|在容器中編寫運行VectorCAST工程的腳本


4.2 宿主機上創建Jenkins Pipeline


Windows上应用Docker容器技术的动态代码测试-16 小.jpg
圖15|創建Jenkins Pipeline


Windows上应用Docker容器技术的动态代码测试-17 小.jpg
圖16|編寫Pipeline腳本


jenkins_run_docker.bat檔中主要執行開啟容器以及運行容器中事先準備的腳本start_vcast_cmd.sh:


Windows上应用Docker容器技术的动态代码测试-18 小.jpg
圖17|編寫Pipeline調用的批次處理腳本


4.3 構建Pipeline並查看報告

Windows上应用Docker容器技术的动态代码测试-19 小.jpg
圖18|查看build Pipeline結果


共用目錄中生成了測試報告Full_Status.html,用戶可以在宿主機上進行查看:


Windows上应用Docker容器技术的动态代码测试-20 小.jpg
圖19|宿主機生成的測試報告


4.4 引入看板工具Squore分析測試結果
 
看板管理工具Squore可以在Jenkins Pipeline中進行部署和配置,自動導入VectorCAST測試結果進行分析,以便用戶直觀地查看程式碼品質和趨勢分析,實現對專案管理和決策的優化。


Windows上应用Docker容器技术的动态代码测试-21 小.jpg
圖20|引入Squore看板工具分析測試結果