Jenkins 2 Job:仅处理下载中更改的文件

时间:2018-09-05 09:30:54

标签: jenkins groovy

我有一个Jenkins 2 Pipeline作业,可以下载文件并执行一些处理。该作业会定期触发,因此有时下载的文件没有更改。

现在的问题是:如何检查文件是否从上次运行更改为停止并避免处理?另一个困难是,每次下载时文件名都会更改:-(

亲切的问候,基督徒

1 个答案:

答案 0 :(得分:0)

这是我的方法:

首先,计算CRC,将其保存在文件中并存档。在我的情况下,指纹识别不起作用,因为我想检查一个动态生成的zip文件,该zip文件始终具有不同的CRC。因此,我提取了我感兴趣的文件的CRC,并将它们存储在文件crc.txt中。在大多数情况下,这可能会过分杀人。

def currentCrc = readFile('crc.txt')
archiveArtifacts artifacts: 'crc.txt', fingerprint: true

然后,我使用crc.txt文件搜索最后一次成功的构建,并读取文件的内容:

// find last successful build
def lastSuccessfulBuild = currentBuild.getPreviousBuild()
while (lastSuccessfulBuild && (lastSuccessfulBuild.currentResult != 'SUCCESS')) {
    lastSuccessfulBuild = lastSuccessfulBuild.getPreviousBuild()
}

// and read the 'crc.txt' file of this build
def build = lastSuccessfulBuild?.getRawBuild()
def artifact = build.getArtifacts().find { it.fileName == 'crc.txt' }
def uri = build.artifactManager.root().child(artifact.relativePath).toURI()
def oldCrc = uri.toURL().text

最后,我比较了两个值(当前的crc和上一次成功构建的crc:

if (oldCrc != currentCrc) {
    println "*** Abort job, because file has not changed."
    return 
}