最近拖延症犯了,一个文章标题写了一个月才写了个标题...
前言
自从入坑Drone CI/DI以来,我极力推荐在小微项目上使用Drone来完成自动构建,主要是轻量化,安装配置方便 ,
只需写一个docker compose文件即可完成Drone的安装配置,
只需写一个.drone.yml
即可完成接入,极为方便;
Drone更深一层探究
经过我的不懈努力,经主管同意,最终也在公司项目上使用上了Drone来逐步替代Jenkins进行小项目微服务的自动构建部署 ;
但是实际使用中发现一个问题,即SpringBoot工程,通常是一个主工程下包含多个微服务子工程,使用drone不太好控制其中某一个工程的自动构建部署,总不能每次都重新构建整个服务,然后重启所有工程吧,这样效率也太低了 ;
//多工程目录结构,本文主要演示SpringBoot多工程项目自动构建部署
demoParant
├── common //公共工程
├── api //API工程
├── user //用户工程
└── back //后台工程
能想到的最简单实现的方式就是来通过不同的分支来触发不同的构建任务,这样理论上可行,但是实际操作会产生一堆分支,显得极为不整洁,并且正常开发也是开发一个分支,测试一个分支,生产一个分支,太多了操作起来也不方便 ;
所以最理想的方式也就是在同一个分支下,通过某种方式来触发不同的构建任务;
Drone的启发
在Drone CI下有一个默认功能,即在Commit log中输入[CI SKIP]
即可跳过本次自动构建,于是我就想能否通过Commit log来控制本次部署具体哪个子工程,这样下来我只要在输入commit log的时候输入需要构建的工程,即可完成对应工程的自动构建部署,并且不影响同项目下的其他工程;
初步设想的原理就是在drone执行部署命令时,通过自定义脚本完成工程部署,并将commit log作为参数传入脚本,在脚本中判断commit log中是否指定某些工程的运行的参数,如果不指定则默认运行所有工程 ;
例如:我提交commit日志update Admin.java; add admin management interface; [CI API] [CI BACK]
;
这样一来,经过drone自动构建后,只重新部署了API工程和后台工程;
具体实现
具体实现可参考如下脚本: