Jenkinsfile - синхронизация по времени (cron), только если обнаружены изменения - PullRequest
0 голосов
/ 24 марта 2020

У меня есть Jenkinsfile.

Я хотел бы сделать ночную сборку (скажем, в полночь), но только если изменения были обнаружены со времени предыдущей сборки.

Как бы я это сделал? sh это?

1 Ответ

0 голосов
/ 25 марта 2020

Вы можете использовать:

pipeline {
    agent any
    triggers {
        pollSCM('H */4 * * 1-5')
    }
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

Согласно документации Jenkins, pollSCM делает следующее:

Принимает строку в стиле cron для определения регулярного интервала в который Дженкинс должен проверить для новых изменений источника. Если новые изменения существуют, конвейер будет повторно запущен.

Существует более сложный способ выполнения sh такого же поведения (просто альтернатива pollSCM), то есть установка нормального cron :

triggers {
    cron('H */4 * * 1-5')
}

И затем проверка на наличие изменений с помощью переменных среды:

stage('Example') {
    when {
       expression {
           !env.currentBuild.changeSets.isEmpty()
       }
    }
    steps {
        echo 'Hello World'
    }
}

Также для документов, env.currentBuild.changeSets:

Это список наборов изменений, поступающих от отдельных проверок SCM; у каждого есть вид и список коммитов; каждый коммит имеет commitId, timestamp, msg, author и disabledFiles, каждый из которых имеет editType и путь; значение обычно не будет сериализуемым, поэтому вы можете получить к нему доступ только внутри метода, помеченного @ NonCPS

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...