gitlab-ci :同一流水线,不同stage之间数据传输
背景:我遇到这个问题是在CI/CD中 编译打包 我们的全端代码 vue项目。在 npmrun build 结束之后会生成 dist目录, 在打docker镜像的时候需要把install stage 中的dist 传递给 build-image stage技术选择:一开始想到两个解决办法:1.做一个功能齐全的dockerimage里面既可以执行npm /yarn命令打包,又...
背景:
我遇到这个问题是在CI/CD中 编译打包 我们的全端代码 vue项目。在 npm run build 结束之后会生成 dist目录, 在打docker镜像的时候需要把 install stage 中的dist 传递给 build-image stage
技术选择:
一开始想到两个解决办法:
1.做一个功能齐全的docker image 里面既可以执行npm /yarn命令打包,又可以使用docker 命令,执行打包docker镜像 和镜像推送。
2.实现同一流水线中不同容器之间数据传递
总结一下:这两个方法各有各的好处。
方法一:优点,使用简单,流水线简化 ,缺点,镜像过大,拉取镜像耗时,需要定制化镜像
方法二:优点,镜像轻量化,单个job实现单个功能,很明确。缺点,流水线需要多几个stage,略显复杂
对比之后我选择方法二去构建我的流水线,但是又有问题,怎么实现数据传递呢?
gitlab-ci在这块也有两个办法 : cache ,和artifacts
通过学习,发现cache 配置简单,只需定义一个全局的cache即可 ,但是存在命中率问题,不一定每一次都有效果;artifacts 配置比cache略显复杂,但是每次都可以成功。
所以,我选择了artifacts 构建我的前端node流水线
关键部分gitlab-ci.yml文件展示
stages:
- Install
- Build-Images
install:
image: node:latest
stage: Install
script:
- yarn install
- nohup yarn run build & #这里使用后台化的方式运行 yarn run build ,是为了避免命令执行玩之后交互式的ctrl+c
- sleep 600
- ls -al
artifacts:
paths:
- dist/
only:
- ci-test
Build-Images:
stage: Build-Images
script:
- echo 'build docker image and push image to harbor'
- ls -al
- pwd
- mkdir dockerbuild
- mv dockerfile dockerbuild
- mv dist dockerbuild
- cd dockerbuild
- docker build -f dockerfile -t cfss-vue:v2 .
- docker login -u name -p pw @ ip:port
- docker push cfss-vue:v2
dependencies:
- install
only:
- ci-test
更多推荐
所有评论(0)