Caricamento dei file dall'ultima revisione svn su SFTP in Jenkins CI
-
28-10-2019 - |
Domanda
Sto configurando il lavoro Jenkins per il caricamento di file da Subversion a SFTP. Pubblica su SSH sta andando abbastanza bene, ma si caricatutti i file su ogni build.
Per alcuni progetti abbiamo migliaia di file e il caricamento costa più di 1 ora, quindi non è un'opzione.
Qualcuno può suggerire un modo per caricare solo i file modificati nell'ultima revisione?
Soluzione
Puoi utilizzare il Subversion Plugin per eseguire il polling delle modifiche SVN ed eseguire un lavoro che non fa niente di particolare. Chiamiamolo YourPollingJob . Quindi chiama l'API Jenkins tramite http in questo modo:
http://[jenkins_server]/api/xml?depth=2&xpath=/hudson/job[name='YourPollingJob']/build[id='BUILD_ID']/changeSet
dove BUILD_ID
è l'effettivo build id del lavoro che hai appena eseguito (il formato usuale è qualcosa come 2012-02-21_16-15-49
). Esamina il risultato. Tieni presente che tutte le informazioni sui file che sono cambiate rispetto alla build precedente sono presenti: devi solo analizzarle.
Quindi ora puoi fare quanto segue: YourPollingJob chiamerà un altro lavoro - chiamiamolo CopyJob - e gli passerà il suo BUILD_ID
come parametro (tramite Plugin trigger parametrizzato ; assicurati di chiamare CopyJob come fase di post-costruzione, non come fase di costruzione). CopyJob interrogherà quindi Jenkins tramite http (come sopra, il modo migliore è farlo tramite wget
), analizzerà i risultati ed eseguirà la copia.
Puoi fare tutto in un unico lavoro, ma è un po 'più complicato e difficile da eseguire il debug.
Inoltre, è probabilmente prudente copiare l'intero repository una volta al giorno (di notte).
Altri suggerimenti
Potresti tenere quei file in un repository separato.Sembra che un VCS distribuito come mercurial o git sarebbe il migliore per questo nel tuo caso.Puoi impostarlo nell'area di lavoro e aggiungere una fase di compilazione per eseguire il commit dei file modificati e inviare il commit al server in cui desideri pubblicarlo (che dovrebbe funzionare fintanto che non cancelli lo spazio di lavoro o non compilimacchine) o aggiungi ulteriori passaggi per clonare / eseguire il pull del repository con gli artefatti dal server su cui li tieni.