2010-10-20 2 views
6

Il mio requisito è che ho bisogno della portata della variabile d'ambiente di Hudson nel parametro di costruzione del sottoprogetto per svn url.Come passare la variabile di ambiente di hudson come parametro per svn build

Voglio impostare il nome del ramo SVN come una variabile di ambiente di Hudson, poiché voglio che venga utilizzato da tutti i miei progetti configurati lì.

Se accedo al mio variabile d'ambiente [BUILD_BRANCH] come

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

l'URL è non ottenere sostituito con il valore.

Ma nello stesso caso se ho BUILD_BRANCH come parametro stringa per la generazione parametrizzata in ogni sottoprogetto l'url viene sostituito con valore. Ma non posso cambiare il valore del ramo [valore del parametro di costruzione] ogni volta in tutti i progetti. Inoltre, i progetti downstream non sono stati in grado di accedere ai parametri di build [String] dei progetti di chiamata.

+0

Come cortesia, di solito forniamo un feedback se la risposta risolve il problema e segna anche la risposta migliore (quella che descrive meglio la soluzione necessaria o che ti porta sulla giusta strada per risolvere il problema). Se lo fai, le persone sono più inclini ad aiutarti in futuro. –

+0

sì, l'ho provato e funziona come segue: define parmater dopo aver cliccato su "questa build è parametrizzata" e imposta variabile BUID_BRANCH = Branch1,2 e svn url = http: // svn/repos/project/subproj/branches/$ BUID_BRANCH. Sebbene l'URL SVN venga visualizzato come non riuscito durante l'impostazione, ma il valore della variabile BUID_BRANCH verrà rilevato in fase di runtime. –

risposta

-1

set BUILD_BRANCH in ManageHudson-> Configura Sistema-> proprietà- Globale> Variabili d'ambiente

+0

My Hudson può accedere alle variabili di ambiente, ma solo a quelle definite globalmente. Qualsiasi modifica alle variabili di ambiente di solito richiede un riavvio dell'intero sistema (riavvio del sistema operativo) poiché il mio Hudson funziona come un servizio. –

+0

Ho già fornito BUILD_BRANCH in Variabili Env in Proprietà globali ma non funziona. Thatsy ho sollevato questa domanda. –

+0

Questo non funziona. Questo è il punto della domanda. – Gray

0

Vorrei chiarire il problema. Hai definito una variabile di ambiente, BUILD_BRANCH e vuoi poterla fare riferimento all'interno di un parametro per la tua build. È giusto?

Se è così, allora ho risolto il problema!

Quando i parametri vengono valutati (e tutte le variabili a cui si fa riferimento all'interno sono espanse), non si ha accesso alle variabili di ambiente, quindi il valore del parametro finisce per essere la stringa letterale '$ {BUILD_BRANCH}', piuttosto che essendo espanso alla definizione dell'ambiente di $ BUILD_BRANCH.

Quindi, quando si fa riferimento al parametro dallo script di shell, il valore del parametro è racchiuso tra virgolette singole, impedendo la risoluzione del livello aggiuntivo di riferimento indiretto, in modo da ottenere il nome della variabile di ambiente, piuttosto che il suo valore.

La soluzione è aggiungere eval per l'inizio di ogni riga di script di shell in cui si fa riferimento il parametro, che sarà risolvere il ulteriore livello, e la variabile funzionerà.

Un'ultima cosa: non è necessario farlo se si fa riferimento a un parametro precedente. Quindi se Param1 è foo e Param2 è $ {foo} bar, funzionerà, perché i parametri sono valutati in ordine. Se i valori dei parametri sono stati modificati, tuttavia, è necessario utilizzare eval.

+0

Questo non funziona perché deve essere nel campo URL repository che non è uno script. – Gray

1

C'è una casella chiamata: "Questa build è parametrizzata" nella configurazione della build.

Se lo abiliti, sarai in grado di creare parametri per questa build specifica.

Spero che questo aiuti.

0

Sembra che non ci sia modo corrente di utilizzare una variabile ambientale per regolare la posizione del repository subversion. Quello che ho deciso di fare è modificare i file config.xml all'esterno con uno script.

Questo potrebbe non funzionare per voi se il valore di tale variabile sta cambiando a livello di codice, ma per noi, volevo essere in grado di migrare i nostri lavori tra i rami e il tronco che viene fatto ogni sprint ed è un processo manuale.

Una sorta di script come le seguenti opere per noi:

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 

Se si utilizza Jenkins, si può quindi andare a "Gestione Jenkins" e selezionare "Ricarica configurazione da disco".