Как сортировать и извлекать данные из JSON-ответа JFrog, используя groovy для конвейерной обработки Jenkins - PullRequest
0 голосов
/ 27 июня 2019

Я использую версию ОС JFrog Artifactory для своих операций с CI-CD, которые выполняются по конвейеру Jenkins. Я новичок в Groovy / Java API-интерфейсы REST ОС JFrog Artifactory не поддерживают извлечение последней сборки из репозитория. Когда был запущен конвейер Jenkins, мне было интересно, смогу ли я извлечь данные из ответа JSON, предоставленного Artifactory, используя встроенную поддержку Jenkins groovy (просто чтобы избежать внешнего сервиса, который можно запустить через python / Java / Shell).

Я хочу поместить извлеченный ответ JSON в карту, отсортировать карту в порядке убывания и извлечь первую пару ключ-значение, которая содержит последнюю информацию о сборке. Я получаю «-1» в качестве ответа, когда пытаюсь извлечь данные.

import groovy.json.JsonSlurper

def response = httpRequest authentication: 'ArtifactoryAPIKey', consoleLogResponseBody: false, contentType: 'TEXT_PLAIN', httpMode: 'POST', requestBody: '''
    items.find({
    "$and": [
        {"repo": {"$match": "libs-snapshot-local"}},
        {"name": {"$match": "simple-integration*.jar"}}
            ]
     })''', url: 'http://<my-ip-and-port-info>/artifactory/api/search/aql'

def jsonParser = new JsonSlurper()
Map jsonOutput = jsonParser.parseText(response.content)
List resultsInfo = jsonOutput['results']
print(resultInfo[0].created)

def sortedResult = resultInfo.sort( {a, b -> b["created"] <=> a["created"] } )
sortedResult.each { 
 println it
}

Пример JSON для анализа:

    {
"results" : [ {
  "repo" : "libs-snapshot-local",
  "path" : "simple-integration/2.5.150",
  "name" : "simple-integration-2.5.150.jar",
  "type" : "file",
  "size" : 1175,
  "created" : "2019-06-23T19:51:30.367+05:30",
  "created_by" : "admin",
  "modified" : "2019-06-23T19:51:30.364+05:30",
  "modified_by" : "admin",
  "updated" : "2019-06-23T19:51:30.368+05:30"
},{
  "repo" : "libs-snapshot-local",
  "path" : "simple-integration/2.5.140",
  "name" : "simple-integration-2.5.140.jar",
  "type" : "file",
  "size" : 1175,
  "created" : "2019-06-21T19:52:40.670+05:30",
  "created_by" : "admin",
  "modified" : "2019-06-21T19:52:40.659+05:30",
  "modified_by" : "admin",
  "updated" : "2019-06-21T19:52:40.671+05:30"
},{
  "repo" : "libs-snapshot-local",
  "path" : "simple-integration/2.5.150",
  "name" : "simple-integration-2.5.160.jar",
  "type" : "file",
  "size" : 1175,
  "created" : "2019-06-28T19:58:04.973+05:30",
  "created_by" : "admin",
  "modified" : "2019-06-28T19:58:04.970+05:30",
  "modified_by" : "admin",
  "updated" : "2019-06-28T19:58:04.973+05:30"
} ],
"range" : {
  "start_pos" : 0,
  "end_pos" : 3,
  "total" : 3
}
}






  //The output i am looking for: Latest build info with fields "created" and "name"

Ответы [ 3 ]

0 голосов
/ 28 июня 2019

Проблема здесь не в коде Groovy, а в конвейере Jenkins. Этот код является частью вопроса, а решение, предоставляемое @daggett, работает очаровательно в любой Groovy IDE, но не работает при запуске через конвейер jenkins.

URL-адрес проблемы: https://issues.jenkins -ci.org / browse / JENKINS-44924

Надеюсь, они скоро это исправят. Спасибо за вашу помощь, ребята.

0 голосов
/ 08 июля 2019

Вот ссылка на полное решение, над которым я работал.К вашему сведению, это может помочь кому-то https://github.com/AravinthR/Py-JFrog-Fetch-Build

0 голосов
/ 27 июня 2019
def jsonOutput = new groovy.json.JsonSlurper().parseText('''
{
"results" : [ {
  "repo" : "libs-snapshot-local",
  "path" : "simple-integration/2.5.150",
  "name" : "simple-integration-2.5.150.jar",
  "type" : "file",
  "size" : 1175,
  "created" : "2019-06-23T19:51:30.367+05:30",
  "created_by" : "admin",
  "modified" : "2019-06-23T19:51:30.364+05:30",
  "modified_by" : "admin",
  "updated" : "2019-06-23T19:51:30.368+05:30"
},{
  "repo" : "libs-snapshot-local",
  "path" : "simple-integration/2.5.140",
  "name" : "simple-integration-2.5.140.jar",
  "type" : "file",
  "size" : 1175,
  "created" : "2019-06-21T19:52:40.670+05:30",
  "created_by" : "admin",
  "modified" : "2019-06-21T19:52:40.659+05:30",
  "modified_by" : "admin",
  "updated" : "2019-06-21T19:52:40.671+05:30"
},{
  "repo" : "libs-snapshot-local",
  "path" : "simple-integration/2.5.150",
  "name" : "simple-integration-2.5.160.jar",
  "type" : "file",
  "size" : 1175,
  "created" : "2019-06-28T19:58:04.973+05:30",
  "created_by" : "admin",
  "modified" : "2019-06-28T19:58:04.970+05:30",
  "modified_by" : "admin",
  "updated" : "2019-06-28T19:58:04.973+05:30"
} ],
"range" : {
  "start_pos" : 0,
  "end_pos" : 3,
  "total" : 3
}
}
''')

def last = jsonOutput.results.sort{a, b -> b.created <=> a.created }[0]
println last.created
println last.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...