[英]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.