Конвейер Jenkinsfile создает объект JSON и записывает в файл - PullRequest
0 голосов
/ 16 ноября 2018

Я хотел бы создать объект JSON и записать содержимое в файл.

Изначально я был вдохновлен this и попытался:

def data = [
        a:"test: ${myVar}"
    ]
    writeJSON(file: 'message1.json', json: data)

Но этоСбой:

Не удалось создать экземпляр {file = message1.json, json = {a = test}} для WriteJSONStep (файл: String, json: JSON {}, pretty ?: int): java.lang.UnsupportedOperationException: необходимо указать класс $ с реализацией интерфейса net.sf.json.JSON

Итак, я попытался:

def data = readJSON text: '{}'
data.a = "test: ${myVar}"
writeJSON(file: 'message1.json', json: data, pretty: 4)

Теперь сборка проходит, носодержимое файла выглядит следующим образом:

{
     "a":     {

        "bytes":         [

            114,

            101,

            108,

            101,

            97,

            115,

            101

            50

        ],

        "strings":         [

            "test: ",

            ""

        ],

        "valueCount": 1,

        "values": ["v1.0.2"]

    }
}

В то время как мое намерение было {"a": "test: v1.0.2"}

Моя конечная цель состоит в том, чтобы я хотел динамически построить объект JSON, установить некоторые свойства с некоторыми динамическимиданные, а затем запишите файл JSON.

Существует ли некоторый синтаксис, который можно использовать для назначения значений в виде строк, а не в виде байтов.

1 Ответ

0 голосов
/ 16 ноября 2018

Похоже, одним из решений этого является изменение кода, добавляемого на карту, для указания as String:

def data = readJSON text: '{}'
data.a = "test: ${myVar}" as String
writeJSON(file: 'message1.json', json: data, pretty: 4)
...