簡體   English   中英

使用Jenkins Groovy管道腳本解析數據

[英]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個數據集:

  1. 應用程序圖[應用程序:版本](總會有一個Appliction)
  2. TestSuite列表[TestSuite1,...,TestSuite]
  3. 產品地圖[產品1:版本,...,產品N:版本]。

但是,我不確定如何執行此操作。 我可以在聲明式管道中使用任何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組( applicationssuitesproducts ),由 字符。 要獲得組,您需要:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM