jenkins高级篇 pipeline 系列之-—09 实现自动打增量包
一、源起
目前核心系统各个模块开发,测试,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/ 这里找
- 用到三个构建参数:开始时间(输入框),结束时间(输入框),模块(多选框)
- 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 ......" } } }
后续扩展,目前增量源文件,目标文件都有保存下来,后续如需要实现生成增量代码覆盖率报告,更方便
【Quality】
Quality is the value to someone who matters。做测试,首先要找到这个someone是谁,以及这个 someone重视的 value是什么。