2015-04-09 10 views
10

Utilizziamo il modello standard di branching git flow (sviluppo, master, release- , hotfix-, ecc.).Flusso Git: come configurare un processo di rilascio con un clic in Jenkins?

Come parte del nostro flusso di lavoro, vorremmo impostare un rilascio "one-click" tramite jenkins.

Stavo guardando il jgitflow-maven-plugin. Posso installare questo plugin per fare un rilascio con un clic da jenkins? In tal caso, quali sono le opzioni di configurazione?

In particolare, posso fare qualcosa di simile?

Jenkins Job 
Maven goals: release-start release-finish -Dsomething -Delse 

E c'è un modo si dice di compilarlo automaticamente dall'ultima versione -snapshot, per esempio se la versione è 1.2.3-SNAPSHOT, verrà creato release-1.2.3.

In caso contrario, c'è un plugin Maven che costruisce rilascia secondo il flusso git branching modello (vale a dire costruire da develop e creare un nuovo ramo di rilascio di nome release-x.y.z).

+0

Hai gestito nel frattempo? se sì, come? – Puce

+0

No, non abbiamo ancora funzionato. Sto ancora facendo mvn release: preparare e rilasciare: perform (che, come tutti sappiamo, è un dolore reale nel b ** t). – vikingsteve

+1

Solo un piccolo aggiornamento qui, stiamo lavorando con uno script unix chiamato 'release.sh' che ha il seguente:' git flow release start ... ',' mvn -B release: prepare', 'mvn release: perform' , 'git flow release finish ...'. Non è l'ideale, e non funziona con le macchine Windows, ma è la soluzione migliore che abbiamo adesso. – vikingsteve

risposta

0

Non abbiamo mai trovato un modo per farlo funzionare tramite un plugin o Maven obiettivo in Jenkins.

La nostra soluzione si è conclusa con uno script che ha fatto bashgit flow release start <version>, processo di rilascio Maven, git flow release finish <version> e altre cose (git tirare develop e master a fin dall'inizio, git push e la notifica tensione alla fine).

1

Si può semplicemente utilizzare il plug-Jenkins M2 Release Plugin con gli obiettivi di rilascio una delle opzioni -B -DautoVersionSubmodules=true jgitflow:release-start jgitflow:release-finish

+0

Ok. Sei sicuro che jgitflow possa funzionare in modalità batch? L'ultima volta che l'ho provato, richiedeva un parametro 'version' di qualche tipo. – vikingsteve

+0

@vikingsteve Utilizzare ** developmentVersion ** e ** releaseVersion properties **, vedere la mia risposta. – CSchulz

1

Abbiamo finito con l'avvio del rilascio tramite CLI sul client (perché in Jenkins c'è un bug che avvia la versione).

git flow release start -DautoVersionSubmodules=true 

Se si desidera utilizzare la modalità batch è necessario specificare developmentVersion e releaseVersion.

Creato un nuovo lavoro in Jenkins per costruire il ramo di release e utilizzare il M2 Release Plugin per liberare finalmente:

-B jgitflow:release-finish 

Se si utilizzano alcuni profili personalizzati, devi passare loro aggiuntiva tramite argomenti causata da a bug.

-Darguments=-Pprofile 
9

Anche se questa risposta è un anno che vorrei sottolineare che nel frattempo il jgitflow (v1.0-m5.1) funziona con la modalità Maven batch.

Quindi, per rilasciare un artefatto con un solo comando è possibile eseguire:

mvn --batch-mode jgitflow:release-start jgitflow:release-finish 

È non è necessario impostare developmentVersion e releaseVersion.

JGitFlow utilizzerà la versione corrente meno la parte -SNAPSHOT come versione di rilascio. Quindi incrementa la cifra meno significativa e aggiunge -SNAPSHOT di nuovo per la versione di sviluppo successiva.
Esempio1.0.0-SNAPSHOT -> rilascio: 1.0.0, prossima versione di sviluppo: 1.0.1-SNAPSHOT

Al fine di configurare un singolo clic lavoro di rilascio Jenkins è necessario configurare alcune cose per quanto riguarda Git.

Sotto Source Code Management > Git > Additional Behaviors selezionare

  • Wipe out repository & force git clone: solo per assicurarsi che l'area di lavoro è pulito
  • Checkout to specific local branch: il vostro develop ramo.

Infine, il rilascio avviene in locale sul server Jenkins, così si vuole spingere indietro le modifiche al vostro server remoto Git.

Per ottenere questo risultato, il modo più semplice è quello di aggiungere un Post-build action che esegue il seguente comando bash (i nomi dei rami possono variare, ho usato i valori di default JGitFlow):

git push origin develop master --tags 

Nota Se Jenkins è in esecuzione su Windows, è necessario eseguire uno script Batch che contiene lo stesso comando (a volte questo non funziona a causa di problemi SSH con Windows) o configurare lo Post-build action di conseguenza.

+0

Sembra promettente, lo metto alla prova. Grazie. – vikingsteve

+0

Fondamentalmente, si tratta di questi quattro comandi impacchettati come lavoro Jenkins: 'git clone . && git checkout develop && mvn --batch-mode jgitflow: release-start jgitflow: release-finish && git push origine sviluppare master - tag ' – gucce

+0

@gucce i tuoi passaggi hanno funzionato alla grande. Dato che jgitflow non ha visto lo sviluppo attivo da un po 'di tempo, hai avuto successo con altri plugin Maven di Git Flow? – testphreak