我正在创建Jenkins管道,我希望只有在启动特定的日志文件(日志文件位于将要运行所有阶段的服务器节点中)的上次修改日期才被更新时才触发特定阶段管道作业,我知道我们需要使用“何时”条件,但不确定如何实现它。
试图引用一些与管道相关的门户,但找不到答案
有人可以帮我吗?
谢谢!
答案 0 :(得分:0)
在使用Groovy沙箱的情况下,在Jenkins管道中获取有关文件的数据非常棘手,因为您不允许执行new File(...).lastModified
。但是有findFiles
step,它基本上返回包装的File
对象的列表,该对象带有用于最后一次修改时间的吸气剂,以毫秒为单位,因此我们可以使用findFiles(glob: "...")[0].lastModified
。
返回的数组可能为空,因此我们宁愿对此进行检查(请参见下面的完整示例)。
可以通过currentBuild.currentBuild.startTimeInMillis
访问当前以毫秒为单位的构建开始时间。
现在我们将两者混为一谈,就可以在expression
中使用它们了:
pipeline {
agent any
stages {
stage("create file") {
steps {
touch "testfile.log"
}
}
stage("when file") {
when {
expression {
def files = findFiles(glob: "testfile.log")
files && files[0].lastModified < currentBuild.startTimeInMillis
}
}
steps {
echo "i ran"
}
}
}
}