2013-07-11 10 views
9

Ich benutze Jenkins seit ein paar Wochen und ich habe ein kleines Problem. Ich kann kein Plugin oder eine Lösung finden, um den letzten Wert eines Parameters in einem parametrisierten Job als Standardwert für den nächsten Build zu speichern.Wie speichert man den letzten Wert des Parameters im parametrisierten Job als Standardwert für den nächsten Build in Jenkins?

Zum Beispiel: Mein Parameter nimmt Build-Version (1.0.0.01) im ersten Build. Im nächsten Build wird es zu 1.0.0.02 geändert, aber ich möchte ein 1.0.0.01 im Standardwertfeld als Hinweis haben. Hat jemand eine Lösung oder einen Rat?

Antwort

9

Sie können Ihrem Job (oder einem Post-Groovy-Schritt) einen Groovy-Build-Schritt hinzufügen, indem Sie das Jenkins-API verwenden, um das Projekt direkt zu ändern, indem Sie den Standardparameterwert festlegen.

Hier ist ein Code, die nützlich sein können, um Ihnen den Einstieg:

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" 
    } 
    } 
} 

einen Blick auf die Klasse ParameterDefinition im Modell Jenkins.

Wahrscheinlich müssen Sie den Standardwert ändern, der auf dem aktuellen Build basiert. Einige Code zu bekommen, dass würde wie folgt aussehen:

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

Vielen Dank. –

+1

Danke für dieses Codebeispiel. Das Problem ist, dass neuer Wert nicht zwischen Neustarts von Jenkins gespeichert wird. Solange der Jenkins nicht neu gestartet wird, wird der Standardwert geändert und der neue Wert wird beim nächsten Build verwendet. Wenn jenkins jedoch neu gestartet wird, wird der Standardwert auf den letzten manuell hinzugefügten Wert zurückgesetzt. Ist es möglich, diesen neuen Wert "hard stored" zu machen? – harsmar

1

Das Extended Choice Parameter Plugin bietet diese Möglichkeit durch Standard-Parameterwerte aus einer Properties-Datei verwenden. Ein Standardparameter kann aus einem angegebenen Eigenschaftsschlüssel ausgewählt werden, und dieser Schlüssel kann in Ihrem aktuellen Build programmgesteuert geändert werden. Ich würde dann ein grooviges Skript im aktuellen Build verwenden, um den Wert des Standardeigenschaftsschlüssels für den nächsten Build festzulegen.

Als Beispiel Sie eine erweiterte Auswahl Parameter, deren Standardwert ist definiert durch eine Properties-Datei version.properties mit Schlüssel haben würde wie folgt:

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

Der Parameter Definition würde:

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

Die GUI für Ihren Parameter im nächsten Build würde eine Auswahlliste mit standardmäßig ausgewählten 1.0.0.02 zeigen. Diese Funktion ist auch sehr nützlich für Pipeline-Builds, bei denen die Parameter einer Downstream-Build-Phase durch einen früheren Build festgelegt werden sollen.

Der einzige Nachteil dieses Ansatzes könnte sein, dass der Parameter UI eine Dropdown-Auswahl ist. Sie können einen einzelnen Wert im Versionseigenschaftsschlüssel angeben, um Ihre Benutzer nicht zu verwirren.

6

Die Persistent Parameter Plugin ist genau das, was Sie suchen!

Sie müssen es nur aus dem offiziellen Jenkins-Repository herunterladen und es installieren, keine Notwendigkeit für eine zusätzliche Einrichtung.

Dann müssen Sie in Ihrem Job nur einen "Persistent Parameter" hinzufügen, damit die Standardwerte zwischen den Builds verwendet und gespeichert werden.

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/13216452) –

+0

Dieser Kommentar und die Minus-Abstimmung macht überhaupt keinen Sinn, da die Lösung ein herunterladbares Jenkins-Plugin ist, es gibt keine Möglichkeit, "die wesentlichen Teile einzuschließen der Antwort "hier ... – thiagolr

+0

Es macht Sinn, weil Sie mehr Informationen über dieses Plugin schreiben können: wie man es benutzt, einige Beispiele, usw. Zum Beispiel habe ich keine Ahnung, was das ist und dieser Link würde nicht viel helfen wenn ich mich richtig einrichten kann. :) –

Verwandte Themen