Jenkins 2 Job: обрабатывать только измененные файлы из загрузки - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть задание Jenkins 2 Pipeline, которое загружает файл и выполняет некоторые обработки. Задание запускается периодически, поэтому иногда загруженный файл не изменяется.

Вопрос теперь: как я могу проверить, изменился ли файл с последнего запуска, чтобы остановить и избежать обработки? В качестве дополнительной трудности имя файла меняется при каждой загрузке: - (

С уважением, Кристиан

1 Ответ

0 голосов
/ 14 сентября 2018

Вот как я это сделал:

Сначала вычислите 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 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...