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  ......"
            }
        }
    }

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

posted @ 2020-01-17 17:55  雨 燕  阅读(3024)  评论(1编辑  收藏  举报