2010-10-20 14 views
6

Meine Anforderung ist, ich brauche den Umfang der Hudson-Umgebungsvariable im Build-Parameter des Unterprojekts für Svn URL.Wie Umgebungsvariable von Hudson als Parameter für SVN-Build übergeben

Ich möchte SVN Branch Name als eine Umgebungsvariable von Hudson, wie ich es von allen meinen dort konfigurierten Projekten verwendet werden soll.

Wenn ich auf meine Umgebungsvariable [BUILD_BRANCH] als

http://svn/repos/project/subproj/branches/ $ {BUILD_BRANCH}

die URL nicht mit dem Wert ersetzt zu werden.

Aber im selben Fall, wenn ich BUILD_BRANCH als String Parameter für parametrisierte Build in jedem Unterprojekt habe, wird die URL durch Wert ersetzt. Aber ich kann den Zweigwert [Bauparameterwert] nicht jedes Mal in allen Projekten ändern. Auch die nachgelagerten Projekte konnten nicht auf die Build-Parameter [String] der aufrufenden Projekte zugreifen.

+0

Aus Höflichkeit geben wir normalerweise Rückmeldung, wenn die Antwort Ihr Problem löst und auch die beste Antwort markiert (diejenige, die die benötigte Lösung am besten beschreibt oder die Sie auf den richtigen Weg führt, um das Problem zu lösen). Wenn Sie dies tun, sind die Menschen eher geneigt, Ihnen in der Zukunft zu helfen. –

+0

Ja, ich habe das ausprobiert und es funktioniert wie folgt: definiere parmater nach dem Klicken auf "dieser Build ist parametrisiert" und setze die Variable BUID_BRANCH = Branch1,2 und svn url = http: // svn/repos/project/subproj/branches/$ BUID_BRANCH. Die SVN-URL wird zwar beim Setzen als fehlerhaft angezeigt, aber der Variablenwert BUID_BRANCH wird zur Laufzeit übernommen. –

Antwort

-1

Satz BUILD_BRANCH in ManageHudson-> Konfigurieren System-> Globale Einstellungen-> Umgebungsvariablen

+0

Mein Hudson kann auf die Umgebungsvariablen zugreifen, aber nur auf diejenigen, die global definiert sind. Jede Änderung an den Umgebungsvariablen erfordert normalerweise einen Neustart des gesamten Systems (os Neustart), da mein Hudson als Dienst ausgeführt wird. –

+0

Ich habe bereits BUILD_BRANCH in Env-Variablen unter Globale Eigenschaften bereitgestellt, aber es funktioniert nicht. Thatsy Ich habe diese Frage gestellt. –

+0

Dies funktioniert nicht. Das ist der Punkt der Frage. – Gray

0

Lassen Sie mich Ihr Problem klären. Sie haben eine Umgebungsvariable BUILD_BRANCH definiert und möchten diese innerhalb eines Parameters für Ihr Build referenzieren können. Ist das richtig?

Wenn das der Fall ist, dann habe ich Ihr Problem gelöst!

Wenn Parameter ausgewertet werden (und alle Variablen, auf die in ihnen verwiesen wird, werden erweitert), haben Sie keinen Zugriff auf Umgebungsvariablen, sodass der Wert des Parameters die Literalfolge '$ {BUILD_BRANCH}' ist wird auf die Umgebungsdefinition von $ BUILD_BRANCH erweitert.

Wenn Sie dann den Parameter aus dem Shell-Skript referenzieren, wird der Wert des Parameters in einfache Anführungszeichen eingeschlossen, sodass die zusätzliche Ebene der Indirektion nicht aufgelöst wird. Sie erhalten also den Namen Ihrer Umgebungsvariablen und nicht ihren Wert.

Die Lösung ist, eval am Anfang jeder Zeile des Shell-Skripts hinzuzufügen, wo Sie den Parameter referenzieren, wird die zusätzliche Schicht auflösen, und die Variable wird funktionieren.

Eine letzte Sache - Sie müssen dies nicht tun, wenn Sie einen früheren Parameter referenzieren. Wenn also Param1 foo ist und Param2 $ {foo} bar ist, wird dies funktionieren, weil die Parameter der Reihe nach ausgewertet werden. Wenn die Parameterwerte jedoch umgeschaltet würden, müssten Sie eval verwenden.

+0

Dies funktioniert nicht, da es sich im Repository-URL-Feld befinden muss, das kein Skript ist. – Gray

1

In der Konfiguration des Builds gibt es eine Checkbox namens "Dieser Build ist parametrisiert".

Wenn Sie dies aktivieren, können Sie Parameter für diesen spezifischen Build erstellen.

Ich hoffe, dass dies hilft.

0

Es scheint, als ob es keine aktuelle Möglichkeit gibt, eine Umgebungsvariable zu verwenden, um den Standort des Subversion-Repositorys anzupassen. Ich entschied mich, die config.xml Dateien außerhalb mit einem Skript zu bearbeiten.

Dies funktioniert möglicherweise nicht für Sie, wenn der Wert dieser Variablen programmgesteuert geändert wird, aber für uns wollte ich in der Lage sein, unsere Jobs zwischen Zweigen und Stamm zu migrieren, die in jedem Sprint durchgeführt wird und ein manueller Prozess ist.

Irgendeine Art von Skript wie die folgenden Arbeiten für uns:

FROM_SVN_PATH="svnserver.com/trunk" 
TO_SVN_PATH="svnserver.com/branches/1.1" 
cd jobs 
for f in */config.xml 
do 
    sed -e "s,$FROM_SVN_PATH,$TO_SVN_PATH," < "$f" > "$f.t" 
    mv "$f" "$f.ORG" 
    mv "$f.t" "$f" 
done 

Wenn Sie Jenkins verwenden, können Sie dann auf „Jenkins verwalten“ und wählen Sie „Neu laden Konfiguration von Disk“.

Verwandte Themen