Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
21st ACRi Webinar - AMD Presentation Slide (Nao Sumikawa)
nao_sumikawa
0
240
バグハンター視点によるサプライチェーンの脆弱性
scgajge12
3
940
Microsoft Agent 365 を 30 分でなんとなく理解する
skmkzyk
1
510
GitHub Copilotを使いこなす 実例に学ぶAIコーディング活用術
74th
3
590
Kubernetes Multi-tenancy: Principles and Practices for Large Scale Internal Platforms
hhiroshell
0
110
コミューンのデータ分析AIエージェント「Community Sage」の紹介
fufufukakaka
0
420
安いGPUレンタルサービスについて
aratako
2
2.6k
pmconf2025 - データを活用し「価値」へ繋げる
glorypulse
0
690
Noを伝える技術2025: 爆速合意形成のためのNICOフレームワーク速習 #pmconf2025
aki_iinuma
2
2k
プロダクトマネージャーが押さえておくべき、ソフトウェア資産とAIエージェント投資効果 / pmconf2025
i35_267
2
570
21st ACRi Webinar - Univ of Tokyo Presentation Slide (Shinya Takamaeda)
nao_sumikawa
0
120
小さな判断で育つ、大きな意思決定力 / 20251204 Takahiro Kinjo
shift_evolve
PRO
1
560
Featured
See All Featured
A better future with KSS
kneath
240
18k
How GitHub (no longer) Works
holman
316
140k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Mobile First: as difficult as doing things right
swwweet
225
10k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Embracing the Ebb and Flow
colly
88
4.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
BBQ
matthewcrist
89
9.9k
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参照のいずれでも 実行できる リファレンスとしての情報はあるけど、 この方法でいいのか?的な悩みは尽きない…
というわけで、勉強会とかあるといいなあと。 興味のある方はぜひ一緒に