Lo script di distribuzione dovrebbe essere un artefatto della compilazione?

13

Questo è un progetto web scritto in Java.

Quindi sto scrivendo la build e gli script di deploy. Per creare la build, ho usato la formica. La costruzione continua viene eseguita con Jenkins.

La build genera 3 artefatti diversi:

  1. Il file di guerra
  2. Un file zip con layout
  3. Un file zip con immagini

Finora, tutto bene, ma ora ho bisogno di scrivere lo script di distribuzione, che dovrebbe:

  • Distribuisci war (artefatto 1) sul tomcat in esecuzione su server 1
  • Posiziona l'artefatto 2 sul server 1 in una directory specifica
  • Posiziona l'artefatto 3 sul server 2 in una directory specifica

Quindi stavo parlando con il mio collega e ha detto che dovremmo anche generare un artefatto (forse deploy.xml ) che distribuisce questi artefatti quando viene posizionato sul server corretto.

Quindi ci sarebbe un altro script, che sarebbe:

  • Scarica gli artefatti di jenkins
  • scp su ogni server e posiziona il file deploy.xml
  • richiama da remoto il deploy.xml

Ciò che mi rende un po 'a disagio è l'atto di avere deploy.xml come artefatto di build. La motivazione alla base sarebbe quella di poter eseguire una distribuzione senza la necessità di accedere ai repository VCS, quindi una build sarebbe autosufficiente, cioè qualsiasi build potrebbe essere messa in produzione solo con quanto generato da Jenkins.

Dove dovrebbero essere collocati gli script di deploy? Dovrebbero essere solo al VCS o dovrebbero anche essere artefatti?

    
posta Edison Gustavo Muenz 14.12.2011 - 17:48
fonte

2 risposte

6

La mia esperienza è che tutto ciò che può essere automatizzato dovrebbe essere. Se puoi descriverlo come passo 1, passo 2, .... allora dovrebbe essere uno script. Se lo script può essere generato automaticamente per includere informazioni specifiche sulla build (ad esempio tag di revisione), allora è quello che dovresti fare. Questo non è per il gusto di essere pigri, ma per il fatto di essere prevedibili e riproducibili .

Nota bene: dovresti anche avere uno revert script generato automaticamente che può essere utilizzato da chiunque nel team nel caso in cui lo script di distribuzione generato automaticamente vada fuori di testa e metta in sordina la produzione server.

    
risposta data 14.12.2011 - 18:23
fonte
3

Tutto ciò che Peter Rowell ha scritto, è corretto, inoltre vorrei:

Per il file di script di implementazione

  • se è stato scritto da qualcuno, deve essere in controllo di versione.
  • se è stato generato e può essere generato di nuovo, di solito non entra nel controllo della versione.

Per il processo di distribuzione:

  • Se ti piace che i tuoi artefatti siano autonomi e se possano essere fatti facilmente, il file potrebbe essere un artefatto di costruzione, il che significa che è impacchettato con i risultati di build in modo tale che sia utilizzabile per la distribuzione.
  • D'altra parte, le implementazioni diventano sempre più complesse, quindi prima o poi avrai bisogno di un programma dedicato (leggi un po 'di codice) che la distribuzione e un artefatto di costruzione di Jenkins non siano più autonomi.

Questo dipende piuttosto dal tuo processo e da come ti piace gestire le distribuzioni.

    
risposta data 17.12.2011 - 00:30
fonte

Leggi altre domande sui tag