SlideShare a Scribd company logo
1 of 49
MSBuild in action Ricci Gian Maria  MVP Visual Studio ALM
Essere agili in un mondo in rapido cambiamento Cicli di produzione agili richiedono procedure agili L’agilità richiede visibilità totale sul progetto Deve essere possibile verificare in ogni momento lo “stato di salute” del progetto
Monitoraggio costante del progetto Per approcciare con successo cicli di vita agili, è necessario avere visibilità massima sul progetto La situazione peggiore è quella in cui la visibilità è praticamente nulla Con visibilità ridotta, il pm può solamente effettuare ping sugli sviluppatori No Maybe Is the project finished? ONE WEEK LATER The customersaidit miss feature ABC Toomanytests are failing Westill miss the setup,  oneday more Just one week more
Il concetto di “integrazione” Uno dei problemi maggiori di “visibilità” è il classico IntegrationHell Questo problema avviene quando le varie parti del sistema sono messe insieme per formare il prodotto finale
Il concetto di “integrazione” Solo sistemi con un design perfetto in un mondo perfetto non soffrono di problemi di integrazione Nei team standard, è molto difficile raggiungere un integrazione perfetta tra le parti al primo colpo
Il concetto di “integrazione” La soluzione più semplice al problema è integrare il più spesso possibile Questo approccio garantisce una maggiore visibilità, ed evita di posticipare i problemi che si possono incontrare durante l’integrazione
La vita realedi un progetto Molto spessoglisviluppatoriassumono come “statodi salute” del progettociòcheaccadenelloro pc Questomododipensare è riassuntodallafrase “It works on my machine” Solitamentequindimoltiaspettivengonodimenticati o sottovalutati Installer Deploy in produzione Configurazionedei server Security (sviluppatorichelavorano come admin)
Esempiotipico Setup diapplicazioni windows Creareil setup di un progetto è solitamente (purtroppo) l’ultimaoperazionechevienefatta, spessodifretta Si credeerroneamentecheesista un magico tool che con due click faccia un setup perfetto In applicazioni non banaliquesto non è vero Creare e manutenere fin dall’inizioil setup di un progettopermettediaffrontaresubitoiproblemi
Come integrare 	 Integrare subito il progetto, ovvero rendere il progetto fruibile al cliente fin dalla prima feature implementata I problemi vengono affrontati poco a poco, il progetto è quasi sempre in uno stato “rilasciabile”
Macchine di Integrazione o Build Il maggiornumerodioperazionidiintegrazionedeveessereautomatizzatatramite script Questi script verrannoeseguitiautomaticamentedamacchinedi Build TFS supportanativamentequestoconcettotramitei “build agent” e Tfs build BuildAgent TFS BuildAgent
Integrazione continua ,[object Object]
Requisiti:
Repository singolo
Includere nel repository tutti i tool necessari per l’integrazione
Un’infrastruttura per gestire l’esecuzione degli script di build
Si ottiene
Costantemente si sa se i sorgenti compilano o meno
Costantemente è possibile verificare lo stato dei test e delle metriche di codice
Si possono eseguire operazioni custom, come ad esempio mandare mail, messaggi su twitter, modificare settaggi di IIS, etc,[object Object]
Crearepiù script differenti Si possonocrearepiù script differenti, ogniunodeiqualideputato ad operazionidifferenti Situazionetipica Compilaretuttiiprogetti ad ogni check-in Eseguirei test ad ogni check-in ma non piùspessodiunavoltaogniora. Eseguireoperazioni molto pesanti o test dicaricounavolta al giorno (nightly build) Follow the ten minute rule
Tfs e frequenzadelle build TFS supportamoltiscenari Compilazione ad ognicheckin (continuous) Compilazione a certiintervalli(Es. nightly build) Compilazionemanuale Compilare ad ogni check-in, ma non piùspessodi un datointervallo Build Check-In Check-In Check-In Build Check-In TFS Check-In
Punti di estensione Come estenderetfs build per soddisfareesigenzespecifiche
Come estendere tfsbuild TFS 2008 supportal’esensionetramiteMsBuild Si possonoeseguireoperazioni custom scrivendodei Custom Task dimsbuild La conoscenzadiMsBuild è comunqueimportante, perchè è possibileusareipropri Custom Task anche in TFS 2010 MsBuildvienecomunqueusato per la fasedicompilazione e puòessereusato per customizzare la compilazionedeiprogetti(csproj, vbproj, etc)
Come estendere TFS 2010 build Use a MSBuild Activity to call MSBuild wrapper around a MsBuild task
Come estendere TFS 2010 build Use a MSBuild Activity to call MSBuild wrapper around a MsBuild task
Come estendere TFS 2010 build Wrap MsBuild task in a custom Workflow Activity
Come estendere TFS 2010 build Wrap MsBuild task in a custom Workflow Activity
Come estendere TFS 2010 build Write a custom Workflow Activity
Come estendere TFS 2010 build Write a custom Workflow Activity
Come estendere TFS 2010 build Extract the logic into a POCO class and create wrappers
Come estendere TFS 2010 build Extract the logic into a POCO class and create wrappers
Estensione – Twitter Come eseguire un tweet in particolarimomentidella build
Perchè twitter Disponibilesumoltepiattaforme Disponibilesututti I browser come plugin Affidabile e facile dausare. Puòesseresottoscritto o menodallepersoneinteressate BuildAgent
Tweet from MsBuild Demo di tweet in una build con approccioMsBuildtask e Custom Action
Come inserireuna custom activity Nella Beta2 per inserireuna custom activity è necessarioadottareparticolariaccortezze Il workflow diprocessodeveessereaggiuntoedaperto in un progettodi visual studio Il progetto in cui siapreil workflow deve fare parte diunasoluzione dove è caricatoilprogettochecontiene la custom activity
Lab – Deploy di web application Deployare una web application aggiornando nel contempo il database e l’istanza di IIS nel server di test.
Ambiente Tfs Visual studio  Database Server Web Server Tuttopuòcomunqueesseremessosu un unicamacchina
Fase 1 – ilprogetto Creareuna solution con due progetti Un database project con lo schema dinorthwind Un progetto web con unasemplicepaginachemostrai clienti Creare un modello entityframework Nella default.aspxinserire un entityDataSource Nella default.aspxinserire una gridview
Fase 2 – Creare una build e configurare il deploy del database Creare una build per la soluzione Creare una copia del workflow in modo da poterlo customizzare Localizzare nel workflow il punto dove vengono terminati i test.
Fase 2 – creare la build e configurare il deploy del database Quando si crea la build, la drop share folder deve trovarsi nel test web server Il test web server può comunque essere per questo lab anche la macchina virtuale dove gira tfs e visual studio
Fase 3 inserire la condizione ed una sequenza Inserire una condizione (cerchiata di rosso nella schermata precedente) al cui interno inserire una sequence La condizione da inserire è  BuildDetail.TestStatus <> BuildPhaseStatus.FailedAndAlsoBuildDetail.CompilationStatus <> BuildPhaseStatus.Failed Cambiare il nome della condizione in qualche cosa di più significativo, ad esempio “If can deploy database”
Fase 4 inserire le azioni Inserire tre azioni come in figura Una convertWorkspaceItem Una Message Un MsBuildTask
Fase 5 – inserire la variabile Cliccare su “variables” e poi aggiungere una variabile chiamata dbProject
Fase 6 – recuperare il nome del database project Configurare la ConvertWorkspaceItem precedentemente configurata Come proprietà input inserire il nome del database project usando il percorso del source control system Es. "$/Demo/NorthwindTest/NorthwindTest.Database/NorthwindTest.Database.dbproj“ Come proprietà Result inserire il nome della proprietà creata precedentemente dbProject Infine inserite Workspace come proprietà workspace Ponete particolare attenzione alla sintassi ricordando sempre che si utilizza la sintassi di VisualBasic Infine configurate l’azione di messaggio inserendo un messaggio tipo “Deploying database “ + dbproject
Fase 7 – effettuare il deploy Per il deploy basta configurare l’azione msbuild La proprietà più importante è CommandLineArguments con la quale si specifica l’istanza, il database e dove creare i file. "/p:TargetDatabase=Northwind" +" /p:""DefaultDataPath=C:rogramFilesicrosoft SQL ServerSSQL10.SQL2008SSQLATA""" +" /p:""TargetConnectionString=Data Source=10.0.0.99ql2008,49160%3Buser=sa%3Bpassword=pa$$w0rd""" +" /p:DeployToDatabase=true“ Inserite nella proprietà LogFile un nome di file per il logging e nella proprietà LogFileDropLocation il valore logFileDropLocation Come outDir il valore BinariesDirectory Come Project il valore del progetto, contenuto nella variabile dbProject Come Targets il valore New String() {“Deploy”} con il quale si specifica il target che si vuole eseguire nel progetto database
Azione MsBuild configurata
Primo step completato Tramite questa configurazione si è modificata la build aggiungendo il deploy del database project qualora i test e la compilazione fossero ok Il prossimo passo è modificare il web.config dell’applicazione e far puntare IIS del web server di tset ai compilati della build corrente

