首先我们先将构建和部署分离开来,然后通过oneci中一次完成多个项目的biuld操作,待所有项目build的结束后,在oneci的最后一个阶段,去触发部署操作。后期可以通过判断条件的方式,设置卡点,从而做从流程审批到发布生产。
项目信息:
项目说明:
流程思路:
CI file:
oneci ci file:
image: docker:19.03.13
variables:
CITOKEN: b7d501ee8b04248b12a84e66bc14c6
REF_NAME: main
VERSION: v10086
stages:
- level 0
- level 1
- level 2
- level 3
- chufa #触发helmfile项目
depoly-level-0:
stage: level 0
trigger:
project: ops/http
branch: main
strategy: depend
depoly-level-1:
stage: level 1
trigger:
project: ops/nginx
branch: main
strategy: depend
depoly-level-2:
stage: level 1
trigger:
project: ops/tomcat
branch: main
strategy: depend
depoly-level-3:
stage: level 2
trigger:
project: ops/mysql
branch: main
strategy: depend
depoly-level-4:
stage: level 3
trigger:
project: ops/apache
branch: main
strategy: depend
deploy-chufa:
stage: chufa
image: centos:7
tags:
- test
script:
- "curl -X POST -F token=${CITOKEN} -F ref=${REF_NAME} -F variables[version]=${VERSION} http://192.168.137.14/api/v4/projects/8/trigger/pipeline"
- echo "Compile complete."
- sleep 1
http ci file:(其他项目类同)
image: docker:19.03.13
variables:
VERSION: v120
stages:
- Test
- Build
- Deploy
test:
stage: Test
tags:
- test
script:
- docker info
build-http:
stage: Build
tags:
- test
script:
- docker build -t 192.168.137.14:5000/http:${VERSION} -f Dockerfile .
- docker push 192.168.137.14:5000/http:${VERSION}
helmfile ci file:
stages:
- Modify
- Deploy
modifyDev:
image: 192.168.137.14:5000/centos:env
stage: Modify
tags:
- test
only:
- main
script:
- cd helmfile
- echo ${version}
- envsubst < kikitrade-dev-green.tmp > kikitrade-dev-green.yaml
artifacts:
paths:
- helmfile
deployDev:
image: 192.168.137.14:5000/helmfile:kktd-beta
stage: Deploy
tags:
- test
only:
- main
script:
- cd helmfile
- echo ${version}
- helmfile -v
- cat kikitrade-dev-green.yaml
效果展示:
oneci 流水线
helmfile流水线
可以发现,有个http的项目的镜像版本并不是我们期望的v120,是因为http项目中使用的VERSION并不是version环境,同时通过在oneci中传入的参数给覆盖了,所以因此也得出一个结论就是传入的参数的优先级会大于ci文件中预定义的参数值。