Вот как я это сделал:
Сначала вычислите CRC, сохраните его в файл и заархивируйте. Отпечатки пальцев не будут работать в моем случае, потому что я хочу проверить 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
}