LINUX.ORG.RU

Извлечь из стринга пары ключ-значение

 ,


0

1

Скрипт на Groovy вызывает внешнюю функцию, которая берёт с сервера набор данных в виде пар ключ-значение и возвращает их скрипту в виде такого многострочного стринга:

{
  "TEST_NAME" : "test1",
  "SUCCESS" : "False"
}

Как из неё проще всего извлечь данные? Пока нужно только проверить условие SUCCESS = True, но в дальнейшем может понадобиться что-то более сложное. В идеале требуется простой способ превратить такой стринг в Map, не требующий внешних библиотек. Парсить регулярными выражениями? Или есть более простые способы?

Если интересны подробности, это потребовалось для взаимодействия Дженкинса с ActiveMQ. Груви начал изучать только вчера. Так как скрипты выполняются с кучей ограничений, не думаю, что позволит импортировать groovy.json.JsonBuilder/JsonSlurper.

Ответ: позволил :)

import groovy.json.JsonSlurper

node {
    stage('Start process') {
        sendCIMessage failOnError: true, 
            messageContent: '', 
            messageProperties: '', 
            messageType: 'Custom', 
            overrides: [], 
            providerName: 'Sender'
    }
    stage('Get answer') {
            def messageContent = 
                waitForCIMessage checks: [], 
                    providerName: 'Receiver', 
                    selector: 'TEST_NAME = test1'
                    timeout: 1
            echo messageContent
            def jsonSlurper = new JsonSlurper()
            def map = jsonSlurper.parseText( messageContent )
            if (map.SUCCESS == 'True')
                print 'succeeded'
            else if (map.SUCCESS == 'False')
                print 'failed'
            else 
                print 'wrong answer'            
    }
}
★★★

Последнее исправление: olegd (всего исправлений: 1)

Это же просто json. https://groovy-lang.org/json.html

Если это дженкинсфайл, тебе придется потанцевать с @NonCPS, но это уже и нагуглить можно.

Или поставь плагин: https://stackoverflow.com/questions/55174084/parsing-json-on-jenkins-pipeline-groovy

cdshines ★★★★★
()
Последнее исправление: cdshines (всего исправлений: 1)
Ответ на: комментарий от olegd

С редкими исключениями на практике можешь еще поставить этот плагин: https://plugins.jenkins.io/script-security/, и писать вообще, что хочешь. Появится UI по адресу Manage Jenkins -> In-process Script Approval, там будет список вызовов методов, которые по дефолту запрещены (например, я пользовался методами типа Paths.get etc). Сможешь руками разрешать вызовы нужных тебе сигнатур и вуаля. Но на самом деле, я бы просто писал большинство логики на питоне и вызывал скрипты через sh.

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

Требуется всё делать максимально кроссплатформенно, то есть с минимумом вызовов bat и sh. sh под Windows Server не работает, несмотря на установленную WSL.

olegd ★★★
() автор топика
Ответ на: комментарий от olegd

sh под Windows Server не работает, несмотря на установленную WSL.

А почему бы не поставить нативный баш и остальное?

anonymous
()
Ответ на: комментарий от anonymous

Проблема не в баше а в nohup. Почему-то не работает. Поэтому всё лучше делать средствами Дженкинса.

olegd ★★★
() автор топика
Ответ на: комментарий от olegd

Не хочу наезжать, но тебе бы матчасть подтянуть. Если юзаешь винду, то как работает wsl например надо понимать.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.