Attualmente sto migliorando il processo di rilascio dei nostri progetti su Jenkins (1.430).Come configurare un singolo lavoro Jenkins per rendere il processo di rilascio dal trunk o dai rami?
lavori release corrente
Oggi, per un progetto specifico, abbiamo un lavoro dedicato al processo di rilascio. La procedura completa è la seguente:
- Lo sviluppatore che si occupa del rilascio cambia manualmente la versione di tutti i file pom.xml (in realtà utilizzando
mvn versions:set -DnewVersion=2.0
) per sbarazzarsi della-SNAPSHOT
. - Quindi, crea un tag in SVN (http://my-svn-repo/project/tags/V_2_0 per esempio).
- Una volta che questo tag è stato creato, accede al nostro server Jenkins e avvia una build di rilascio.
- Questa build gli chiederà quale tag desidera utilizzare per la build. Il lavoro è configurato come Configurazione parametrizzata, con il parametro Elenco tag di sottotensione.
- Jenkins quindi creerà le risorse da questo tag e le distribuirà nell'istanza Nexus.
- Una volta eseguita questa operazione, lo sviluppatore ha impostato le versioni pom.xml nella nuova versione di sviluppo (ad esempio
2.1-SNAPSHOT
).
Il vantaggio di questo metodo è che ho solo un lavoro Jenkins, poiché la build si baserà solo su un tag.
Tuttavia, questa procedura comporta troppi interventi umani (modifiche di pom.xml, commit, tag, ecc.).
posti di lavoro nuova release
Ora, io uso il plugin Maven rilascio. Ho creato un lavoro che richiede tre informazioni per l'utente che lancia la compilazione:
- la versione della release (parametro
releaseVersion
del plugin di rilascio); - la versione di sviluppo, dopo il rilascio (parametro
developmentVersion
del plugin di rilascio); - il nome del tag (parametro
tag
del plug-in di rilascio).
Questo lavoro funziona correttamente, ad eccezione di un punto: il lavoro si basa sul trunk o su un ramo in SVN. Ciò significa che se ho 2 rami (oltre al tronco), avrò bisogno di creare 3 lavori di rilascio: uno per ramo.
Un'idea per mantenere il meglio dei due mondi (vale a dire utilizzando la release di mvn, ma mantenendo 1 processo di rilascio) per aggiungere un parametro di build che chiederà all'utente il percorso del trunk/ramo. Quindi, anziché impostare http://my-svn-repo/project/trunk
(o http://my-svn-repo/project/branches/BRANCH_V1
) nella configurazione del lavoro, imposterò http://my-svn-repo/project/$FROM_BRANCH
e chiederà all'utente di immettere il parametro FROM_BRANCH
.
Il problema con questa soluzione è che l'utente dovrà immettere trunk
o branches/BRANCH_Vx
, il che potrebbe causare errori.
Idealmente, mi piacerebbe avere un parametro di compilazione che mi lascia la scelta del ramo (compresi tronco), come parametro tag Lista Subversion esistono per la scelta dei tag ...
Quindi il mio domanda: c'è un modo migliore per configurare il lavoro uno Jenkins che può funzionare su tutte le filiali?
Grazie.
Edit: Ho trovato il Jenkins plug Validating String che può essere interessante per assicurare che il valore definito dall'utente rispetta alcune espressioni regolari. Questo è utile nel mio caso ...
è anche possibile utilizzare alcune modifiche della mia risposta qui: http://stackoverflow.com/a/41632406/2886891 –