Docker容器化CI/CD Pipeline,加快项目编译构建速度的方法
名词解释:
所谓“容器化Pipeline”,是指 CI/CD流水线 运行在Kubernetes容器云平台上,而非运行在虚拟机或物理机上。
加快项目构建在容器化流水线中的构建速度,本质是利用好缓存(或本地仓库),不要让每次编译构建都去拉包。
方法一:外挂共享存储卷
针对 类似于 Maven(Java)构建的项目(所有项目共享本地仓库),这种方法比较简单有效。
以Maven为例,在mvn构建容器中,直接从host或者远程块设备上mount一个目录进去作为Maven的repository目录(默认路径为~/.m2/repository)。
缺点:必须依赖于容器共享存储,且需要支持多容器并发读写。
方法二:使用额外的镜像来作为本地仓库
针对 类似于 NPM(NodeJS)构建的项目(每个项目有自己的私有仓库),这种方法比较好。
其实也可以采用方法一,只是需要为每个项目分配不同的存储。
下面说的方法,彻底避免了方法一的缺点。
先写一个Dockerfile,用项目的package.json去执行一下,得到一个用于构建该项目的“编译镜像”,里面包含了执行package.json时缓存的包。
然后再用这个“编译镜像”,去正式构建项目(可以使用Docker的分阶段构建)。构建项目时,也不怕package.json有更新,因为即便是有更新,也只是个别组件的局部更新;
如果package.json真的有重大更新,则重新制作“编译镜像”就行了。