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
9.8k
Calling PowerShell from CSharp
tanaka733
0
1.7k
Garbage Collection in .NET Framework
tanaka733
4
2.8k
New Features in Visual Studio 2013
tanaka733
0
1.1k
Starting Unity for Windows Store App
tanaka733
0
830
とあるインフラエンジニアのAzure活用
tanaka733
2
570
ASP.NET MVC4 Web APIをバックエンドにして作るストアとWindows Phoneプッシュ通知アプリ
tanaka733
0
1.8k
Yurufuwa_CSharp.pdf
tanaka733
0
5.1k
Windows ストアアプリで Push通知を使いこなそう
tanaka733
0
1.9k
Other Decks in Technology
See All in Technology
Rubyで作る論理回路シミュレータの設計の話 - Kashiwa.rb #12
kozy4324
1
170
工具人的一生: 開發很多 AI 工具讓我 慵懶過一生
line_developers_tw
PRO
0
140
開発効率と信頼性を両立する Ubieのプラットフォームエンジニアリング
teru0x1
0
140
エンジニア採用から始まる技術広報と組織づくり/202506lt
nishiuma
8
1.6k
Kotlinで学ぶ 代数的データ型
ysknsid25
5
1.1k
OpenTelemetry Collector internals
ymotongpoo
5
530
AI技術トレンド勉強会 #1MCPの基礎と実務での応用
nisei_k
1
180
ObsidianをMCP連携させてみる
ttnyt8701
2
100
“プロダクトを好きになれるか“も QAエンジニア転職の大事な判断基準だと思ったの
tomodakengo
0
130
IIWレポートからみるID業界で話題のMCP
fujie
0
120
新卒3年目の後悔〜機械学習モデルジョブの運用を頑張った話〜
kameitomohiro
0
210
In Praise of "Normal" Engineers (LDX3)
charity
1
790
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
780
How to Think Like a Performance Engineer
csswizardry
24
1.7k
The Cost Of JavaScript in 2023
addyosmani
50
8.3k
Code Reviewing Like a Champion
maltzj
524
40k
4 Signs Your Business is Dying
shpigford
184
22k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
It's Worth the Effort
3n
184
28k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
228
22k
A Modern Web Designer's Workflow
chriscoyier
693
190k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.3k
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参照のいずれでも 実行できる リファレンスとしての情報はあるけど、 この方法でいいのか?的な悩みは尽きない…
というわけで、勉強会とかあるといいなあと。 興味のある方はぜひ一緒に