Я хотел построить как json, как показано ниже, из сценария Jenkins Pipeline.
{
type:"create_instance",
order:{
"system_order_specs":{
"location":{ "name": "${params.LOCATION_NAME}" },
"zones":[
{
"$ESXI_TYPE":params.ESXI_COUNT,
"vlan":[
{
"type": "${params.VLAN_TYPE}",
},
{
"type": "${params.VLAN_TYPE}",
}
]
}
],
"create_dp_instance": false
}
}
}
Я испробовал следующий подход, предложенный в этом URL Создание строк JSON из переменных Groovy в Jenkins Pipeline
def data = [
type:"create_instance",
order:[
"system_order_specs":[
"environment_type":"PROD",
"location":[ "name": "${params.LOCATION_NAME}" ],
"zones":[
[
"$ESXI_TYPE":params.ESXI_COUNT,
"vlan":[ [
"type": "${params.VLAN_TYPE}",
] ]
]
],
"create_dp_instance": false
]
]
]
writeJSON(file: 'initial_temp.json', json: data)
Но это вызывает исключение, в котором говорится, что данные не в надлежащем формате.
Также пробовал простое эхо с использованием shell, но это создает JSON без двойных кавычек ""'.
Пример кода ниже:
sh `echo { \"type\":\"create_instance\", \"job_id\":$JOB_ID, \"order\":{ \"system_order_specs\": "123" } } > xyz.json`
Представленный ниже подход работает, но я уверен, что это не лучший ответ. Поэтому я ищу оптимальное решение для этого.
node{
def data = readJSON text: '{}'
def order = readJSON text: '{}'
def sys_order = readJSON text: '{}'
def location = readJSON text: '{}'
def vlan = readJSON text: '{}'
def zones = readJSON text: '{}'
data.type = "create_instance"
location.name = "${params.LOCATION_NAME}" as String
sys_order.environment_type = 'PROD'
sys_order.system_number = "${params.SYSTEM_NUMBER}" as String
sys_order.company = company
sys_order.location = location
zones["${params.ESXI_TYPE}"] = params.ESXI_COUNT
script {
if (params.VLAN_TYPE != 'nil') {
vlan.type = "${params.VLAN_TYPE}" as String
zones.vlan = [vlan]
}
}
sys_order.zones = [zones]
order.system_order_specs = sys_order
data.order = order
writeJSON(file: 'initial_temp.json', json: data)
}