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
11k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ぼくの考えた割と普通(c)なデプロイ戦略
こみゅぷらすで話したMSBuild, MSDeploy のお話。
tanaka_733
July 27, 2013
More Decks by tanaka_733
See All by tanaka_733
SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法
tanaka733
2
11k
Calling PowerShell from CSharp
tanaka733
0
2k
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
870
とあるインフラエンジニアのAzure活用
tanaka733
2
620
ASP.NET MVC4 Web APIをバックエンドにして作るストアとWindows Phoneプッシュ通知アプリ
tanaka733
0
1.9k
Yurufuwa_CSharp.pdf
tanaka733
0
5.1k
Windows ストアアプリで Push通知を使いこなそう
tanaka733
0
2k
Other Decks in Technology
See All in Technology
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
250
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
160
インフラ寄りSREでも 開発に踏み出せる〜境界を越えてユーザー体験に向き合いたい〜
sansantech
PRO
2
3.9k
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
130
DatabricksにおけるMCPソリューション
taka_aki
1
260
SRE Next 2026 何でも屋からの脱却
bto
0
760
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
370
Road to SRE NEXTの今までとこれから
hiroyaonoe
0
340
完全自律ロボットを作りたくて、先に開発を自律させた話(ROS Japan UG #63 LT)
rryz09
0
610
ローカルLLMとLINE Botの組み合わせ その3 / LINE DC Generative AI Meetup #8
you
PRO
0
130
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
5.4k
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
4
1.2k
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
220
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
170
Ruling the World: When Life Gets Gamed
codingconduct
0
280
sira's awesome portfolio website redesign presentation
elsirapls
0
300
Balancing Empowerment & Direction
lara
6
1.2k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Automating Front-end Workflow
addyosmani
1370
210k
How STYLIGHT went responsive
nonsquared
100
6.2k
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参照のいずれでも 実行できる リファレンスとしての情報はあるけど、 この方法でいいのか?的な悩みは尽きない…
というわけで、勉強会とかあるといいなあと。 興味のある方はぜひ一緒に