Top Banner
Automatic Deployment Ivan Antsipau Minsk .NET Meetup #2
39

Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Aug 26, 2014

Download

Self Improvement

Is Antipov

Automatic deployment on .NET web stack (presentation for Minsk .NET meetup 12.02.14)
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment

Ivan Antsipau Minsk .NET Meetup #2

Page 2: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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

Page 3: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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)

Page 4: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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.

Page 5: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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

Page 6: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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

Page 7: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 7

Manage Configuration: transformations

Page 8: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 8

Preview Transformation

Page 9: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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) 

Page 10: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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'])" />

Page 11: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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) 

Page 12: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 12

Publish Profile

• Corresponds to target Environment (server)– Where to publish– How to publish– How to transform

Page 13: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 13

Publish Profile Settings

Page 14: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 14

Profile is a Versioned XML File

Page 15: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 15

Profile-Specific Config Transformations

• Connections strings• External services addresses• Other environment-specific settings

Page 16: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 16

Profile-Specific Config Transformations

Page 17: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 17

Chained Transformations

Original web.config file

Configuration-specific

(Web.release.config)

Publish profile –specific

(Web.staging.config)

Page 18: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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

Page 19: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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)

Page 20: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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

Page 21: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 21

Web Deploy Settings in Publish Profile

Page 22: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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

Page 23: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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

Page 24: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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

Page 25: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 25

Database Project

Page 26: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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

Page 27: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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)

Page 28: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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

Page 29: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 29

Usage

Page 30: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 30

Output Version

Page 31: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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

Page 32: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 32

Ignore user-generated files

Page 33: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 33

Set ACL Permissions

• Use .wpp.targets (see http://sedodream.com/2011/11/08/settingfolderpermissionsonwebpublish.aspx ).

Page 34: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

Automatic Deployment on Microsoft .Net stack 34

App_offline.htm

• Takes down the application• Serve static app_offline.htm to notify users

Page 35: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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)

Page 36: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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).

Page 38: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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/

Page 39: Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)

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