zoukankan      html  css  js  c++  java
  • 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/ 这里找
    • 用到三个构建参数:开始时间(输入框),结束时间(输入框),模块(多选框)

      

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

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

  • 相关阅读:
    jquery键盘事件
    如何将奇艺、优酷等平台的视频嵌入到项目中
    ubuntu 10.04 常用 设置
    博客风格收集
    多张图片上传预览
    动态计算输入框字符个数
    Ubuntu Linux下设置IP的配置命令
    js事件浏览器兼容
    开源软件下载站
    PHPstrom的一个小技巧
  • 原文地址:https://www.cnblogs.com/liuyitan/p/12191516.html
Copyright © 2011-2022 走看看