Pour une exploitation forestière d'état interne dans mon pipeline jenkins J'ai créé une « carte de modèle que je veux faire usage en plusieurs étapes qui sont en cours d'exécution indépendamment en parallèleComment créer plusieurs instances d'une carte de modèle dans groovy
def status= [
a : '',
b: [
b1: '',
b2: '',
b3: ''
],
c: [
c1: '',
c2 : ''
]
]
ce modèle de statut que je veux transmettre à plusieurs fonctions fonctionnant en parallèle/exécuteurs. A l'intérieur des branches parallèles que je veux modifier le statut indépendamment. Voir l'exemple minimale suivante
def status= [
a : '',
b: [
b1: '',
b2: '',
b3: ''
],
c: [
c1: '',
c2 : ''
]
]
def label1 = "windows"
def label2 = ''
parallel firstBranch: {
run_node(label1, status)
}, secondBranch: {
run_node(label2, status)
},
failFast: true|false
def run_node (label, status){
node(label) {
status.b.b1 = env.NODE_NAME +"_"+ env.EXECUTOR_NUMBER
sleep(1)
echo "env.NODE_NAME_env.EXECUTOR_NUMBER: ${status.b.b1}"
// expected: env.NODE_NAME_env.EXECUTOR_NUMBER
this.a_function(status)
echo "env.NODE_NAME_env.EXECUTOR_NUMBER: ${status.b.b1}"
// expected(still): env.NODE_NAME_env.EXECUTOR_NUMBER (off current node)
// is: env.NODE_NAME_env.EXECUTOR_NUMBERmore Info AND probably from the wrong node
}
}
def a_function(status){
status.b.b1 += "more Info"
echo "env.NODE_NAME_env.EXECUTOR_NUMBERmore Info: ${status.b.b1}"
// expected: env.NODE_NAME_env.EXECUTOR_NUMBERmore Info
sleep(0.5)
echo "env.NODE_NAME_env.EXECUTOR_NUMBERmore Info: ${status.b.b1}"
// expected: env.NODE_NAME_env.EXECUTOR_NUMBERmore Info
}
qui se traduit par
[firstBranch] env.NODE_NAME_env.EXECUTOR_NUMBER: LR-Z4933-39110bdb_0
[firstBranch] env.NODE_NAME_env.EXECUTOR_NUMBERmore Info: LR-Z4933-39110bdb_0more Infos
[firstBranch] env. NODE_NAME_env.EXECUTOR_NUMBER> plus d'info: LR-Z4933-39110bdb_0more Infos
[firstBranch] env.NODE_NAME_env.EXECUTOR_NUMBER: LR-Z4933-39110bdb_0more Infos
[secondBranch] env.NODE_NAME_env.EXECUTOR_NUMBER: LR-Z4933-39110bdb_0more Infos
[secondBranch] env.NODE_NAME_env.EXECUTOR_NUMBERmore Info: LR-Z4933-39110bdb_0more Infomore Infos
[secondBranch] env. NODE_NAME_env.EXECUTOR_NUMBERmore info: LR-Z4933-39110bdb_0more Infomore Infos
[secondBranch] env.NODE_NAME_env.EXECUTOR_NUMBER: LR-Z4933-39110bdb_0more Infomore Infos
Notez que dans l'état dans la première branche est remplacé par la deuxième branche et l'inverse.
Comment réaliser des variables d'état indépendantes lors du passage thm en tant que paramètre aux fonctions
Le pipeline jenkins est généré automatiquement à partir d'un fichier de configuration. il n'est donc pas possible de dire à l'avance combien d'instances du statut sont nécessaires. Dans un pipeline configuré, il peut y avoir plusieurs nœuds parallèles avec potentiellement plusieurs étages parallèles chacun. cela signifie qu'il y aura plusieurs clones du statut - un pour chaque nœud utilisé (en parallèle) pendant l'exécution du pipeline - clones du statut cloné (nœud) pour chaque étape – Ditschi