如何在Jenkins管道语法中对文件的最后修改时间使用`when`条件

时间:2018-11-17 14:54:33

标签: jenkins jenkins-pipeline

我正在创建Jenkins管道,我希望只有在启动特定的日志文件(日志文件位于将要运行所有阶段的服务器节点中)的上次修改日期才被更新时才触发特定阶段管道作业,我知道我们需要使用“何时”条件,但不确定如何实现它。

试图引用一些与管道相关的门户,但找不到答案

有人可以帮我吗?

谢谢!

1 个答案:

答案 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"
            }
        }
    }
}