2013-07-11 13 views
9

Ho usato Jenkins per alcune settimane e ho un piccolo problema. Non riesco a trovare alcun plug-in o soluzione per archiviare l'ultimo valore di un parametro in un lavoro parametrizzato come valore predefinito per la build successiva.Come memorizzare l'ultimo valore del parametro nel lavoro parametrizzato come valore predefinito per la prossima build in Jenkins?

Ad esempio: Il mio parametro utilizza la versione build (1.0.0.01) nella prima build. Nella build successiva verrà modificato in 1.0.0.02, ma voglio avere un 1.0.0.01 nel campo del valore predefinito come suggerimento. Qualcuno ha una soluzione o un consiglio?

risposta

9

È possibile aggiungere un passaggio di sistema Groovy al lavoro (o magari un passaggio Groovy di generazione post) utilizzando l'API Jenkins per modificare direttamente il progetto impostando il valore del parametro predefinito.

Ecco po 'di codice che possono essere utili per iniziare:

import hudson.model.* 

paramsDef = build.getParent().getProperty(ParametersDefinitionProperty.class) 
if (paramsDef) { 
    paramsDef.parameterDefinitions.each{ param -> 
    if (param.name == 'FOO') { 
     println("Changing parameter ${param.name} default value was '${param.defaultValue}' to '${param.defaultValue} BAR'") 
     param.defaultValue = "${param.defaultValue} BAR" 
    } 
    } 
} 

Dai un'occhiata alla classe ParameterDefinition nel modello Jenkins.

Probabilmente è necessario modificare il valore param predefinito in base all'esecuzione corrente della build. Alcuni codice per ottenere che sarebbe simile a questa:

def thisBuildParamValue = build.buildVariableResolver.resolve('FOO') 
+1

Grazie mille. –

+1

Grazie per questo esempio di codice. Il problema è che il nuovo valore non viene memorizzato tra riavvii di jenkins. Finché jenkins non viene riavviato, il valore predefinito verrà modificato e quello nuovo verrà utilizzato nella prossima build. Ma se jenkins viene riavviato, il valore predefinito tornerà all'ultimo valore aggiunto manualmente. È possibile rendere questo nuovo valore "hard memorizzato"? – harsmar

1

Il plugin Extended Choice Parameter fornisce questa funzionalità utilizzando i valori di default dei parametri da un file di proprietà. Un parametro predefinito può essere selezionato da una chiave di proprietà specificata e questa chiave può essere modificata a livello di programmazione nella build corrente. Vorrei quindi utilizzare uno script groovy nella build corrente per impostare il valore della chiave di proprietà predefinita per la build successiva.

A titolo di esempio si avrebbe un estesa Scelta parametro il cui valore di default è definito da un file di proprietà version.properties con i tasti come segue:

versions=1.0.0.02, 1.0.0.01, 1.0.0.00 
default.version=1.0.0.02 

La definizione dei parametri dovrebbe includere:

Property File=version.properties  
Property Key=versions 
Default Property File=version.properties 
Default Property Key=default.versions 

La GUI per il parametro nella build successiva mostrerà un elenco di selezione con 1.0.0.02 selezionato per impostazione predefinita. Questa funzione è anche molto utile per le build di pipeline in cui si desidera che i parametri di una fase di generazione downstream siano impostati da una build precedente.

L'unico inconveniente di questo approccio potrebbe essere che l'IU del parametro sarà una selezione a discesa. Puoi scegliere di avere un singolo valore nella chiave delle proprietà delle versioni in modo da non confondere gli utenti.

6

Il Persistent Parameter Plugin è esattamente quello che stai cercando!

Hai solo bisogno di scaricarlo dal repository Jenkins ufficiale e installarlo, senza bisogno di alcuna configurazione aggiuntiva.

Quindi sul lavoro, è sufficiente aggiungere un "Parametro persistente" per poter utilizzare e salvare i valori predefiniti tra le build.

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/13216452) –

+0

Questo commento e il voto negativo non ha alcun senso perché la soluzione è un plugin Jenkins scaricabile, non c'è modo di "includere le parti essenziali" della risposta "qui ... – thiagolr

+0

Ha senso perché puoi scrivere più informazioni su questo plugin: come usarlo, alcuni esempi, ecc. Ad esempio, non ho idea di cosa sia e questo link non aiuterebbe molto se posso impostare correttamente. :) –

Problemi correlati