Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ぼくの考えた割と普通(c)なデプロイ戦略
Search
tanaka_733
July 27, 2013
Technology
1
11k
ぼくの考えた割と普通(c)なデプロイ戦略
こみゅぷらすで話したMSBuild, MSDeploy のお話。
tanaka_733
July 27, 2013
Tweet
Share
More Decks by tanaka_733
See All by tanaka_733
SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法
tanaka733
2
10k
Calling PowerShell from CSharp
tanaka733
0
1.8k
Garbage Collection in .NET Framework
tanaka733
4
2.9k
New Features in Visual Studio 2013
tanaka733
0
1.1k
Starting Unity for Windows Store App
tanaka733
0
840
とあるインフラエンジニアのAzure活用
tanaka733
2
590
ASP.NET MVC4 Web APIをバックエンドにして作るストアとWindows Phoneプッシュ通知アプリ
tanaka733
0
1.8k
Yurufuwa_CSharp.pdf
tanaka733
0
5.1k
Windows ストアアプリで Push通知を使いこなそう
tanaka733
0
2k
Other Decks in Technology
See All in Technology
仕様は“書く”より“語る” - 分断を超えたチーム開発の実践 / 20251115 Naoki Takahashi
shift_evolve
PRO
1
960
Kubernetesと共にふりかえる! エンタープライズシステムのインフラ設計・テストの進め方大全
daitak
0
300
Perlブートキャンプ
hatena
0
200
LINEヤフー バックエンド組織・体制の紹介
lycorptech_jp
PRO
0
780
今、MySQLのバックアップを作り直すとしたら何がどう良いのかを考える旅
yoku0825
2
400
持続可能なアクセシビリティ開発
azukiazusa1
4
160
Spring Boot利用を前提としたJavaライブラリ開発方法の提案
kokihoshihara
PRO
2
230
なぜThrottleではなくDebounceだったのか? 700並列リクエストと戦うサーバーサイド実装のすべて
yoshiori
13
4.6k
Redux → Recoil → Zustand → useSyncExternalStore: 状態管理の10年とReact本来の姿
zozotech
PRO
16
8.5k
ZOZOTOWNカート決済リプレイス ── モジュラモノリスという過渡期戦略
zozotech
PRO
0
400
[mercari GEARS 2025] Building Foundation for Mercari’s Global Expansion
mercari
PRO
1
140
「データ無い! 腹立つ! 推論する!」から 「データ無い! 腹立つ! データを作る」へ チームでデータを作り、育てられるようにするまで / How can we create, use, and maintain data ourselves?
moznion
8
4.4k
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1032
470k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Designing for humans not robots
tammielis
254
26k
We Have a Design System, Now What?
morganepeng
54
7.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Code Review Best Practice
trishagee
72
19k
What's in a price? How to price your products and services
michaelherold
246
12k
Scaling GitHub
holman
463
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Transcript
ぼくの考えた 割と普通©な デプロイ戦略 とある企業でのMSBuild, MSDeploy のユースケース 2013/07/27 @tanaka_733
自己紹介 @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とかもろもろ使ってます
そんな企業でのデプロイ事情 1日数回デプロイすることもある ×デプロイ担当がデプロイ、◦開発者はみんなデプロイできる 開発者がgit push したらお仕事終わり!ではない
ASP.NET なので当然ビルドしたものを配布する PHPやRubyならリポジトリにあるソース配布=> (bundle ほげもげ) ですけど LB (Load Balancer)配下に3桁ほどのサーバーたち グループに分けて、1グループずつLBから外してアップデート (ローリングアップデート方式)
というわけで今日のテーマ MSBuild や MSDeploy を現場でどう使って居るか MSDNにリファレンスはあるものの どう使いこなすかはあまり見当たらない
そのあたりの情報を共有したい おことわり これがベストプラクティスだとは思っていません 現状でも改善したいところあるし つっこみ歓迎
ビルド~デプロイの流れ Git コミット 開発者 CI Server Deploy Server ソース取得 タグつけ
パッケージ取得 デプロイ
MSBuildでやっていること GitのコミットハッシュをDLLに埋め込む CIでビルドすると環境変数でコミットハッシュが渡されるので、 それをDLLに埋め込む処理をビルド前に行う ターゲットは Package を指定
後述するWeb配置ツール(MSDeploy)で 配布元となる圧縮ファイルを作成してくれる Batファイルも作ってくれるので、 単体のデプロイはそこからも可能 Visual Studioからは「Webのパッケージ化/発行」で設定 デバッグシンボルを含めるか、などの設定が可能
MSBuild /p の指定 ASP.NET MVC 4なのでViewもビルドしよう Viewまで静的型チェックできるなんてC#すばらし
MvcBuildViews=true デフォルトのcsprojですでに作られている Viewをプリコンパイルしておきましょう PrecompileBeforePublish=true 接続先、ログ設定などはビルド構成をわけて設定 Configuration=Release Web.config変換を使用 Deploy先のWebサイトの名前を指定 MSDeploy時に変更することも可能 DeployIisPath=Deploy
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>
軽くデモ MVCApplication をMSBuild >C:¥WINDOWS¥Microsoft.NET¥Framework64¥v4.0.30319¥MSBuild.exe MvcApplication4¥MvcApplication4.csproj /m /p:Configuration=Release,MvcBuildView=true,PrecompileBeforePubl ish=true
/t:Clean,Package
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"
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ではなく、弊社エンジニアによるライブラリを使用
万一ロールバックしたいときは… MSDeployというかWeb配置ツールに 指定した世代だけバックアップする仕組みあります でも、デフォルトの挙動がデプロイ時の時刻で名前付け 複数台のサーバーがあると時刻がずれる もしかすると想定している使い方ではないのかもしれない…
リリースビルドごとにgitのタグをつけて、 ロールバック時はロールバックしたいタグを指定して デプロイし直し
まとめ MSBuild でパッケージングして、MSDeployで配布 MSDeployはコマンドライン、PowerShell、DLL参照のいずれでも 実行できる リファレンスとしての情報はあるけど、 この方法でいいのか?的な悩みは尽きない…
というわけで、勉強会とかあるといいなあと。 興味のある方はぜひ一緒に