TFSの自動ビルドで生成されたプロジェクトを自動でデプロイする方法は以下の2つのいずれかになる。
どちらの方法を使用してもよいが、デプロイをするサーバの台数が多くなったりプロジェクトのサイズが大きくなったりしてデプロイに時間がかかるようになった場合や、検証環境で確認してから本番環境にデプロイするといった場合は前者の方法でパッケージを作ってから別の仕組みを利用してデプロイする方がよいだろう。
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
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ビルド・サービスを使わない場合でも定期的にビルドを行いたい場合、どうすればいいだろうか? 実は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
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フォルダに以下のファイルが生成される。
Copyright© Digital Advantage Corp. All Rights Reserved.