第5回 配備を自動化する:連載:いまどきのソース・コード管理(3/4 ページ)
ビルドが自動化されたら、デプロイも自動化しよう。Team Foundation Serverを使ってアプリのデプロイを自動で行う手順を説明する。
自動ビルドでパッケージをデプロイ/作成する
TFSの自動ビルドで生成されたプロジェクトを自動でデプロイする方法は以下の2つのいずれかになる。
- TFSの自動ビルドでWeb Deploy用パッケージ・ファイル(zipファイル)を作成する。作成したパッケージ・ファイルは運用ツールやタスク・スケジューラなどの外部ツールを使用してデプロイする
- TFSの自動ビルドで直接デプロイを行う
どちらの方法を使用してもよいが、デプロイをするサーバの台数が多くなったりプロジェクトのサイズが大きくなったりしてデプロイに時間がかかるようになった場合や、検証環境で確認してから本番環境にデプロイするといった場合は前者の方法でパッケージを作ってから別の仕組みを利用してデプロイする方がよいだろう。
TFSのビルド・サービスを使用する場合、使用するアカウントによっては異なるサーバに出力することはできないので注意してほしい。本連載の第2回で構築上の注意点について書いているので、参考にしてほしい。
TFSのビルド・サービスでパッケージ作成を行うにはビルド定義を編集する。
TFSのビルド・サービスでパッケージを作る場合、発行プロファイルを作ってから、ビルド定義の編集画面で[プロセス]タブの[3. 詳細設定]の下にある[MSBuild 引数]に以下のようなオプションを指定する。
TFSのビルド・サービスがActive Directoryのドメイン・ユーザー権限で実行されており、リモート・サーバで実行しているIISへのアクセス権限を持っている場合、[MSBuild 引数]へ以下のように設定する。
/P:DeployOnBuild=true;DeployIisAppPath="Default Web Site/MvcApplication1";
/P:DeployOnBuild=true;DeployIisAppPath="Default Web Site/MvcApplication1";DeployTarget=MsDeployPublish;MSDeployServiceURL="サーバ名 ";MSDeployPublishMethod=WMSVC;AllowUntrustedCertificated=True
上のオプションはビルド・サービスがIISにアクセスできるユーザー・アカウントで実行されている場合のもの。
下のオプションはビルド・サービスがLocalSystemで実行されている場合のもの。
Active Directoryを使用しておらず、TFS ExpressのTFSビルド・サービスがLocalSystemで実行しているような場合、デプロイ先のWebサーバへのアクセス権がないため、以下のように明示的にWebサーバへのアクセス権を持つユーザーのユーザー名とパスワードを設定する必要がある。
/P:DeployOnBuild=true;DeployIisAppPath="Default Web Site/MvcApplication1";DeployTarget=MsDeployPublish;MSDeployServiceURL="MsDeployサーバ名";MSDeployPublishMethod=WMSVC;AllowUntrustedCertificated=True;username="デプロイ・ユーザ名";password="パスワード";
パッケージを作成するだけで、デプロイを行わない場合のオプションは以下のようになる。
/P:DeployOnBuild=true;CreatePackageOnPublish=true;DeployIisAppPath="Default Web Site/MvcApplication1";DeployTarget=Package
MSbuildのオプション/PはMSBuildに対するプロパティを設定する。MSBuildはMicrosoft.TeamFoundation.Build.WorkflowServices名前空間に属するMSBuildというクラスを提供しており、MSBuildクラスのプロパティを指定する。指定可能なプロパティ一覧はMSDNの「MSBuild プロパティ」に載っているので、参考にしてほしい。
指定可能なプロパティをまとめると、以下のようになる。
プロパティ | 説明 |
---|---|
DeployOnBuild | Trueを指定するとDeployTargetが有効になる。既定ではfalse |
CreatePackageOnPublish | Trueを指定するとデプロイ用パッケージを作成する。既定ではfalse |
DeployIisAppPath | デプロイに使用するIISのサイト名と仮想ディレクトリを指定する。デプロイ時に変更が可能 |
DeployTarget | デプロイ処理を指定する Package: デプロイ・パッケージを作る MsDeployPublish: MSDeployを使用して発行する |
MSDeployServiceURL | MSDeployをインストールしたデプロイ先のサーバ名。正式には以下のようなURLだが、ポート番号を8172から変更していない場合、サーバのFQDNでも問題ないhttps://サーバ名:ポート番号/MsDeploy.axd |
MSDeployPublishMethod | 発行メソッドを選択する WMSVC: IIS7以降で使用可能。非Administratorでも発行可能 Remote: Agent:IIS6用。Administrator必須 InProc: IIS6/7用。ローカル発行のみ |
AllowUntrustedCertificated | trueを指定した場合、信頼されない証明書(既定で作成されているWMSVCの証明書)であっても発行を行う |
username | 発行に使用するユーザー・アカウントを指定する |
password | 発行に使用するパスワードを指定する |
MSBuildのプロパティ |
ビルドが成功した場合、デプロイ先のフォルダにある_PublishedWebsitesフォルダの下に「アプリケーション名_Package」というフォルダが生成され、以下のファイルが生成されている。
ファイル名 | 説明 |
---|---|
アプリケーション名.deploy.cmd | デプロイ時に使用するバッチ・ファイル。オプションでデプロイ先などを指定可能 |
アプリケーション名.deploy-readme.txt | パラメータの説明ドキュメント |
アプリケーション名.SetParameters.xml | オプションを指定しない場合の既定パラメータ・ファイル |
アプリケーション名.SourceManifest.xml | IISの設定やアクセス・セキュリティの設定ファイル |
アプリケーション名.zip | デプロイに使用するパッケージ・ファイル |
パッケージの作成時に生成されるファイル |
生成されたzipファイルは一緒に生成されたバッチ・ファイル(拡張子「.cmd」)を使用して、コマンド・プロンプトからサーバにデプロイできる。
このバッチ・ファイルに/Tオプションを付けて実行した場合はシミュレートを行い、どのように実行されるかというレポートが出力される。初めてデプロイする場合の確認に使用してほしい。
MvcApplication1.deploy.cmd /T /M: /U: /P:
/Yを指定してこのバッチ・ファイルを実行すると、実際にデプロイが行われる。
MvcApplication1.deploy.cmd /Y /M: /U: /P:
【コラム】TFSを使わない場合
TFSビルド・サービスを使わない場合でも定期的にビルドを行いたい場合、どうすればいいだろうか? 実はmsbuildコマンドをコマンド・プロンプトから実行することにより、同等のパッケージを作ることができる。Visual Studio 2012の開発者コマンド・プロンプトを実行して、以下のコマンドを実行すれば、同様にパッケージ・ファイルまで作成される。
msbuild プロジェクトファイルフルパス(csproj/vbproj) /T:Package /P:Configuration=Release /P:platform="Any CPU" /P:DeployIisAppPath="Default Web Site/MvcApplication1" /P:MSDeployServiceUrl=Server1 /P:VisualStudioVersion=11.0 /P:AllowUntrustedCertificate=true
ソリューション構成:Release
仮想フォルダ:Default Web Site/MvcApplication1
サーバ名:Server1
これは上の構成で実行する場合のオプションだ。
VisualStudioVersionは.NET Frameworkのバージョン4.5であることを示すツールセット番号だ。.NET Framework 4.0のときは10.0を指定する必要がある。
Visual Studio 2012の開発者コマンド・プロンプトを実行すると、「C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat」というバッチ・ファイルが実行されたコマンドプロンプトが起動される。
独自に実行したい場合はこのバッチ・ファイルを呼び出した後、上記のmsbuildコマンドを実行すれば、Visual Studioで生成したときと同様に、obj\Release\Packageフォルダに以下のファイルが生成される。
- デプロイ実行ファイル:プロジェクト名.deploy.cmd
- パッケージ・ファイル:プロジェクト名.zip
- パラメータ・ファイル;プロジェクト名.SetParameters.xml
- マニフェスト・ファイル:プロジェクト名.SourceManifest.xml
- 実行説明ファイル:プロジェクト名.deploy-readme.txt
Copyright© Digital Advantage Corp. All Rights Reserved.