Ich muss diese JSON-Datei in Groovy erstellen. __ Ich habe viele Dinge (JsonOutput.toJson()
/JsonSlurper.parseText()
) nicht erfolgreich versucht.
{
"attachments":[
{
"fallback":"New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
"pretext":"New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
"color":"#D00000",
"fields":[
{
"title":"Notes",
"value":"This is much easier than I thought it would be.",
"short":false
}
]
}
]
}
Dies ist für das Senden einer Jenkins-Build-Nachricht an Slack.
JSON ist ein Format, das zum Übertragen von Datenobjekten, die aus Attribut-Wert-Paaren und Array-Datentypen bestehen, einen von Menschen lesbaren Text verwendet. Im Allgemeinen ist Json ein formatierter Text.
Bei groovigen Json-Objekten handelt es sich lediglich um eine Folge von Karten/Arrays.
Parsing von Json mit JsonSlurperClassic
//use JsonSlurperClassic because it produces HashMap that could be serialized by pipeline
import groovy.json.JsonSlurperClassic
node{
def json = readFile(file:'message2.json')
def data = new JsonSlurperClassic().parseText(json)
echo "color: ${data.attachments[0].color}"
}
Parsing von Json mit Pipeline
node{
def data = readJSON file:'message2.json'
echo "color: ${data.attachments[0].color}"
}
Json aus Code erstellen und in Datei schreiben
import groovy.json.JsonOutput
node{
//to create json declare a sequence of maps/arrays in groovy
//here is the data according to your sample
def data = [
attachments:[
[
fallback: "New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
pretext : "New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
color : "#D00000",
fields :[
[
title: "Notes",
value: "This is much easier than I thought it would be.",
short: false
]
]
]
]
]
//two alternatives to write
//native pipeline step:
writeJSON(file: 'message1.json', json: data)
//but if writeJSON not supported by your version:
//convert maps/arrays to json formatted string
def json = JsonOutput.toJson(data)
//if you need pretty print (multiline) json
json = JsonOutput.prettyPrint(json)
//put string into the file:
writeFile(file:'message2.json', text: json)
}
Ich habe diese Frage gefunden, als ich versuchte, etwas zu tun (ich glaubte), dass es einfach sein sollte, aber von der anderen Antwort nicht angesprochen wurde. Wenn Sie den JSON-Code bereits als Zeichenfolge in eine Variable geladen haben, wie kann er in ein natives Objekt konvertiert werden? Natürlich könnte man new JsonSlurperClassic().parseText(json)
tun, wie die andere Antwort nahelegt, aber es gibt in Jenkins eine native Methode, dies zu tun:
node () {
def myJson = '{"version":"1.0.0"}';
def myObject = readJSON text: myJson;
echo myObject.version;
}
Hoffe das hilft jemandem.
Bearbeiten: Wie in den Kommentaren erläutert, ist "native" nicht ganz genau.
Wenn Sie bei einer Installation mit Sandboxen und dem Jenkins Script Security-Plugin feststecken und keine Möglichkeit zum Hinzufügen von Klassen/Methoden auf der Whitelist haben, habe ich nur die folgenden Möglichkeiten gefunden:
def slackSendOnRestrictedContext(params) {
if (params.attachments != null) {
// Soooo ugly but no other choice with restrictions of Jenkins Script Pipeline Security plugin ^^
def paramsAsJson = JsonOutput.toJson(params)
def paramsAsJsonFromReadJson = readJSON text: paramsAsJson
params.attachments = paramsAsJsonFromReadJson.attachments.toString()
}
slackSend (params)
}
Dies gibt den Wert der "Version" aus der JsonFile-Datei zurück:
def getVersion(jsonFile){
def fileContent = readFile "${jsonFile}"
Map jsonContent = (Map) new JsonSlurper().parseText(fileContent)
version = jsonContent.get("version")
return version
}