[英]Jenkins Multibranch Pipeline check only the new or changed files pushed to GIT
我们正在使用一种工具,其中所有元素都通过 .json 编写。
目前我的 GIT 文件夹结构如下所示:
元素文件夹-> element1.json、element2.json、element3.json
脚本文件夹 -> 例如transformation.py
测试文件夹-> run-element.sh
詹金斯文件
我现在遇到的问题是,应使用 testfolder 中的 bashscript 测试文件夹 elementsfolder 中的 .json 文件,并且(如有必要)应调用像 transformations.py 这样的脚本。 到目前为止,这也有效,但始终测试所有 .json 文件(无论是否未更改)。 但事实并非如此。 仅应测试已更改或新创建的元素。 一天结束时,我们有超过 6000 个元素,因此,对所有元素的测试成本太高。 谁能帮我这个? 在 Jenkins 中,管道看起来像这样(我只发布阶段构建,因为测试和部署是相似的):
stages {
stage('Build') {
environment {
CREDS = credentials('creds')
ENDPOINT = 'automation-api'
}
steps {
sh '''
username=$USR
password=$PSW
# Login curl
login=$(curl -k -s -H "Content-Type: application/json" -X POST -d \\{\\"username\\":\\"$username\\",\\"password\\":\\"$password\\"\\} "$ENDPOINT/session/login" )
token=$(echo ${login##*token\\" : \\"} | cut -d '"' -f 1)
# Build
#1. Validation .json
curl -k -s -H "Authorization: Bearer $token" -X POST -F "definitionsFile=@element/*.json" "$ENDPOINT/build"
#2. Show Error
curl --show-error --fail -k -s -H "Authorization: Bearer $token" -X POST -F "definitionsFile=@element/*.json" "$ENDPOINT/build"
#3. Logout
curl -k -s -H "Authorization: Bearer $token" -X POST "$ENDPOINT/session/logout"
'''
}
}
如果您从 SCM 签出,Jenkins 将允许您检查上次构建和当前构建之间的变更集。 所以基本上你可以先尝试找到真正改变的文件,然后只使用那些文件。 请参考以下示例。 获得更改的文件列表后,您可以将它们移动到新目录或从elementsfolder
中删除未更改的文件。 以下示例getFilesChanged
将返回 repo 中所有更改/添加的文件的列表。 您可能需要调整此功能以符合您的要求。
pipeline {
agent any
stages {
stage('clone') {
steps {
git branch: 'main', url: 'https://github.com/xxx/sample.git'
}
}
stage('build') {
steps {
script {
println(getFilesChanged())
// Do your cleanup here and then execute the SH block
}
}
}
}
}
def getFilesChanged() {
def filesList = []
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]
def files = new ArrayList(entry.affectedFiles)
for (int k = 0; k < files.size(); k++) {
def file = files[k]
filesList.add(file.path)
}
}
}
return filesList
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.