如何在Jenkins的when{}块外使用changeset条件并赋值给全局变量
在Jenkins流水线when{}块外使用changeset条件获取布尔值
问题场景
想要在Jenkins流水线的when{}块外,利用内置的changeset条件判断变更文件,并将结果存入全局变量。
常规在when块内的用法:
when { changeset "**/pom.xml" }
但直接赋值给变量时,得到的并非预期的布尔值:
GLOBAL_BOOLEAN = changeset "**/pom.xml"
打印变量结果:
println(GLOBAL_BOOLEAN) @changeset(<anonymous>=**/pom.xml)
查看变量类型:
println(GLOBAL_BOOLEAN.getClass().toString() ) class org.jenkinsci.plugins.workflow.cps.UninstantiatedDescribableWithInterpolation
询问是否有办法在when{}块外使用这类内置条件函数。
解决方案
可以通过以下两种方式实现需求:
方法1:调用条件对象的matches方法
直接赋值得到的是未实例化的条件对象,通过调用它的matches方法并传入当前构建上下文,就能获取布尔结果:
def changesetCondition = changeset "**/pom.xml" GLOBAL_BOOLEAN = changesetCondition.matches(currentBuild, null) println(GLOBAL_BOOLEAN) // 输出true或false
这种方式完全复用Jenkins内置的changeset路径匹配逻辑,和when块内的判断规则一致。
方法2:手动解析当前构建的变更集
如果需要自定义判断逻辑,可以直接遍历当前构建的变更文件:
GLOBAL_BOOLEAN = currentBuild.changeSets.any { changeSet -> changeSet.items.any { item -> item.affectedFiles.any { file -> // 这里用正则匹配路径,可替换为你需要的规则 file.path ==~ /.*pom.xml$/ } } } println(GLOBAL_BOOLEAN)
内容的提问来源于stack exchange,提问作者Achiral
相关产品推荐
相关产品推荐

