Ideal Deployment In .NET World

42
Ideal Dima Pasko Deployment In .NET World

description

Presented on XP Days Kyiv 17.12.2011

Transcript of Ideal Deployment In .NET World

Page 1: Ideal Deployment In .NET World

Ideal

Dima Pasko

DeploymentIn .NET World

Page 2: Ideal Deployment In .NET World

Windows Phone

About Me

Page 3: Ideal Deployment In .NET World

Windows Phone

Introduction

Page 4: Ideal Deployment In .NET World

Windows Phone

Human beings make mistakes

Page 5: Ideal Deployment In .NET World

Windows Phone

We aren’t as accurate every time

Page 6: Ideal Deployment In .NET World

Windows Phone

Click to add picture

Machines don’t have this problem

Page 7: Ideal Deployment In .NET World

Windows Phone

They do the same thing every time

Click to add picture

They do the same thing every time

Page 8: Ideal Deployment In .NET World

What Do You Need?

New Code New Configuration New Database Schema New Static Files

Page 9: Ideal Deployment In .NET World

A Lot To Remember

Did you remember to upload ALL new files? Did you remember to update your DB? Did you remember to correct your config? Did you remember set permissions?

Page 10: Ideal Deployment In .NET World

Even Worse

Did you clear your caches? Did you delete that old file/plugin? In the upload process, was your configuration overwritten? Did you upload ALL the changed files? Do you have several environments?

Page 11: Ideal Deployment In .NET World

Windows Phone

Solution

Page 12: Ideal Deployment In .NET World

Automation!

Build scripts! We are programmers after all…

Page 13: Ideal Deployment In .NET World

What Is Automation? Automated deployment means a single command

Locks your live site Uploads changed files Clears caches and temporary files Updates the database schema Runs other cron tasks Unlocks your live site … Profit

Page 14: Ideal Deployment In .NET World

Why Do We Automate?

Deployment is tricky Repetition degrades quality

She sells sea shells by the sea shore

Page 15: Ideal Deployment In .NET World

When Is Automation Used?

All the time! Staging Live

Probably best to use it on your test/dev box too!

Page 16: Ideal Deployment In .NET World

Windows Phone

Basics

Page 17: Ideal Deployment In .NET World

Terms

Package(build) Solution != package

Environment(settings) Deployment

Rollout Go Live

Page 18: Ideal Deployment In .NET World

Principles

One-click deployment Process Everything fails Rollback

Page 19: Ideal Deployment In .NET World

Steps

Configuration Management Deployment Logic

Database Migration

Page 20: Ideal Deployment In .NET World

Windows Phone

Configuration Management

Page 21: Ideal Deployment In .NET World

Xml Configuration

XML, XPath, XSLT NConfig

https://github.com/Yegoroff/NConfig

Page 22: Ideal Deployment In .NET World

Web.Config Transformation

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

<appSettings><add key="article" value=“test"

xdt:Transform="Insert"/></appSettings>

</configuration>

Page 23: Ideal Deployment In .NET World

Windows Phone

Demo

Page 24: Ideal Deployment In .NET World

Windows Phone

Deployment Logic

Page 25: Ideal Deployment In .NET World

Power Shell

Page 26: Ideal Deployment In .NET World

PSakeTask default -Depends Build

Task Build -Depends Init,Clean,Compile{ "build"}

Task Compile -Depends Clean, Init { "compile"}

Task Clean -Depends Init { "clean"}

Task Init { "init"}%

https://github.com/psake/psake/

Page 27: Ideal Deployment In .NET World

NAnt/MSbuild

http://nant.sourceforge.net/

Page 28: Ideal Deployment In .NET World
Page 29: Ideal Deployment In .NET World

DropKick ~ deploy fluently

https://github.com/chucknorris/dropkick

Page 30: Ideal Deployment In .NET World

MSDeploy

Page 31: Ideal Deployment In .NET World

Windows Phone

Demo

Page 32: Ideal Deployment In .NET World

Windows Phone

DB Versioning

Page 33: Ideal Deployment In .NET World

Visual Studio Database Project

Page 34: Ideal Deployment In .NET World

Migrator.NETusing Migrator.Framework;using System.Data;

namespace DBMigration{        [Migration(20080401110402)]        public class CreateUserTable_001 : Migration        {                public void Up()                {                        Database.CreateTable("User",                                new Column("UserId", DbType.Int32, ColumnProperties.PrimaryKeyWithIdentity),                                new Column("Username", DbType.AnsiString, 25)                                );                }

                public void Down()                {                        Database.RemoveTable("User");                }        }}

http://code.google.com/p/migratordotnet/

Page 35: Ideal Deployment In .NET World

Windows Phone

Demo

Page 36: Ideal Deployment In .NET World

Windows Phone

Release Management

Page 37: Ideal Deployment In .NET World

Release Management

Build Master http://inedo.com/

Octopus Deploy http://octopusdeploy.com/

Thought Works Studio – Go http://www.thoughtworks-studios.com/

Page 38: Ideal Deployment In .NET World

Windows Phone

One more thing

Page 39: Ideal Deployment In .NET World

Push deployment

Hg, Git, Svn http://www.heroku.com/

Page 40: Ideal Deployment In .NET World

App Harbor

Azure done right git push appharbor master

Page 41: Ideal Deployment In .NET World

thanks to• Maxim Tihobrazov• Mike Chaliy• Anatoliy Kolesnick• Anton Vnogradenko• Ivan Korneliuk• Aleksander Yegoroff• Andrey Kashcha• Andrey Kotenko• Andrey Kozhyn

31337