spinnaker是奈飞开源的CD平台,似乎比较小众,中文资料难找。spinnaker作为代码托管平台的钩子入口,集成有很多现成的插件,比如github,gitlab,但偏偏没有gitee。
中文环境下也没有找到其对接gitee的教程,当然gitee钩jenkins是没问题,我的环境CI部分用的也是jenkins,CI流水线跑完之后,再通过jenkins触发spinnaker或通过harbor的webhook触发spinnaker也是比较容易,可以实现。
但我觉得依赖的环节越多,出现问题排查就越困难,不如一次触发spinnaker,后面全部交给spinnaker来调度简洁明了。
自己研究了一下,用通用webhook接口实现了参数传递,参数只要传到spinnaker中,后面的流程就简单了,这里简单介绍一下实现关键步骤吧。
关键步骤,要在流水线中加入一个 Evaluate Variables 评估变量的阶段,gitee POST过来的数据结构,在后台可以查到。
在构建 Evaluate Variables 阶段时,spinnaker提供了一个方便的调试工具,可以基于前几次的Webhook请求,调试你所需要的格式化参数。
比如常用的分支,commit时间,就可以用下面两个表达式来获取:
#可以是分支名:master/release之类,也可以是commit ID
${trigger.payload.ref.split("/")[2]}
#格式化commit时间为所需样式,用于镜像命名
${trigger.payload.head_commit.timestamp.substring(2,10).replace('-','')}_${trigger.payload.head_commit.timestamp.substring(11,19).replace(':','')}
在Evaluate Variables阶段定义好的变量,其后的阶段可以直接使用。 无图言卵:
参数都收集好拉,交给jenkins参数化构建,构建完成自动制作镜像提交到私有仓库,CI流程走完, 最后再将各种参数构造成的镜像地址,发布到k8s。
image: 'harbor.abc.cn/${parameters.image_name}:${git_ver}_${add_tag}'
自动部署一般用于开发环境,生产环境还是要人工测试审核的,开发环境简单走个蓝绿部署就好:
最后说一句,spinnaker版本是1.19.4,CD环节只能yaml,我很向往 1.8.x的armory发行版,它可以在spinnaker里点点点生成yaml,但在1.19.6的k8s下, clouddriver与k8s 通讯总是有问题,疑似k8s版本太高,与低版本spinnaker不兼容,如果有读者使用1.8.x的spinnaker在高版本k8s部署成功,请在评论中指点一二。