jenkins2pipeline中使用groovy語言獲取最新修改里的文件


--------------------------------------------------------------------

本文參考多篇文章結合自身情況完成,可自由轉載,需保留本文出處!

博主:ElevenHeart

http://www.cnblogs.com/elevenheart/p/7216587.html                    

--------------------------------------------------------------------

備注:
env.BRANCH_NAME 分支名
env.JOB_NAME 工程名
env.BUILD_NUMBER 構建次數
env.BUILD_URL 構建網址
 
node {
   //  checkout()      用來讀取源碼,若已配置了源碼鏈接則不需要寫,若要添加,則再()里加上代碼鏈接,具體格式可查看:

 

     checkChange()
 
}
 
@NonCPS
def void checkChange() {
def changeLogSets = currentBuild.rawBuild.changeSets    /*currentBuild.rawBuild.changeSets表示獲取最新修改里的內容*/
def flag = false
def strChange = "以下文件發生了變化:\n"
for (int i = 0; i < changeLogSets.size(); i++) {
         def entries = changeLogSets[i].items
         for (int j = 0; j < entries.length; j++) {
                    def entry = entries[j]
                    def files = new ArrayList(entry.affectedFiles)
                    for (int k = 0; k < files.size(); k++) {
                               def file = files[k]
                               echo "strChange + ${file.editType.name} ${file.path}\n"                     
                                }
                      }
             }
 }
 
//以上可獲取每次構建后最新修改里的所有文件 
 
若想從最新修改里選擇出某些特定文件,並加已郵件報警則請查看下面的代碼:
 
import java.util.regex.*
 
node { 
   //    checkout()
      checkChange()
}
 
@NonCPS
def void checkChange() {
def changeLogSets = currentBuild.rawBuild.changeSets
def flag = false
def strChange = "以下文件發生了變化:\n"
for (int i = 0; i < changeLogSets.size(); i++) {
           def entries = changeLogSets[i].items
           for (int j = 0; j < entries.length; j++) {
                      def entry = entries[j]
                      def files = new ArrayList(entry.affectedFiles)
                      for (int k = 0; k < files.size(); k++) {
                                 def file = files[k]
                                 Pattern p = Pattern.compile("/想要匹配的正則表達式/")
                                 Matcher m = p.matcher("${file.path}")
                                 if (m.find()) {                                                                               /*若不需要正則表達式匹配,則可直接使用  if (file.path.contains('/xxx/xxx/xxxxx'))*/
                                            flag = true
                                            strChange += "${file.editType.name} ${file.path}\n"
                                 }
                    }
           }
}
if (flag == true) {
          notifySCMChanged(strChange)
       }
}
 
def notifySCMChanged(def files) {
                emailext(
                            subject: '某些文件發生變化',
                            body: """${files}
查看文件變化: ${env.BUILD_URL}changes
""",
                            to: 'XXX@xxxxx.com'
              )
}
 


免責聲明!

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



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