Развернуть функции на основе измененных файлов в коммите Jenkinsfile
У меня есть много функций в моем хранилище Bitbucket и один Jenkinsfile для запуска одного задания для развертывания этих функций Python. Мне нужно развернуть функции на основе измененных файлов в хранилище. Структура моего репо такая:
-- functions
-- func1
-- app.py
-- func2.py
-- app.py
-- fun3.py
-- app.py
То, что я хочу сделать, это: когда я изменяю какую-то функцию, разверните только эту функцию, а не другие. Поэтому, когда я фиксирую изменение, мне нужно найти измененный файл и развернуть соответствующую функцию. Внутри jenkinsfile я сделал что-то вроде этого:
sh '''
last_commit=$(git describe --always)
access_token=$(cat BITBUCKET_TOKEN)
changed_file=$(curl https://api.bitbucket.org/1.0/repositories/account/reponame/changesets/$last_commit?access_token=$access_token | jq -r .files[].file)
echo $changed_file > CHANGED_FILE
'''
CHANGED_FILE = readFile 'CHANGED_FILE'
if (CHANGED_FILE.contains('functions/func1')) {
// instructions ...
}
CHANGED_FILE = readFile 'CHANGED_FILE'
if (CHANGED_FILE.contains('functions/func2')) {
// instructions ...
}
Здесь я получаю только последний коммит и получаю из него только один измененный файл. Я хочу знать, какую логику использовать для обработки множества коммитов со многими измененными файлами? Я пытался использовать плагин Webhook, но он не может этого сделать.
1 ответ
Вы можете запустить что-то вроде этого (извините за мой плохой Groovy):
def changeLogSets = this.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]
def files = new ArrayList(entry.affectedFiles)
for (int k = 0; k < files.size(); k++) {
def file = files[k]
this.deployFunction(file.path)
}
}
}
Я работаю над созданием образов докеров. Для изменений только в одном огромном монорепо.