Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)
-
Upload
is-antipov -
Category
Self Improvement
-
view
401 -
download
4
description
Transcript of Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)
Automatic Deployment
Ivan Antsipau Minsk .NET Meetup #2
2
Process
• Build correct version of source code• Change configuration• Stop the application(s)• Deploy (copy files)• Backup DB(s)• Update DB(s)• Start the application(s)
Automatic Deployment on Microsoft .Net stack
Automatic Deployment on Microsoft .Net stack 3
Automatic Deployment
• “Web Deployment: If You're Using XCopy, You're Doing It Wrong”
– SCOTT HANSELMAN (HTTP://GOO.GL/MHWJ77)
• Mooney’s Law Of Guaranteed Failure:– In the software business, every manual process will suffer at
least a 10% failure rate, no matter how smart the person executing the process. No amount of documentation or formalization will truly fix this, the only resolution is automation.
– (http://goo.gl/nuoVzM)
Automatic Deployment on Microsoft .Net stack 4
Cost
to fi
x th
e iss
ue
Issue Detection timeCI executes Daily Build Manual QA
0.25h
4h
Manual Deployment Drawbacks
• A lot of time:– Can’t run integration tests– Cant’ execute often (no visibility for managers
and stake-holders)– Can’t execute when business decides to
• Error-prone:– Didn’t you deploy the Service? – Which service?!– Manual updates of the configuration.
Automatic Deployment on Microsoft .Net stack 5
Components
• MSBuild (The Microsoft Build Engine)– Build and package
• Web Deploy:– Move to target server
• CI Server: Atlassian Bamboo, TFS, TeamCity, etc– Trigger the process, report the results
Automatic Deployment on Microsoft .Net stack 6
Manage Configuration
• Differ by Environments (server name, etc)• Differ by Build configuration (Debug vs Release)• We want:
– Changes to be automated– Differences to be versioned
Automatic Deployment on Microsoft .Net stack 7
Manage Configuration: transformations
Automatic Deployment on Microsoft .Net stack 8
Preview Transformation
Automatic Deployment on Microsoft .Net stack 9
Transformations (easy xslt)
• Locator (can be omitted): – how to find
• Transform: – what to do
“The Transform attribute specifies what you want to do to the elements that the Locator attribute finds.” MSDN (http://goo.gl/7J4Mz9)
Automatic Deployment on Microsoft .Net stack 10
Locators• Match
– Locator="Match(comma-delimited list of one or more attribute names)“– <add name="AWLT" connectionString="newstring" providerName="newprovider" xdt:Transform="Replace"
xdt:Locator="Match(name)" />
• Condition– Locator="Condition(XPath expression)” (XPath appended to the current element's XPath expression)– <add name="AWLT" connectionString="newstring" providerName="newprovider" xdt:Transform="Replace"
xdt:Locator="Condition(@name='oldname'or @providerName='oldprovider')" />
• Xpath– Locator="XPath(XPath expression)“(XPath IS NOT appended to the current element's XPath expression)– <add name="AWLT" connectionString="newstring" providerName="newprovider" xdt:Transform="Replace"
xdt:Locator="XPath(configuration/connectionStrings[@name='AWLT' or @providerName='System.Data.SqlClient'])" />
Automatic Deployment on Microsoft .Net stack 11
Transforms• Replace
<connectionStrings xdt:Transform="Replace"> <add name="SqlServer" connectionString=“str1;" /> <add name="Entities" connectionString=“str2;" /></connectionStrings>
• Insert• InsertBefore• InsertAfter• Remove• RemoveAll• RemoveAttriburtes
– <compilation xdt:Transform="RemoveAttributes(debug)" />
• SetAttributesMore at MSDN (http://goo.gl/7J4Mz9)
Automatic Deployment on Microsoft .Net stack 12
Publish Profile
• Corresponds to target Environment (server)– Where to publish– How to publish– How to transform
Automatic Deployment on Microsoft .Net stack 13
Publish Profile Settings
Automatic Deployment on Microsoft .Net stack 14
Profile is a Versioned XML File
Automatic Deployment on Microsoft .Net stack 15
Profile-Specific Config Transformations
• Connections strings• External services addresses• Other environment-specific settings
Automatic Deployment on Microsoft .Net stack 16
Profile-Specific Config Transformations
Automatic Deployment on Microsoft .Net stack 17
Chained Transformations
Original web.config file
Configuration-specific
(Web.release.config)
Publish profile –specific
(Web.staging.config)
Automatic Deployment on Microsoft .Net stack 18
Web Deploy (msdeploy)
• The right way to deploy to IIS.• IIS extension:
– Install via MS Web Platform Installer• Command-line tool:
– Comes with VS or installed separately• Bad news: scary syntax• Good news: VS team has prepared msbuild wrappers
Automatic Deployment on Microsoft .Net stack 19
Features• Non-admin deployments (delegation)• Deploy over https (secure)• Powerful:
– Copy files– Remove extra files– Skip rules– Take site offline/online– Run executable remotely– Install libs into GAC– Auto back up– Etc
• More at TechNet (http://goo.gl/1aM0uu) and IIS.net (http://goo.gl/hnoMVR)
In House Azure
Web Platform Installer(3-clicks)
Pre-installed:(download publish profile)
Automatic Deployment on Microsoft .Net stack 20
Command-line vs MSBuild wrappers
Msbuild.exe Web.csproj /p:DeployOnBuild=true /p:Configuration=Release /p:PublishProfile=staging /p:VisualStudioVersion=11.0 /p:Password=p0ssw0rd
Automatic Deployment on Microsoft .Net stack 21
Web Deploy Settings in Publish Profile
Automatic Deployment on Microsoft .Net stack 22
Command-line runMsbuild.exe Web.csproj /p:DeployOnBuild=true /p:Configuration=Release /p:PublishProfile=staging /p:VisualStudioVersion=11.0 /p:Password=p0ssw0rd
Automatic Deployment on Microsoft .Net stack 23
Run From CI
Msbuild.exe Web.csproj /p:DeployOnBuild=true /p:Configuration=Release /p:PublishProfile=staging /p:VisualStudioVersion=11.0 /p:Password=p0ssw0rd
Automatic Deployment on Microsoft .Net stack 24
Update Database
• Migrations:– Run on AppStart – Run before/after deployment
• Database project:– Run before/after deployment– Has publish profiles
Automatic Deployment on Microsoft .Net stack 25
Database Project
26
Command-line publishing
Msbuild.exe /p:VisualStudioVersion=11.0 /t:Rebuild;Publish /p:SqlPublishProfilePath=Database.staging.publish.xml Automatic Deployment on Microsoft .Net stack
Automatic Deployment on Microsoft .Net stack 27
Process
Build correct version of source codeChange configuration• Stop the application(s)Deploy (copy files), skip uploaded files• Backup DB(s)Update DB(s)• Start the application(s)
Automatic Deployment on Microsoft .Net stack 28
Tips and Tricks: version
• MSBuild Community Tasks (https://github.com/loresoft/msbuildtasks)• NuGet package available
Task Description
Add Add numbers
AddTnsName Defines a database host within the Oracle TNSNAMES.ORA file.
AppPoolController Allows control for an application pool on a local or remote machine with IIS installed. The default is to control the application pool on the local machine. If connecting to a remote machine, you can specify the and for the task to run under.
Xslt A task to merge and transform a set of xml files.
XslTransform XslTransform task for Sandcastle.
AssemblyInfo Generates an AssemblyInfo files
Attrib Changes the attributes of files and/or directories
Automatic Deployment on Microsoft .Net stack 29
Usage
Automatic Deployment on Microsoft .Net stack 30
Output Version
Automatic Deployment on Microsoft .Net stack 31
Customize Web Deploy
• ProjectName.Wpp.targets – imported for any web project before build– Web.csproj -> Web.Wpp.targets
Automatic Deployment on Microsoft .Net stack 32
Ignore user-generated files
Automatic Deployment on Microsoft .Net stack 33
Set ACL Permissions
• Use .wpp.targets (see http://sedodream.com/2011/11/08/settingfolderpermissionsonwebpublish.aspx ).
Automatic Deployment on Microsoft .Net stack 34
App_offline.htm
• Takes down the application• Serve static app_offline.htm to notify users
Automatic Deployment on Microsoft .Net stack 35
App_offline.htm
• Store as app_offline.template.htm• Rename to app_offline.htm before deployment• Update db, do other stuff• Skip on deployment (do not delete)• Rename to app_offline.template.htm when done• See details at http://goo.gl/qbGrKA • Alternatively: use AppOffline rule (http://goo.gl/tC0qxz)
Automatic Deployment on Microsoft .Net stack 36
Complex scenarios
• Using MSBuild to:– Prepare– Build– Update Configuration– Execute Deployment– Etc
• Regex-based transformations for multiple similar environments (QA1-QA10, Test1-Test10).
Thanks for Your Attention
[email protected]://www.facebook.com/Ivan.Antsipau
Automatic Deployment on Microsoft .Net stack 38
Links
• App_offline http://sedodream.com/2012/01/08/HowToTakeYourWebAppOfflineDuringPublishing.aspx
• VS2010 Guide http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity.html
• VS2012 Deployment Guide http://www.asp.net/mvc/tutorials/deployment/visual-studio-web-deployment/introduction
• http://stackoverflow.com/questions/tagged/webdeploy• http://stackoverflow.com/questions/tagged/msdeploy• http://blog.richardszalay.com/tag/msdeploy/
Automatic Deployment on Microsoft .Net stack 39
Links
• http://msbuildbook.com/ (examples on github)• MSDN
http://msdn.microsoft.com/en-us/library/0k6kkbsd.aspx
• Sayed Ibrahim Hashimi http://sedodream.com/ , @SayedIHashimi
• http://www.msbuildexplorer.com/• http://stackoverflow.com/questions/tagged/msbuild• http://
msdn.microsoft.com/en-us/library/ms171483.aspx incremental build