More Related Content

What's hot

What's hot (14)

Java Conference 2006 Dessi Massimiliano
Java Conference 2006 Dessi MassimilianoJava Conference 2006 Dessi Massimiliano
Java Conference 2006 Dessi Massimiliano
 
Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3
 
Yagwto
YagwtoYagwto
Yagwto
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
 
Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue js
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 
Introduzione a Struts
Introduzione a StrutsIntroduzione a Struts
Introduzione a Struts
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
 
TDD e Continuous Delivery sull'infrastruttura
TDD e Continuous Delivery sull'infrastrutturaTDD e Continuous Delivery sull'infrastruttura
TDD e Continuous Delivery sull'infrastruttura
 
Tdd e continuous delivery sull'infrastruttura
Tdd e continuous delivery sull'infrastrutturaTdd e continuous delivery sull'infrastruttura
Tdd e continuous delivery sull'infrastruttura
 
I processi di sviluppo software: l'evoluzione agile ed il DevOps
I processi di sviluppo software: l'evoluzione agile ed il DevOpsI processi di sviluppo software: l'evoluzione agile ed il DevOps
I processi di sviluppo software: l'evoluzione agile ed il DevOps
 

Viewers also liked (7)

Integrazione continua e Deploy automatizzato
Integrazione continua e Deploy automatizzatoIntegrazione continua e Deploy automatizzato
Integrazione continua e Deploy automatizzato
 
