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

     后續擴展,目前增量源文件,目標文件都有保存下來,后續如需要實現生成增量代碼覆蓋率報告,更方便


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM