--------------------------------------------------------------------
本文參考多篇文章結合自身情況完成,可自由轉載,需保留本文出處!
博主: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'
)
}
