「Jenkins」- 获取自上次成功构建之后的变更

更新日期:2020年09月12日

问题描述

在 Jenkins Pipeline 中,通过 currentBuild.changeSets 变量,我们可以获取仓库文件的变更记录,比如哪些代码文件发生修改,并进行某些特定操作。

比如,文件 fileA.txt 发生变更时,我们将进行某些特殊测试操作。但是,该方案存在以下场景(问题):

(1)当文件fileA.txt发生变更时,我们将进行某些操作,但是由于环境配置错误而导致构建操作失败。
(2)当我们修改环境配置后,重新触发构建(手动触发或者其他方式)。
(3)此时,由于仓库并未变更,因此已经检测不到文件fileA.txt发生变更。因为变更属于上一次构建。

这就导致特定操作无法被触发。我们需要获取这些变更,这些自上次成功构建后的变更记录。

解决方案

第一步,通过 currentBuild.previousBuild 属性,可以获取上次构建。两者为同类型对象,即方法属性是相同的;
第二步,我们只需要找到所有失败的构建,并读取其中变更记录即可;

因此依据上述步骤,代码实现如下:

def build = currentBuild
while(build != null && build.result != "SUCCESS") {
	
	def changeSets = build.changeSets
	// doing some stuff
	
    build = build.previousBuild
}

附加说明

在绝大多数情况下,我们遇到的问题别人早已遇到过。我们之所以没有解决是因为我们没有“搜索”到解决方案。

参考文献

How to get the changes since the last successful build in jenkins pipeline?


ToC

问题描述

解决方案

附加说明

参考文献