背景:
一个微服务git仓库,包含多个自服务,在结合git webhook进行更新时,每次会全量更新,构建时间长,过程缓慢,严重影响测试效率。
目标:
如果只是某个子服务的代码发生变更了,去针对性的更新该服务即可,未发生变化的服务无需进行构建。减小服务器构建压力,提升服务自动化构建性能。
思路:
在jenkins服务器上,对pull下来的代码进行比较,找到发生代码变化的服务,然后基于该服务进行pipeline 构建。
具体步骤如下(操作均在jenkins服务器中进行):
1.构建两个分支: develop(当前分支) master(稳定版分支:每次更新完要将develop分支合并到master,保持两个分支代码一致)
2.在jenkins中构建微任务,拉取代码至本地develop分支
3.创建集合(allRepository)列出所有子服务名, 并创建一个待更新子服务的集合(updateRepository)
4.基于子服务名集合(allRepository),分别进入对应的子服务目录,使用 git diff develop..master --name-only ./ 比对该子服务目录下两个分支代码的异同(只列出文件名)
5.如果步骤4有文件,则表示该子服务需要更新,该子服务名添加至待更新子服务的集合(updateRepository)中, 基于第3步循环执行4和5步,直至循环执行结束,生成最终待更新子服务集合列表。
6.基于待更新子服务集合列表进行更新操作(jenkins pipeline)
7.更新结束后,讲develop分支合并至master分支,保持版本一致
综上,即可实现有代码更新的服务进行针对性更新。