Ma connaissance du groovy ne va pas bien au-delà du peu que je connais sur Jenkinsfiles. J'essaie de comprendre s'il est possible d'avoir une carte définie dans un fichier Jenkins qui peut ensuite être appliquée de manière "pour la boucle".
J'ai ces variables:
mymap = {
"k1": "v1"
"k2": "v2"
"k3": "v3"
}
J'ai un stage
dans mon fichier Jenkins qui ressemble à ceci:
stage('Build Image') {
withCredentials([[<the credentials>]) {
sh "make build KEY={k1,k2,k3} VALUE='{v1,v2,v3}'"
}
Existe-t-il un moyen de faire un Build Image
étape pour chacun des appariements dans mymap
? Je n'ai pas eu de chance avec ce que j'ai essayé.
Il existe des exemples similaires soumis par les utilisateurs dans la documentation Jenkins.
Quelque chose comme ça devrait fonctionner:
def data = [
"k1": "v1",
"k2": "v2",
"k3": "v3",
]
// Create a compile job for each item in `data`
work = [:]
for (kv in mapToList(data)) {
work[kv[0]] = createCompileJob(kv[0], kv[1])
}
// Execute each compile job in parallel
parallel work
def createCompileJob(k, v) {
return {
stage("Build image ${k}") {
// Allocate a node and workspace
node {
// withCredentials, etc.
echo "sh make build KEY=${k} VALUE='${v}'"
}
}
}
}
// Required due to JENKINS-27421
@NonCPS
List<List<?>> mapToList(Map map) {
return map.collect { it ->
[it.key, it.value]
}
}
Vous pouvez parcourir une carte comme celle-ci:
def map = [Io: 1, Europa: 2, Ganymed: 3]
for (element in map) {
echo "${element.key} ${element.value}"
}
Je ne sais pas si un décompte dynamique des étapes est utile. Vous pourriez peut-être utiliser des nœuds parallèles, mais je ne sais pas si c'est possible.
Il existe un autre moyen simple pour analyser un objet json en un objet groovy - Analyse et production de JSON
import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText('{ "myList": [4, 8, 15, 16, 23, 42] }')
println(object.myList)
Depuis le 30 mai 2017, vous pouvez parcourir les cartes sans solution de contournement.
Vous devez mettre à niveau le plugin Pipeline: Groovy vers> = 2.33
Problème connexe: https://issues.jenkins-ci.org/browse/JENKINS-27421
Journal des modifications du plugin: https://plugins.jenkins.io/workflow-cps
mymap = {
"k1": "v1"
"k2": "v2"
"k3": "v3"
}
for(element in mymap) {
sh "make build KEY=${element.key} VALUE=${element.value}"
}