11

Così, un amico ed io abbiamo discusso di integrazione continua e script bat/powershell contro server CI come CruiseControl.Net o Hudson.Integrazione continua: PowerShell vs CI Server (CC.NET o Hudson)

Il seguente pseudo script di powershell funziona per l'aggiornamento da SVN, generazione di msbuild, distribuzione/copia, aggiornamento di un numero di build/revisione nell'app e di e-mail su build non riusciti. Il prossimo passo sarebbe quello di aggiungere chiamate a MSTest ed e-mail i risultati quando non ha successo.

  1. aggiornamento svn
  2. msbuild> build_deploy_development_out_msbuild
  3. ([xml] (svn informazioni --xml)). Info.entry.commit.revision + [char] 13 + [char] 10 + (echo % date%% time%)> build_revision_number.html
  4. $ linenum = Select-String build_deploy_development_out_msbuild -pattern "Build Failed" | Select-Object Linenumber
  5. $ smtp = New-Object System.Net.Mail.SMTPClient -ArgumentList localhost | if ($ linenum> 0) $ smtp.Send ("Da: Email", "A: Email", "build fallito", "build fallito ... qualcuno deve morire!")

Questo ha portami alla domanda sul valore dei server CI, quando puoi scrivere i tuoi script di shell per raggiungere lo stesso obiettivo, usando gli strumenti specifici del progetto (strumento di costruzione, controllo del codice sorgente, test delle unità) (ad esempio, msbuild, nant, svn , git, nunit, mstest, ecc.)

Non ho ancora riscontrato i costi di manutenzione. Volevo ottenere opinioni sugli altri sul tuo copione proprio contro un CruiseControl.Net o Hudson. Si noti che non ho esperienza con i server CI, quindi la domanda, quindi per favore non considerarla critica per i server CI; Semplicemente non conosco la risposta migliore e ho pensato di chiedere alla comunità.

I migliori auguri! Pete Gordon

+0

Questo dovrebbe essere wiki della comunità, in quanto non esiste una risposta chiara –

+0

Perché è incluso anche CC.NET o Hudson? Questa sembra una domanda di PowerShell VS CI. Perché la semantica? – TheOptimusPrimus

risposta

3

Ho installato Hudson un paio di settimane fa per sostituire l'attuale server CruiseControl. Il più grande vantaggio che vedo in Hudson è che praticamente chiunque può usarlo, mentre lanciare una build parametrizzata con CruiseControl (o un file batch) è ancora spaventoso per molte persone.

Di solito tendo a scrivere tutti gli script di build con Ant (perché è portatile), inserisco un paio di parametri e li invoco da Hudson.

Hudson offre ai tuoi copioni una grande visibilità (tutto può essere visto sulla prima pagina) e sono auto esplicativi. Di solito con uno script bash, è necessario scrivere un readme (che nessuno legge) e ricordare dove si trovano.

3

... o avere entrambi. Ayende (il creatore di Rhino Mocks) lo ha fatto di recente. Ha scritto un server CI usando PowerShell. Forse this fornisce nuovi approfondimenti per la tua discussione.

9

server CI offrono diversi vantaggi:

  • accesso al Web, di solito con possibilità di integrazione con meccanismi di autenticazione esistente (vedere ActiveDirectory supporto di Hudson/LDAP)
  • Tonnellate di supporto esistente per unit testing, zip archivio creationg, ecc.
  • Hudson (e altri) supporta nodi di build slave, per eseguire attività CI distribuite.
  • Non c'è bisogno di mantenerlo da solo.

Alcuni di questi non possono essere cose che dovete ora ma sei sicuro che non sono cose che si potrebbe aver bisogno in futuro?

+1

Mi piacerebbe vedere un sondaggio sull'uso delle persone di questi tipi di funzionalità. Non sono sicuro al 100% di averli compresi tutti. Mi ha fatto incuriosire l'archiviazione di zip in PowerShell, e ho trovato questo ... http://tfl09.blogspot.com/2008/12/zip-files-with-powershell.html Grazie! – petegordon

+1

Ho usato alcune di queste funzionalità e ho creato alcuni plugin Hudson ad hoc per risolvere alcune esigenze specifiche del progetto. L'aspetto più importante di Hudson è che si tratta di un progetto in crescita con un numero crescente di plug-in. –

+0

Come eseguiresti build con-current con PowerShell? Come gestirai il controllo delle versioni, le distribuzioni e i rapporti sulla copertura del codice? Perché reinventare la ruota? – TheOptimusPrimus

1

Per un anno ho tentato di mantenere script personalizzati in Python per fare cose di base sull'IdC: ricevere notifiche di commit via e-mail, controllare e costruire materiale, rimandare biasimo e complimenti, poi quando si trattava di pubblicandolo per l'utilizzo da parte di tutti gli altri membri del mio team, si è rivelato inutilizzabile raaaather senza monitoraggio, accesso al web, ecc.

Quindi mi sono tuffato in buildbot e l'ho trovato veramente bello. Ho impostato fondamentalmente la stessa procedura in un paio di giorni. Lo script di compilazione è un vero oggetto python, personalizzabile dal master, da cui viene trasferito agli schiavi ed eseguito lì. Costruito su un'infrastruttura intrecciata, questo è un sacco di cose fuori dalla scatola;)

L'interfaccia utente Web è minimalista, anche se sufficiente.

Bene, questo è inedito troppo, anche se sono vicino ad essa questa volta%)

1

Qui di seguito sono i miei pensieri su CI Server oltre uno script PowerShell

  • altamente configurabile plugin sono disponibili per tutti i diversi tipi di controllo delle versioni, notifiche e test.
  • Registri Questi sono mantenuti meravigliosamente. I log di costruzione guasti e di successo sono a portata di mano.
  • Pianificazione È possibile impostare tutti i tipi di scheduling compresi triggerring sulla base di altre accumulo successo
  • Security È possibile impostare i gruppi diversi di essere in grado di eseguire, sola visualizzazione oppure impostare per vedere alcuni progetti
  • Visibilità È possibile utilizzare una dashboard Web o un cctray per diversi segmenti di pubblico.
  • Scalabilità. Facile da ridimensionare quando necessario.

In conclusione, se è necessario conservare numerose build per diversi progetti di ambiente e team, CI Server è la soluzione giusta. A parte questo, un semplice script di PowerShell è sufficiente per piccoli progetti. Una volta che il progetto è cresciuto, è sufficiente collegare lo script PowerShell esistente a un server CI.

Problemi correlati