Jenkins per automatizzare la distribuzione di applicazioni ASP.NET


13

Esiste la possibilità di automatizzare / semiautomatizzare le distribuzioni di applicazioni Web ASP.NET utilizzando Jenkins. Può essere in ambienti controllati o non controllati, per l'utente incontrollato deve inserire userid e password. Sto cercando dei modi per copiare i file dalla destinazione alla destinazione ed eseguire script sql nello scenario della Web farm.

Modifica Attualmente stiamo usando file bat per copiare / configurare pool di app / sql cmd, ecc. Per distribuire l'applicazione. Ma affinché questo funzioni, il team di supporto alla produzione deve scaricare il codice sorgente, compilare il progetto ed eseguire i file bat per distribuire l'applicazione.

Ora, vogliamo automatizzare la distribuzione senza che l'utente scarichi il codice sorgente e l'utente finale deve solo visitare un url e compilare i parametri userid e password e selezionare il tag svn e dovrebbe essere distribuito. Ma Jenkins è in esecuzione con accesso anonimo, quindi il file bat esistente non funzionerà poiché non dispone delle autorizzazioni per eseguire lo script.

Quindi, vorrei sapere se esistono alternative per questo tipo di situazione. Sarà utile se il contesto utente viene rappresentato utilizzando l'ID utente e la password immessi che consentono l'esecuzione del file batch esistente senza ulteriori modifiche. Se ciò non fosse possibile, vorremmo esplorare anche altre idee, ma non abbiamo la flessibilità di scegliere uno strumento automatizzato come un pupazzo, ecc., Dovremmo restare con questi file batch.


Condividere la tua ricerca aiuta tutti. Raccontaci cosa hai provato e perché non ha soddisfatto le tue esigenze. Ciò dimostra che hai impiegato del tempo per cercare di aiutarti, ci salva dal ribadire risposte ovvie e, soprattutto, ti aiuta a ottenere una risposta più specifica e pertinente. Vedi anche Come chiedere
moscerino

Aggiorna la mia domanda, per favore fatemi sapere se devo fornire ulteriori informazioni.
Sunny

Risposte:


11

Condividerò quello che abbiamo usato e dove stiamo programmando di andare, forse ti aiuterà a darti un'idea migliore.

  • Attualmente usiamo Jenkins e Github insieme - una volta che qualcosa è stato unito al maestro, Github dice a Jenkins e dà il via a una build.
  • Usiamo uno script Nant su Jenkins per costruire il progetto, eseguire test unitari e, se tutto sembra a posto, dà il via a un altro progetto Jenkins. Lo script Nant sputa anche una directory con codice completamente compilato / CSS / JS minimizzato, ecc.
  • Il progetto Jenkins secondario prende l'output dalla build e lo rimanda a Github, su un repository separato.
  • Un file .BAT viene eseguito ogni 5 minuti sul server Web di gestione temporanea e controlla sostanzialmente gli aggiornamenti di tale repository. Se viene trovato un aggiornamento, scarichiamo l'ultima build, eseguiamo il backup dei nostri file di gestione temporanea, quindi distribuiamo la build più recente nella cartella di gestione temporanea.
  • Per passare al live, abbiamo un file .BAT che gestisce il backup dei file live e la copia dei file del repository sui file live. Viene eseguito manualmente. Non gestisce gli aggiornamenti SQL (li facciamo manualmente).

Ora, ovviamente, questo non è del tutto ideale, ma funziona per noi. Vogliamo espandere questo in futuro per:

  • Utilizzare Web Deploy per inviare i file da Jenkins direttamente a IIS ed eseguire tutti gli altri comandi necessari per l'esecuzione.
  • Utilizzare le migrazioni automatiche (una funzionalità di Entity Framework) per gestire tutti gli aggiornamenti SQL, come parte del funzionamento live.

È quasi lo stesso quello che stiamo seguendo. Ma mi chiedevo se Web Deploy potesse installare servizi Windows, ecc. E tutto ciò che era necessario per applicazioni Web complesse. Attualmente, stiamo usando gli strumenti ps e funziona bene. Per DB, stiamo pianificando di utilizzare lo strumento DeployDB.
Sunny

Come gestite le situazioni in cui IIS blocca i file? Come gestisci le situazioni quando qualcuno lavora con la tua app. Hai più nodi o semplicemente interrompi l'applicazione per gli utenti che lavorano al momento della pubblicazione?
Piotr Perak,

1
@Peri - Ho dimenticato di menzionare la mia risposta originale, ma stiamo pensando di avere due server di produzione e di passare da uno all'altro quando necessario (utilizzando IIS o nginx). Questo ci consentirà di "riscaldare" l'altro server live quando si verifica la distribuzione e quindi passare ad esso, quindi non dovrebbero esserci tempi di inattività evidenti.
Nicholas,

4

Sto già usando Jenkins per le app .Net e TFS.

  1. Aggiungi la configurazione richiesta nel tuo progetto e trasformazione e check-in nel codice.
  2. Ricevi le ultime novità da TFS (usa il plug-in TFS)
  3. Compilare il progetto (utilizzare il plug-in MSBuild). puoi pubblicare il codice da Msbuild usando gli argomenti della riga di comando.
  4. Sincronizza il codice dalla posizione di pubblicazione alla destinazione utilizzando il comando msdeploy.exe (situato in "C: \ Programmi (x86) \ IIS \ Microsoft Web Deploy V2 \ msdeploy.exe")
  5. Puoi inviare e-mail ed eseguire il backup anche tramite Jenkins.

È inoltre possibile utilizzare MSTest.exe per eseguire unit test e mostrarlo sulla console jenkin o pubblicare anche il risultato del test.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.