[英]Parse Data Using Jenkins Groovy Pipeline Script
我正在使用Groovy腳本中的httpRequest
從URL檢索JSON對象。
pipeline {
agent any
stages {
stage ('Extract Data') {
steps {
script {
def response = httpRequest \
authentication: 'user', \
httpMode: 'GET', \
url: "https://example.com/data"
writeFile file: 'output.json', text: response.content
def data = readFile(file: 'output.json')
def details = new groovy.json.JsonSlurperClassic().parseText(data)
echo "Data: ${details.fields.customfield}"
}
}
}
}
}
我對customfield
字符串感興趣。 字符串的格式為:
Application!01.01.01 TestSuite1,TestSuite2,TestSuite3,TestSuite4 Product!01.01.01,Product2!01.01.02
我想將字符串解析為3個數據集:
但是,我不確定如何執行此操作。 我可以在聲明式管道中使用任何Jenkins Groovy庫嗎?
編輯根據以下答案,我可以看到我可以通過以下方式制作地圖:
def applications = groups[0].split(',').collect { it.split('!') }.collectEntries { [(it):it] }
在示例中,我有:
application = [Application: Application]
我如何獲得:應用程序= [應用程序:01.01.01]
EDIT2請注意以下輸出:
def applications = groups[0].split(',').collect { it.split('!') }
[[Application, 01.01.01]]
據我所知,沒有一個庫具有解析數據的功能,但是,由於您知道數據的格式,因此很容易手動解析它們。
輸入中有3組( applications
, suites
, products
),由 字符。 要獲得組,您需要:
def input = "Application!01.01.01 TestSuite1,TestSuite2,TestSuite3,TestSuite4 Product!01.01.01,Product2!01.01.02"
def groups = input.split(' ')
要處理你需要拆分組0的應用程序,
字符(以防萬一有很多的應用程序)。 您會得到以下格式的成對列表: name!version
。 每對必須分開!
,因此您將獲得格式為[[name, version]]
的列表列表。 從最后的結構很容易創建地圖。 所有步驟合在一起:
def applications = groups[0].split(',').collect { it.split('!') }.collectEntries { [(it[0]):it[1]] }
獲取套件列表很容易,只需將第一個分組用,
字符分開:
def suites = groups[1].split(',')
最后,產品類似於應用程序列表,但是應該使用第二組:
def products = groups[2].split(',').collect { it.split('!') }.collectEntries { [(it[0]):it[1]] }
您可以使用管道實用程序步驟來簡化問題: readJSON
def data = readJSON(file: 'output.json')
echo data.fields.customfield
我找到了一種方法。 Groovy可以轉換一個Object數組的值,並使用toSpreadMap()
將它們轉換為一個映射。 但是,數組必須具有偶數個元素。
def appList = ['DevOpsApplication', '01.01.01']
def appMap = appList.toSpreadMap()
對於一些更好的答案,請參考此
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.