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.4k
Calling PowerShell from CSharp
tanaka733
0
1.6k
Garbage Collection in .NET Framework
tanaka733
4
2.8k
New Features in Visual Studio 2013
tanaka733
0
1k
Starting Unity for Windows Store App
tanaka733
0
800
とあるインフラエンジニアのAzure活用
tanaka733
2
540
ASP.NET MVC4 Web APIをバックエンドにして作るストアとWindows Phoneプッシュ通知アプリ
tanaka733
0
1.7k
Yurufuwa_CSharp.pdf
tanaka733
0
5.1k
Windows ストアアプリで Push通知を使いこなそう
tanaka733
0
1.9k
Other Decks in Technology
See All in Technology
20241214_WACATE2024冬_テスト設計技法をチョット俯瞰してみよう
kzsuzuki
3
440
.NET 9 のパフォーマンス改善
nenonaninu
0
780
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
390
サーバレスアプリ開発者向けアップデートをキャッチアップしてきた #AWSreInvent #regrowth_fuk
drumnistnakano
0
190
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
2
110
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
190
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
700
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
1
240
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
150
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.1k
Snowflake女子会#3 Snowpipeの良さを5分で語るよ
lana2548
0
230
10分で学ぶKubernetesコンテナセキュリティ/10min-k8s-container-sec
mochizuki875
3
330
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
45
7k
Six Lessons from altMBA
skipperchong
27
3.5k
Producing Creativity
orderedlist
PRO
341
39k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
Testing 201, or: Great Expectations
jmmastey
40
7.1k
Mobile First: as difficult as doing things right
swwweet
222
9k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
290
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
5
440
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参照のいずれでも 実行できる リファレンスとしての情報はあるけど、 この方法でいいのか?的な悩みは尽きない…
というわけで、勉強会とかあるといいなあと。 興味のある方はぜひ一緒に