Alfresco Tech Talk - CMIS
Alfresco Tech Talk - CMISAlfresco Tech Talk - CMIS
Alfresco Tech Talk - CMIS
 
The Abstraction of Apache Hadoop
The Abstraction of Apache HadoopThe Abstraction of Apache Hadoop
The Abstraction of Apache Hadoop
 
NoSQL, No sweat with JBoss Data Grid
NoSQL, No sweat with JBoss Data GridNoSQL, No sweat with JBoss Data Grid
NoSQL, No sweat with JBoss Data Grid
 
JBoss AS 7 / EAP 6 modules and class loading
JBoss AS 7 / EAP 6 modules and class loadingJBoss AS 7 / EAP 6 modules and class loading
JBoss AS 7 / EAP 6 modules and class loading
 
JBoss EAP 6 - Start / Application Deployment Process
JBoss EAP 6 - Start / Application Deployment ProcessJBoss EAP 6 - Start / Application Deployment Process
JBoss EAP 6 - Start / Application Deployment Process
 
Jboss Tutorial Basics
Jboss Tutorial BasicsJboss Tutorial Basics
Jboss Tutorial Basics
 

Similar to Integrazione continua con TFS Build

Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
DotNetCampus
 

Similar to Integrazione continua con TFS Build (20)

Tfs Basic - Quick Intro
Tfs Basic - Quick IntroTfs Basic - Quick Intro
Tfs Basic - Quick Intro
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010
 
Il buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita feliceIl buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita felice
 
Windows Workflow Foundation 4
Windows Workflow Foundation 4Windows Workflow Foundation 4
Windows Workflow Foundation 4
 
Webcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio OnlineWebcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio Online
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
 
Windows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoWindows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppo
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.js
 
CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVER
 
DotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerDotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql Server
 
Cert02 70-410
Cert02   70-410Cert02   70-410
Cert02 70-410
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuro
 
Flavio ATZENI - SMAU 2014
Flavio ATZENI - SMAU 2014Flavio ATZENI - SMAU 2014
Flavio ATZENI - SMAU 2014
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
DotNetCampus 2014 - BING e Windows Store App
DotNetCampus 2014 - BING e Windows Store AppDotNetCampus 2014 - BING e Windows Store App
DotNetCampus 2014 - BING e Windows Store App
 
Flavio atzeni smau mi 2013
Flavio atzeni smau  mi 2013Flavio atzeni smau  mi 2013
Flavio atzeni smau mi 2013
 
UI Composition
UI CompositionUI Composition
UI Composition
 
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
 

More from Gian Maria Ricci

More from Gian Maria Ricci (20)

Se non sviluppo codice non sto lavorando
Se non sviluppo codice non sto lavorandoSe non sviluppo codice non sto lavorando
Se non sviluppo codice non sto lavorando
 
Gestire la qualità del codice con Visual Studio, SonarQube ed Azure Devops
Gestire la qualità del codice con Visual Studio, SonarQube ed Azure DevopsGestire la qualità del codice con Visual Studio, SonarQube ed Azure Devops
Gestire la qualità del codice con Visual Studio, SonarQube ed Azure Devops
 
Migrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a GitMigrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a Git
 
Real World Build + Release automation in Azure DevOps
Real World Build + Release automation in Azure DevOpsReal World Build + Release automation in Azure DevOps
Real World Build + Release automation in Azure DevOps
 
Gestire i rilasci automatici con azure devops
Gestire i rilasci automatici con azure devopsGestire i rilasci automatici con azure devops
Gestire i rilasci automatici con azure devops
 
Build and release in code with azure devops pipelines
Build and release in code with azure devops pipelinesBuild and release in code with azure devops pipelines
Build and release in code with azure devops pipelines
 
Azure Pipeline in salsa yaml
Azure Pipeline in salsa yamlAzure Pipeline in salsa yaml
Azure Pipeline in salsa yaml
 
Git gitflow pull requests in devops focused teams
Git gitflow pull requests in devops focused teamsGit gitflow pull requests in devops focused teams
Git gitflow pull requests in devops focused teams
 
Distribute your code with NUget and build vNext
Distribute your code with NUget and build vNextDistribute your code with NUget and build vNext
Distribute your code with NUget and build vNext
 
Manage your environment with DSC
Manage your environment with DSCManage your environment with DSC
Manage your environment with DSC
 
Introduction to Application insights
Introduction to Application insightsIntroduction to Application insights
Introduction to Application insights
 
Git branching model
Git branching modelGit branching model
Git branching model
 
Deploy applications with TFS Build
Deploy applications with TFS BuildDeploy applications with TFS Build
Deploy applications with TFS Build
 
TFS - Quale source control
TFS - Quale source controlTFS - Quale source control
TFS - Quale source control
 
Branch model in Git
Branch model in GitBranch model in Git
Branch model in Git
 
Introduction to Visual Studio Online
Introduction to Visual Studio OnlineIntroduction to Visual Studio Online
Introduction to Visual Studio Online
 
Git si o Git No
Git si o Git NoGit si o Git No
Git si o Git No
 
Testing
TestingTesting
Testing
 
Come Organizzare il proprio Team Project
Come Organizzare il proprio Team ProjectCome Organizzare il proprio Team Project
Come Organizzare il proprio Team Project
 
Git Perchè Usarlo
Git Perchè UsarloGit Perchè Usarlo
Git Perchè Usarlo
 

