2010-11-17 17 views
33

Ho un server Hudson. Il codice sorgente è gestito da un repository git. Per ogni build viene verificata e compilata l'ultima versione. Ora vorrei dire a hudson di usare non l'ultima versione, ma una versione precedente del codice (specificata da me).Usa Hudson per creare un commit git specifico

In hudson ho due parametri che possono essere impostati. Primo "nome del repository", con valore predefinito "origine" e secondo refspec con valore +refs/heads/*:refs/remotes/origin/*. Ho provato un po 'qualcosa come origin/[commitid] o +refs/heads/*:refs/remotes/origin/[commitid]. Ma nulla ha funzionato come previsto.

Penso di aver dovuto utilizzare un lavoro con parametri, in modo da poter assegnare il commit come parametro al lavoro.

Come posso dire a hudson di utilizzare uno specifico commit anziché l'ultimo?

risposta

2

È possibile configurare il lavoro Hudson per creare un ramo specifico. Quindi puoi spingere tutti i cambiamenti che vuoi che Hudson costruisca su quel ramo.

4

In "Operazioni preliminari" tenta di aggiungere "Esegui shell" e aggiungere:

git pull 
    git checkout <commit version> 
+5

Nota: ciò significa che la variabile di ambiente GIT_COMMIT non corrisponde più al commit effettivo che è stato estratto. – Karl

+0

Hai ragione, ma conosci la '' ' –

4

Una soluzione potrebbe essere quella di:

  • impostare il plugin Git per costruire una speciale "build_br" ramo .
  • reimpostare il ramo build_br al previsto commettere
  • push che ramo build_br il monitor repo remoto da Jenkins o Hudson (che sarebbe un push --force, come illustrato in "git reset --hard and a remote repository")

questo modo , costruire quel ramo build_br significherebbe costruire un commit specifico, e GIT_COMMIT sarà impostato correttamente.
Nessuno sviluppo dovrebbe aver luogo su quel ramo speciale, poiché viene regolarmente reimpostato su qualsiasi commit che è necessario creare.

1

Non sono sicuro di Hudson, ma il Plugin Git di Jenkins ha un pulsante "Avanzate ..." a destra appena sopra il campo "Browser del repository". Facendo clic qui vengono visualizzate molte opzioni aggiuntive, tra cui "Checkout/Unisci al ramo locale (facoltativo)". Il testo della guida dice "Se specificato, controlla la revisione per costruire come HEAD su questo ramo. Tieni presente che questo non è stato testato con i sottomoduli", così sembra essere quello che hai in mente.

8

È possibile utilizzare il parametro di diramazione dello jenkins-git-plugin per definire un ID di commit specifico.

Jenkins effettuerà quindi il checkout solo per il commit e non per il capo di una filiale.

+0

Come? Esempio per favore –

+3

Se si fa clic sul piccolo punto interrogativo (?) Accanto al campo si dice: '... Una revisione specifica può essere verificata specificando l'hash SHA1 di quella revisione in questo campo. Questo mi sembra come il "il modo giusto per farlo". – Ben

48

Voglio solo this rispondere più chiaro. Come rendere il vostro lavoro alla cassa una specifica commit, passo dopo passo:

  1. Add parametro di stringa per il vostro lavoro con nome, lascia stare COMMIT nel mio esempio.
  2. Scegliere Git come SCM (fornito da Jenkins Git plugin).
  3. Nelle proprietà Git SCM è possibile impostare le proprietà del repository.
  4. In Git SCM, nel paragrafo rami per creare tipo ${COMMIT} che è il riferimento al parametro del lavoro e verrà risolto durante la compilazione.

Questo è tutto, avviare la costruzione e nel registro si vedrà qualcosa di simile:

Cloning the remote Git repository 
Cloning repository ssh://your-repo.git 
Fetching upstream changes from ssh://your-repo.git 
using GIT_SSH to set credentials 
Fetching upstream changes from ssh://your-repo.git 
using GIT_SSH to set credentials 
Checking out Revision af63e2102b65953316e512c0bb659578bb143a33 (detached) 

nota, che ci sono altri modi per impostare la variabile d'ambiente prima della cassa SCM, vale a dire utilizzando Prepare environment for the run passo dal EnvInject Plugin (potresti anche usare Groovy per questo).

Inoltre, se non vedi le opzioni di cui sto parlando o non funzionano, assicurati di avere una nuova versione di un plugin Git Nel mio caso è 2.2.0.

+0

Grazie per i passaggi dettagliati. Ha funzionato come un fascino! –

+0

Come si "avvia la build"? Quando premo "Build Now", viene creato solo un ramo (master). – user239558

+0

Controlla di nuovo la mia risposta, ho suggerito di introdurre un parametro. Quando il lavoro è parametrizzato, l'utente vede la forma BuildWithParameters quando viene cliccato il link "Build" invece di avviare la build immediata. – izzekil

3

Come la documentazione dice:

git plugin branch configure

Inserisci il Commit ID ai "rami per costruire" l'impostazione.

Problemi correlati