Lo script non sta iterando attraverso tutti i valori dell'array 'modules'.Groovy .each esegue solo iterazioni una sola volta
class Module {
public String name = '';
public Boolean isCustom = false;
public Module(String name, Boolean custom){
this.name = name;
this.isCustom = custom;
}
}
//creates array from the ext_module env var
modules = [];
EXT_MODULE.split(',').each {
modules.add(new Module(it, false));
}
println modules;
modules.each {
println "MODULE NAME ::::: ${it.name}"
if(it.isCustom)
{
println "install custom";
} else {
println "install non custom";
}
};
Questo è il risultato della corsa. L'array mostra 4 elementi, ma il codice all'interno di .each black viene eseguito solo una volta.
Esecuzione: Stampa Messaggio [Modulo @ 71f09325, modulo @ e1ddb41, modulo @ 7069a674, modulo @ 1f68f952]
Esecuzione: Stampa Messaggio Nome modulo ::::: puppetlabs-NTP
Esecuzione: Stampa Messaggio installazione non personalizzato
Esecuzione: Fine del flusso di lavoro
finito: SUCCESSO
Questo sembra essere un problema specifico Jenkins DSL. Per qualsiasi motivo funzioni, se si modifica modules.each => for (module in modules), qualcuno può dirmi perché? –
proprio così: 'def modules = EXT_MODULE.split (','). Collect {new Module (it, false)}'. ogni volta che usi 'each' per creare collezioni, un gattino muore. il fatto che non ci sia 'def' è ok con jenkins (-scriptler); non stai scherzando con qualche stato globale qui? – cfrick
La mia ipotesi è che ci sia un qualche tipo di chiusura globale che è influenzata da .each e sta rovinando il processo di costruzione di Jenkins –