我的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插件,但无法执行此操作。
答案 0 :(得分: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)
}
}
}
我正在构建docker镜像。仅在一个巨大的monorepo中进行更改。