问题
Web 前端的应用需要在 node 环境下安装依赖和构建,但是发布一般又是用 nginx 镜像,我们既不想在 node 容器里安装 nginx,也不想在 nginx 容器里安装 node;
TL;DR
所以,我们先在一个 node 容器中 build 应用,利用 GitLab CI Cache 机制,将构建后的目标文件(通常是 dist 文件夹)缓存,以便在发布阶段 (release stage) 可以使用。
这里我所谓的 release 是指发布 docker image ,所以需要一个 Dockerfile,并且是以 nginx image 为基础镜像构建的。
我这里是部署到 swarm 集群上,所以会首先把 docker-stack.yml
文件 scp 到目标服务器上。
例说
1 | # Dockerfile |
1 | # .gitlab-ci.yml |
小结
这个例子是从实际工作项目中略删减得来的,更完整综合一些。
这个 Pipeline 一共三个阶段:
- build # 构建前端项目
- release # 发布 Docker 镜像
- deploy # 部署到 Swarm 上
在 build 阶段完成后,将 build 的结果 dist
缓存起来,这样到 realse 阶段时,就可以把它们打包到镜像里了,然后 push 到镜像仓库;
deploy 阶段就是 ssh 连接远程执行命令部署,与之前不同的是,这次是部署在 swarm 上,我们先将 docker-stack.yml
上传到目标服务器,然后远程执行部署指令,这块没什么可说的。