Integrazione continua con TFS Build

  • 1.
  • 2. MSBuild in action Ricci Gian Maria MVP Visual Studio ALM
  • 3. Essere agili in un mondo in rapido cambiamento Cicli di produzione agili richiedono procedure agili L’agilità richiede visibilità totale sul progetto Deve essere possibile verificare in ogni momento lo “stato di salute” del progetto
  • 4. Monitoraggio costante del progetto Per approcciare con successo cicli di vita agili, è necessario avere visibilità massima sul progetto La situazione peggiore è quella in cui la visibilità è praticamente nulla Con visibilità ridotta, il pm può solamente effettuare ping sugli sviluppatori No Maybe Is the project finished? ONE WEEK LATER The customersaidit miss feature ABC Toomanytests are failing Westill miss the setup, oneday more Just one week more
  • 5. Il concetto di “integrazione” Uno dei problemi maggiori di “visibilità” è il classico IntegrationHell Questo problema avviene quando le varie parti del sistema sono messe insieme per formare il prodotto finale
  • 6. Il concetto di “integrazione” Solo sistemi con un design perfetto in un mondo perfetto non soffrono di problemi di integrazione Nei team standard, è molto difficile raggiungere un integrazione perfetta tra le parti al primo colpo
  • 7. Il concetto di “integrazione” La soluzione più semplice al problema è integrare il più spesso possibile Questo approccio garantisce una maggiore visibilità, ed evita di posticipare i problemi che si possono incontrare durante l’integrazione
  • 8. La vita realedi un progetto Molto spessoglisviluppatoriassumono come “statodi salute” del progettociòcheaccadenelloro pc Questomododipensare è riassuntodallafrase “It works on my machine” Solitamentequindimoltiaspettivengonodimenticati o sottovalutati Installer Deploy in produzione Configurazionedei server Security (sviluppatorichelavorano come admin)
  • 9. Esempiotipico Setup diapplicazioni windows Creareil setup di un progetto è solitamente (purtroppo) l’ultimaoperazionechevienefatta, spessodifretta Si credeerroneamentecheesista un magico tool che con due click faccia un setup perfetto In applicazioni non banaliquesto non è vero Creare e manutenere fin dall’inizioil setup di un progettopermettediaffrontaresubitoiproblemi
  • 10. Come integrare Integrare subito il progetto, ovvero rendere il progetto fruibile al cliente fin dalla prima feature implementata I problemi vengono affrontati poco a poco, il progetto è quasi sempre in uno stato “rilasciabile”
  • 11. Macchine di Integrazione o Build Il maggiornumerodioperazionidiintegrazionedeveessereautomatizzatatramite script Questi script verrannoeseguitiautomaticamentedamacchinedi Build TFS supportanativamentequestoconcettotramitei “build agent” e Tfs build BuildAgent TFS BuildAgent
  • 12.
  • 15. Includere nel repository tutti i tool necessari per l’integrazione
  • 16. Un’infrastruttura per gestire l’esecuzione degli script di build
  • 18. Costantemente si sa se i sorgenti compilano o meno
  • 19. Costantemente è possibile verificare lo stato dei test e delle metriche di codice
  • 20.
  • 21. Crearepiù script differenti Si possonocrearepiù script differenti, ogniunodeiqualideputato ad operazionidifferenti Situazionetipica Compilaretuttiiprogetti ad ogni check-in Eseguirei test ad ogni check-in ma non piùspessodiunavoltaogniora. Eseguireoperazioni molto pesanti o test dicaricounavolta al giorno (nightly build) Follow the ten minute rule
  • 22. Tfs e frequenzadelle build TFS supportamoltiscenari Compilazione ad ognicheckin (continuous) Compilazione a certiintervalli(Es. nightly build) Compilazionemanuale Compilare ad ogni check-in, ma non piùspessodi un datointervallo Build Check-In Check-In Check-In Build Check-In TFS Check-In
  • 23. Punti di estensione Come estenderetfs build per soddisfareesigenzespecifiche
  • 24. Come estendere tfsbuild TFS 2008 supportal’esensionetramiteMsBuild Si possonoeseguireoperazioni custom scrivendodei Custom Task dimsbuild La conoscenzadiMsBuild è comunqueimportante, perchè è possibileusareipropri Custom Task anche in TFS 2010 MsBuildvienecomunqueusato per la fasedicompilazione e puòessereusato per customizzare la compilazionedeiprogetti(csproj, vbproj, etc)
  • 25. Come estendere TFS 2010 build Use a MSBuild Activity to call MSBuild wrapper around a MsBuild task
  • 26. Come estendere TFS 2010 build Use a MSBuild Activity to call MSBuild wrapper around a MsBuild task
  • 27. Come estendere TFS 2010 build Wrap MsBuild task in a custom Workflow Activity
  • 28. Come estendere TFS 2010 build Wrap MsBuild task in a custom Workflow Activity
  • 29. Come estendere TFS 2010 build Write a custom Workflow Activity
  • 30. Come estendere TFS 2010 build Write a custom Workflow Activity
  • 31. Come estendere TFS 2010 build Extract the logic into a POCO class and create wrappers
  • 32. Come estendere TFS 2010 build Extract the logic into a POCO class and create wrappers
  • 33. Estensione – Twitter Come eseguire un tweet in particolarimomentidella build
  • 34. Perchè twitter Disponibilesumoltepiattaforme Disponibilesututti I browser come plugin Affidabile e facile dausare. Puòesseresottoscritto o menodallepersoneinteressate BuildAgent
  • 35. Tweet from MsBuild Demo di tweet in una build con approccioMsBuildtask e Custom Action
  • 36. Come inserireuna custom activity Nella Beta2 per inserireuna custom activity è necessarioadottareparticolariaccortezze Il workflow diprocessodeveessereaggiuntoedaperto in un progettodi visual studio Il progetto in cui siapreil workflow deve fare parte diunasoluzione dove è caricatoilprogettochecontiene la custom activity
  • 37. Lab – Deploy di web application Deployare una web application aggiornando nel contempo il database e l’istanza di IIS nel server di test.
  • 38. Ambiente Tfs Visual studio Database Server Web Server Tuttopuòcomunqueesseremessosu un unicamacchina
  • 39. Fase 1 – ilprogetto Creareuna solution con due progetti Un database project con lo schema dinorthwind Un progetto web con unasemplicepaginachemostrai clienti Creare un modello entityframework Nella default.aspxinserire un entityDataSource Nella default.aspxinserire una gridview
  • 40.
  • 41. Fase 2 – Creare una build e configurare il deploy del database Creare una build per la soluzione Creare una copia del workflow in modo da poterlo customizzare Localizzare nel workflow il punto dove vengono terminati i test.
  • 42. Fase 2 – creare la build e configurare il deploy del database Quando si crea la build, la drop share folder deve trovarsi nel test web server Il test web server può comunque essere per questo lab anche la macchina virtuale dove gira tfs e visual studio
  • 43. Fase 3 inserire la condizione ed una sequenza Inserire una condizione (cerchiata di rosso nella schermata precedente) al cui interno inserire una sequence La condizione da inserire è BuildDetail.TestStatus <> BuildPhaseStatus.FailedAndAlsoBuildDetail.CompilationStatus <> BuildPhaseStatus.Failed Cambiare il nome della condizione in qualche cosa di più significativo, ad esempio “If can deploy database”
  • 44. Fase 4 inserire le azioni Inserire tre azioni come in figura Una convertWorkspaceItem Una Message Un MsBuildTask
  • 45. Fase 5 – inserire la variabile Cliccare su “variables” e poi aggiungere una variabile chiamata dbProject
  • 46. Fase 6 – recuperare il nome del database project Configurare la ConvertWorkspaceItem precedentemente configurata Come proprietà input inserire il nome del database project usando il percorso del source control system Es. "$/Demo/NorthwindTest/NorthwindTest.Database/NorthwindTest.Database.dbproj“ Come proprietà Result inserire il nome della proprietà creata precedentemente dbProject Infine inserite Workspace come proprietà workspace Ponete particolare attenzione alla sintassi ricordando sempre che si utilizza la sintassi di VisualBasic Infine configurate l’azione di messaggio inserendo un messaggio tipo “Deploying database “ + dbproject
  • 47. Fase 7 – effettuare il deploy Per il deploy basta configurare l’azione msbuild La proprietà più importante è CommandLineArguments con la quale si specifica l’istanza, il database e dove creare i file. "/p:TargetDatabase=Northwind" +" /p:""DefaultDataPath=C:rogramFilesicrosoft SQL ServerSSQL10.SQL2008SSQLATA""" +" /p:""TargetConnectionString=Data Source=10.0.0.99ql2008,49160%3Buser=sa%3Bpassword=pa$$w0rd""" +" /p:DeployToDatabase=true“ Inserite nella proprietà LogFile un nome di file per il logging e nella proprietà LogFileDropLocation il valore logFileDropLocation Come outDir il valore BinariesDirectory Come Project il valore del progetto, contenuto nella variabile dbProject Come Targets il valore New String() {“Deploy”} con il quale si specifica il target che si vuole eseguire nel progetto database
  • 49. Primo step completato Tramite questa configurazione si è modificata la build aggiungendo il deploy del database project qualora i test e la compilazione fossero ok Il prossimo passo è modificare il web.config dell’applicazione e far puntare IIS del web server di tset ai compilati della build corrente
  • 50. Fase 1 – Custom Action Creare un progetto di tipo ClassLibrary Aggiungere due Code activity, IISChangePhisicalDir e XmlPoke Creare un altro progetto classlibrary dove creare due classi XmlFunctions e IISManagerService Copiare il codice fornito nell’esempio nelle varie classi Aggiungere un progetto Workflow console application
  • 51. Fase 2 – un piccolo test Testare le azioni all’interno del workflow1.xaml creato nel progetto console workflow per verificare che tutto funzioni correttamente. Provare ad esempio con un file xml di test l’azione xmlPoke che modifica parte dell’xml
  • 52. Fase 3 – il web server Nel web server dovreste trovarvi il risultato di una delle build precedenti Andate nella cartella dove avete fatto la share della drop folder e localizzate la cartella dove è stata deployata la web application Configurate IIS puntandolo alla cartella suddetta e creare un appPool dedicato con un nome specifico Es. NorthwindTest Verificate che il sito funzioni correttamente
  • 53. Fase 4 – aggiungere le custom action alla build Nella beta 2, per aggiungere le custom action ad un file xaml tramite designer è necessario procedere nel seguente modo Copiare il file della build Es. NorthwindTest.xaml nella cartella del progetto di test WorkflowConsoleApplication creato precedentemente Aggiungere il workflow al progetto Ora è possibile agire tramite designer grafico Quando il file è finito, fare checkout del file nella cartella BuildProcessTemplate, copiare il file modificato e fare checkin
  • 54. Fase 5 – cambiare la directory di un sito IIS da remoto Inserire dopo la azione msbuild che effettua il deploy del database una azione custom di tipo IISChangePhisicalDir Compilare le proprietà, l’unica che merita una spiegazione è la NewFolder che avrà un valore del tipo "C:uildsResultorthWindTestquot; + BuildDetail.BuildNumber + "PublishedWebsitesorthwindTest.Web“ Questo valore viene calcolato sulla base di Dove è stata fatta la share nel web server di test Si aggiunge il numero di build Si aggiunge il path che porta ai compilati.
  • 55. Fase 6 - opzionale Il lab potrebbe considerarsi completato, ma in una situazione di produzione, il web.config nel source control non è eguale a quello che serve al web.server Es. Bisogna cambiare la stringa di connessione al sql server. Aggiungre una variabile chiamata webConfigFile Aggiungere una azione standard “Assign” ed assegnare a quela variabile il valore BuildDirectory + "inariesPublishedWebsitesorthwindTest.Webeb.config“ Aggiungere un azione di messaggio di build in cui si mostra il file che verrà cambiato Aggiungere una azione di tipo XmlPoke e configurarla in modo da cambiare il file web.config nel modo desiderato.
  • 56. Fase 6 – opzionale I valori per xmlpoke sono ad esempio NewValue (Ricordare le doppie virgolette perché siamo in VisualBasic): "metadata=res://*/Model.NortwindContext.csdl|res://*/Model.NortwindContext.ssdl|res://*/Model.NortwindContext.msl;provider=System.Data.SqlClient;provider connection string=""Data Source=localhostql2008;InitialCatalog=Northwind;IntegratedSecurity=True;MultipleActiveResultSets=True""“ Xpath: "/connectionStrings/add[@name='NorthwindEntities']/@connectionString"