上一节我们讲到了使用jenkins+pipeline在k8s容器里部署应用,实现发布,回滚,甚至选择发布到不同的环境,但是这种发布是针对固定分支或固定tag的,如果要动态选择tag来发布就不行了。
最近接到一个需求就是要根据tag来发布应用,这样原来的发布流程就不行了,经过一百多次的尝试,终于实现了这种需求。
尝试过使用pipeline工程中配置git parameter 来动态选择分支,但是这种工程不支持,插件也没找到。
尝试过在Jenkinsfile使用Git Parameter 实现参数化构建时选择分支和Tag,但是最终也没走通,这还是要求我把git parameter插件和pipeline工程一块使用,但是这种目前不支持。
研究了很多Jenkins部署的案例,也没找到和我类似的场景,经过了大概两周的沉寂,终于某天,灵感来了,一个项目满足不了,那么分开实现功能。
第一个项目实现的功能是maven项目,使用参数化构建,根据git parameter 来动态选择发布分支还是tag,构建完成后,生成的jar包传送到一个中转站,这个中转站可以是自建的缓存服务,比如minio server,需要在Jenkins中需要安装minio storage 插件,配置访问minio服务的accesskey 和 secret key,然后需要在job项目中配置构建完毕后,需要上传的文件配置。
我这里选择使用阿里云的OSS作为中转站,当然也需要安装插件
项目中配置如下
配置完毕后,测试构建,如果OSS中有我们刚刚部署完上传的jar包,说明我们已经成功了一半。
接下来的动作就是配置构建jar包完毕后,触发第二个发布的项目。
因为jar包的名字将来有可能会变化,这时候我们把它设置成一个文本参数,并传递给第二个构建的项目,并且只有第一个项目构建成功时才触发第二项目的构建
接下来说第二个项目的配置,和使用jenkins+pipeline在k8s容器里部署应用一样的配置,我们只是把Jenkinsfile中拉取代码和build jar包的配置删除即可,因为这两个部分,我们在第一个项目中已经做过了。
首先我们将第一部分的构建jar包名字传入
接下来配置pipeline script
具体脚本参考: