为什么要优化
CD和CI是分开的,CD更追求上线的速度。比如在高峰期想要启动更多的实例进行运行。传统的容器化部署解决了迅速启动和维护大量副本的问题,即规模化问题。但是却带来了IO上的问题,因为每个镜像可能是因版本的需要从Docker仓库拉取的,这就带来了大量的网络IO,部署的时候并没有想象中迅速,即docker启动是很快,但是拉取却很慢。
怎么优化
需要以IO问题作为切入点。以java项目为例:
1 mvn的IO优化
mvn package
是打包的步骤,一般是必须要运行的一个步骤,如果这个过程完全运行在容器中,因为每个容器都是干净的,所以每次都要下载大量jar包。
这个问题,我们可以有两种解决方案,
第一是放弃容器环境,直接用实体机器的mvn环境打包,因为实体机的本地仓库会积累所以可以减少之后的构建。具体到gitlab-ci就是使用shell
模式的runner,将一台装有maven的实体宿主机器作为runner运行。例如这样的配置
# .gitlab-ci.yml
job1:
stage: build
# 根据tag指定跑脚本的runner
tags:
- shell-mvn-runner
script:
- mvn package -Dmaven.test.skip=true -B
第二是将maven容器的本地仓库映射出来,类似于docker run -v
的作用将外面的目录映射到里面,使每次可以重用下好的jar包。具体配置方式是在/etc/gitlab-runner/config.toml
[runners.docker]
host = ""
hostname = ""
image = "ruby:2.1"
privileged = false
disable_cache = true
volumes = ["/path/to/bind/fr