Как я могу получить измененные файлы в нескольких наборах изменений? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть git-репозиторий, содержащий несколько проектов, и я хочу запускать определенные сборки в зависимости от того, какие каталоги были изменены.Я использую следующий код для получения списка файлов и запуска дальнейших сборок:

echo("Number of change sets: " + currentBuild.changeSets.size()) //Always prints 1?

def changedFiles = currentBuild.changeSets
.collect{ it.getItems() }
.collect{ it.getAffectedPaths() }
.flatten()
echo("Changed files: ${changedFiles}")

def changedDirectories = changedFiles.collect {
    if(it.contains("$interestingDirectoryName")) { //Code cut for simplicity
        return it.split('/')[0]
    }
    return ""
}
.unique()
echo("Changed directories: ${changedDirectories}")

changedDirectories.each {
    if(!it.isEmpty()) {
        def buildTrigger = "${it}/${env.BRANCH_NAME}"
        echo("Triggering build for ${buildTrigger}")
        build(job: buildTrigger, wait: false)
    }
}

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

1 Ответ

0 голосов
/ 26 сентября 2019

Я пропустил flatten() после первого collect{}.

Изменение первого бита кода на следующее исправило его:

def changedFiles = currentBuild.changeSets
    .collect{ it.getItems() }
    .flatten() //Ensures that we look through each commit, not just the first.
    .collect{ it.getAffectedPaths() }
    .flatten()
    .toSet() //Ensures uniqueness.
echo("Changed files: ${changedFiles}")
...