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看板工具分析测试结果