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
2
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
3
4. 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:
0.25h
CI executes
Daily Build
Automatic Deployment on Microsoft .Net stack
Cost to fix the issue
– Didn’t you deploy the Service? – Which
service?!
– Manual updates of the configuration.
4h
Issue Detection time
Manual QA
4
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
5
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
6
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
9
10. Locators
•
Match
–
–
•
Condition
–
–
•
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)" />
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
10
12. Publish Profile
• Corresponds to target Environment (server)
– Where to publish
– How to publish
– How to transform
Automatic Deployment on Microsoft .Net stack
12
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
18
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
In House
Azure
Web Platform Installer
(3-clicks)
Pre-installed:
(download publish profile)
• More at TechNet (http://goo.gl/1aM0uu) and IIS.net
(http://goo.gl/hnoMVR)
Automatic Deployment on Microsoft .Net stack
19
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
20
21. Web Deploy Settings in Publish Profile
Automatic Deployment on Microsoft .Net stack
21
22. Command-line run
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
22
23. Run From CI
Msbuild.exe Web.csproj /p:DeployOnBuild=true /p:Configuration=Release
/p:PublishProfile=staging /p:VisualStudioVersion=11.0 stack
Automatic Deployment on Microsoft .Net
/p:Password=p0ssw0rd
23
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
24
27. Process
Build correct version of source code
Change 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
27
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 on Microsoft .Net stack
Automatic Deployment
28
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
31
33. Set ACL Permissions
• Use .wpp.targets (see
http://sedodream.com/2011/11/08/settingfolderpermis
sionsonwebpublish.aspx ).
Automatic Deployment on Microsoft .Net stack
33
34. App_offline.htm
• Takes down the application
• Serve static app_offline.htm to notify users
Automatic Deployment on Microsoft .Net stack
34
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
35
36. Complex scenarios
• Using MSBuild to:
– Prepare
– Build
– Update Configuration
– Execute Deployment
– Etc
• Regex-based transformations for multiple similar
environments (QA1-QA10, Test1-Test10).
Automatic Deployment on Microsoft .Net stack
36
37. Thanks for Your Attention
ivan.antsipau@gmail.com
https://www.facebook.com/Ivan.Antsipau