Декларативный конвейер jenkins игнорирует журнал изменений jenkinsfiles

У меня есть приложения и их коды в репозиториях git. Также jenkinsfiles для создания приложений и этих файлов в другом репозитории. Проблема в том, что Дженкинс создает журнал изменений. Дженкинс добавляет журнал изменений jenkinsfiles для создания наборов изменений, и я этого не хочу. Поскольку эти изменения связаны с инфраструктурой, они не имеют отношения к приложениям. Как предотвратить это? Я не нашел обходного пути или решения.


person aluz    schedule 17.04.2020    source источник


Ответы (1)


Если я правильно понял ваш вопрос... Я не думаю, что вы можете удалить изменения Jenkinsfile из набора изменений, который Jenkins читает из git, но вместо этого вы можете пропустить свой конвейер для сборки, если в Jenkinsfile есть только изменения.

Если это поможет... Во-первых, вам нужно прочитать набор изменений:

    def changedFiles = []
    for (changeLogSet in currentBuild.changeSets) { 
        for (entry in changeLogSet.getItems()) { 
            for (file in entry.getAffectedFiles()) {
                changedFiles.add(file.getPath())
            }
        }
    }

Затем вы можете проверить, является ли это только Jenkinsfile:

if (changedFiles.size() == 1 && changedFiles[0] == "Jenkinsfile"){
    println "Only Jenkinsfile has changed... Skipping build..."
    currentBuild.getRawBuild().getExecutor().interrupt(Result.SUCCESS) // this skips your build prematurely and makes the rest of the stages green
    sleep(1) // you just need this
}else{
    println "There are other changes rather than only Jenkinsfile, build will proceed."
}

P.S. У вас есть несколько способов завершить задания раньше без сбоя сборки, но этот, по моему опыту, самый чистый, даже несмотря на то, что вам нужно разрешить некоторые разрешения подписи администратора для Jenkins (я видел это в другой ветке здесь некоторое время назад, правда сейчас не найду)

person nandilov    schedule 24.04.2020
comment
Ваш ответ ясен. Можем ли мы внести некоторые изменения, подобные этим, в первом коде, если changeLogSet включает только JenkinsFile, удалите этот changeLogSet из buildChangeset. Затем ваш второй блок кода changeSet.size == 0 прерывает сборку. - person aluz; 26.04.2020