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

Я использую многоотраслевой конвейер, и мне нужно получить список измененных файлов.

Я пытался

git diff $PREVIOUS_COMMIT $COMMIT

, но они имеют одинаковый SHA.

Ответы [ 3 ]

0 голосов
/ 20 мая 2018

Согласно этой статье в CloudBees , вы можете получить доступ к такой информации внутри конвейера также без белого списка (используя безопасность песочницы / скрипта, по сравнению с моим другим ответом), начиная с workflow-Плагин поддержки версия 2.2:

def changeLogSets = currentBuild.changeSets
for (int i = 0; i < changeLogSets.size(); i++) {
    def entries = changeLogSets[i].items
    for (int j = 0; j < entries.length; j++) {
        def entry = entries[j]
        echo "${entry.commitId} by ${entry.author} on ${new Date(entry.timestamp)}: ${entry.msg}"
        def files = new ArrayList(entry.affectedFiles)
        for (int k = 0; k < files.size(); k++) {
            def file = files[k]
            echo "  ${file.editType.name} ${file.path}"
        }
    }
}
0 голосов
/ 02 сентября 2018

Ссылочная ссылка: https://support.cloudbees.com/hc/en-us/articles/217630098

FYI: API поддержки конвейера, плагин 2.2 или выше

Вы можете использовать currentBuild.changeSets в изолированной сборке, как вы могли видеть в следующем примере Git:

def changeLogSets = currentBuild.changeSets
for (int i = 0; i < changeLogSets.size(); i++) {
    def entries = changeLogSets[i].items
    for (int j = 0; j < entries.length; j++) {
        def entry = entries[j]
        echo "${entry.commitId} by ${entry.author} on ${new Date(entry.timestamp)}: ${entry.msg}"
        def files = new ArrayList(entry.affectedFiles)
        for (int k = 0; k < files.size(); k++) {
            def file = files[k]
            echo "  ${file.editType.name} ${file.path}"
        }
    }
}

API поддержки конвейера Плагин старше 2.2

Вы можете использовать currentBuild.rawBuild.changeSets, но это не доступно из песочницы.Ниже приведен пример Git для сборки без песочницы:

def changeLogSets = currentBuild.rawBuild.changeSets
for (int i = 0; i < changeLogSets.size(); i++) {
    def entries = changeLogSets[i].items
    for (int j = 0; j < entries.length; j++) {
        def entry = entries[j]
        echo "${entry.commitId} by ${entry.author} on ${new Date(entry.timestamp)}: ${entry.msg}"
        def files = new ArrayList(entry.affectedFiles)
        for (int k = 0; k < files.size(); k++) {
            def file = files[k]
            echo "  ${file.editType.name} ${file.path}"
        }
    }
}
0 голосов
/ 20 мая 2018

Вы можете получить доступ к такой информации (после внесения в белый список вызовов API) через переменную currentBuild:

currentBuild.rawBuild.getChangeSets().each { cs ->
  cs.getItems().each { item ->
    item.getAffectedFiles().each { f ->
      println f
    }
  }
}

Не проверено мной (но имеет смысл).Источник: Суть Исьостроа .

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