Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ぼくの考えた割と普通(c)なデプロイ戦略

 ぼくの考えた割と普通(c)なデプロイ戦略

こみゅぷらすで話したMSBuild, MSDeploy のお話。

tanaka_733

July 27, 2013
Tweet

More Decks by tanaka_733

Other Decks in Technology

Transcript

  1. 自己紹介 @tanaka_733  最近C# になったソーシャルゲームの会社「グラニ」に勤務  Windows Serverなインフラなお話もいつかしたいですね  Microsoft

    MVP for Visual C# になりました (2013.7-)  とはいえ、業務経験的には Java >> Ruby > C#  めとべや東京  ブログ「銀の光と碧い空」  http://techblog.hilife-jp.info/  「コードから触るIIS8」という連載、Build Insiderで始めました  http://www.buildinsider.net/web/iis8  お仕事はインフラ担当  Windows Server2012/IIS8/ARRv3/ASP.NET MVC 4 な環境  AWS上で、RDSとかもろもろ使ってます
  2. そんな企業でのデプロイ事情  1日数回デプロイすることもある  ×デプロイ担当がデプロイ、◦開発者はみんなデプロイできる  開発者がgit push したらお仕事終わり!ではない 

    ASP.NET なので当然ビルドしたものを配布する  PHPやRubyならリポジトリにあるソース配布=> (bundle ほげもげ) ですけど  LB (Load Balancer)配下に3桁ほどのサーバーたち  グループに分けて、1グループずつLBから外してアップデート (ローリングアップデート方式)
  3. というわけで今日のテーマ  MSBuild や MSDeploy を現場でどう使って居るか  MSDNにリファレンスはあるものの  どう使いこなすかはあまり見当たらない

     そのあたりの情報を共有したい  おことわり  これがベストプラクティスだとは思っていません  現状でも改善したいところあるし  つっこみ歓迎
  4. MSBuildでやっていること  GitのコミットハッシュをDLLに埋め込む  CIでビルドすると環境変数でコミットハッシュが渡されるので、 それをDLLに埋め込む処理をビルド前に行う  ターゲットは Package を指定

     後述するWeb配置ツール(MSDeploy)で 配布元となる圧縮ファイルを作成してくれる  Batファイルも作ってくれるので、 単体のデプロイはそこからも可能  Visual Studioからは「Webのパッケージ化/発行」で設定  デバッグシンボルを含めるか、などの設定が可能
  5. MSBuild /p の指定  ASP.NET MVC 4なのでViewもビルドしよう  Viewまで静的型チェックできるなんてC#すばらし 

    MvcBuildViews=true  デフォルトのcsprojですでに作られている  Viewをプリコンパイルしておきましょう  PrecompileBeforePublish=true  接続先、ログ設定などはビルド構成をわけて設定  Configuration=Release  Web.config変換を使用  Deploy先のWebサイトの名前を指定  MSDeploy時に変更することも可能  DeployIisPath=Deploy
  6. MvcBuildViewsで MachineToApplicationとかいう エラーが出た時は…  こんなエラーが出ることがあります  allowDefinition='MachineToApplication' として登録されているセクション を使うことはできません。 

    csproj のMvcBuildViews のところにToolPathを指定しましょう <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> <AspNetCompiler ToolPath=“C:¥Windows¥Microsoft.NET¥Framework¥v4.0.30319” VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target>
  7. MSDeploy によるデプロイ  あらかじめDeploy対象のサーバーにはWeb配置ツールをインストール  {Project}.Deploy.cmd というバッチファイルを実行すると デプロイできます  Deploy先のComputer名、管理者権限のユーザーとパスワードを指定

     実体は MSDeployコマンドを実行 >"C:¥Program Files¥IIS¥Microsoft Web Deploy V3¥msdeploy.exe" -verb:sync -source:Package='C:¥temp¥MvcApplication4.zip' -dest:auto,computerName="http://bu ildinsider2.cloudapp.net/MSDeployAgentService",userName="tanaka733",password=“Password", includeAcls="False" -disableLink:AppPoolExtension -disableLink:ContentE xtension -disableLink:CertificateExtension -setParamFile:"C:¥temp¥MvcApplication 4.SetParameters.xml"
  8. Deploy Tool  1台Deployするだけならコマンドラインでも苦じゃないものの  グループにわけてDeployするとなるとめんどい  LB関連の作業もあるし  じゃあGUIから操作できるようにしよう

     WPF製Deploy Tool  MSDeploy はコマンドライン経由ではなく、 DLL参照してC#コードで記述  ブログ記事: http://techblog.hilife-jp.info/2013/07/msdeploy-from-csharp/  LB関連操作他はRunspace経由でPowerShellから実行  単純なScriptではなく、弊社エンジニアによるライブラリを使用