jenkins 增量发布插件_jenkins高级篇 pipeline 系列之-—06 实现自动打增量包

一、源起

目前核心系统各个模块开发,测试,uat环境都采用jenkins自动全量发版,UAT环境测试通过符合生产发版要求时,通知各模块负责人打生产增量包,

负责人从UAT分支拉取增量代码打成增量包,完全依赖个人。

二、设计思路

前提: 各个模块最新代码,在jenkins服务器上workspace中都有

涉及的工具:jenkins pipeline(安装插件“Extended Choice Parameter plugin”),shell脚本

2.1. 取SVN代码变化日志

执行SVN diff 命令抓取指定一段时间内,指定模块指定环境下代码变化日志----输出到patch.txt

svn diff -r{$BEGIN_DATE}:{$END_DATE} $CODEPATH --summarize --no-auth-cache >./patch.txt

2.2  获取源文件清单(文件路径)

svn全路径替换为相对项目的文件路径

2.3. 获取目标文件清单(文件路径)

根据pathch.txt,生成class文件清单patch_class.txt

2.3.1 编译路径替换

2.3.2 追加匿名内部类-----patch_class.txt

2.4. 生成JAR增量包

进入待打包模块的jenkins job路径下,

2.5. 人工确认通过后,增量包提交svn

三、实现

安装插件“Extended Choice Parameter plugin”,如果再jenkins的可安装插件中找不到这个插件,就去http://updates.jenkins-ci.org/download/plugins/ 这里找

用到三个构建参数:开始时间(输入框),结束时间(输入框),模块(多选框)

1c77206b552740bdbd61672a0fbf364f.png

pipeline Script

node {

def mvnMap= ['mvnHome': '/data/jenkins/apache-maven', 'mvnRemovePrefix': 'svn/target']

def antMap= ['antHome': 'data/jenkins/apache-ant', 'antRemovePrefix': 'svn/build']

def proMap= ['server': '', 'report': 'test_report', 'job': 'test_job'] //定义项目字典

def publisherMap = ['execCommand': '/data/.jenkins/pak/prePack.sh', 'submitCommand': '/data/.jenkins/pak/submitPack.sh', 'execTimeout': '120000', 'sourceFiles': ''] //定义发布脚本

def dingMap = ['accessToken': 'a9c9e4be299a52f5a9af1e7e5a1280ecd436bc2a16a409cb84a5b2f687362c6c', 'jenkinsUrl': 'http://10.15.22.14:8080/jenkins/']

try {

stage('增量代码获取') { //for display purposes//Get some code from a SubversionSCM repository

def moduleList = MODULE.split(",")echo "moduleList length: ${moduleList.length}"

for (int i = 0; i < moduleList.length ; i++) {sh label: '',

script:"sh ${publisherMap.execCommand} ${开始时间} ${结束时间} ${moduleList[i]}"}

}

stage('JAR包提交SVN') { //for display purposes

input '是否提交SVN'

sh label: '',

script:"sh ${publisherMap.submitCommand}"}

} finally {if (currentBuild.result == 'SUCCESS') {

dingTalk accessToken:"${dingMap.accessToken}",

imageUrl:'',

jenkinsUrl:"${dingMap.jenkinsUrl}",

message:'构建成功',

notifyPeople:''}else if (currentBuild.result == 'FAILURE') {

dingTalk accessToken:"${dingMap.accessToken}",

imageUrl:'',

jenkinsUrl:"${dingMap.jenkinsUrl}",

message:'构建失败',

notifyPeople:''}else{echo "currentBuild ......"}

}

}

后续扩展,目前增量源文件,目标文件都有保存下来,后续如需要实现生成增量代码覆盖率报告,更方便

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值