連載
» 2013年11月15日 14時15分 公開

第5回 配備を自動化する連載:いまどきのソース・コード管理(3/4 ページ)

[亀川和史,著]

自動ビルドでパッケージをデプロイ/作成する

 TFSの自動ビルドで生成されたプロジェクトを自動でデプロイする方法は以下の2つのいずれかになる。

  • TFSの自動ビルドでWeb Deploy用パッケージ・ファイル(zipファイル)を作成する。作成したパッケージ・ファイルは運用ツールやタスク・スケジューラなどの外部ツールを使用してデプロイする
  • TFSの自動ビルドで直接デプロイを行う

 どちらの方法を使用してもよいが、デプロイをするサーバの台数が多くなったりプロジェクトのサイズが大きくなったりしてデプロイに時間がかかるようになった場合や、検証環境で確認してから本番環境にデプロイするといった場合は前者の方法でパッケージを作ってから別の仕組みを利用してデプロイする方がよいだろう。

 TFSのビルド・サービスを使用する場合、使用するアカウントによっては異なるサーバに出力することはできないので注意してほしい。本連載の第2回で構築上の注意点について書いているので、参考にしてほしい。

 TFSのビルド・サービスでパッケージ作成を行うにはビルド定義を編集する。

ビルド定義の編集画面 ビルド定義の編集画面
[3. 詳細設定]にある[MSBuild 引数]にパッケージを作成するためのオプションを指定する。

 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="パスワード";


デプロイ先のWebサーバへのアクセス権を持つユーザーを指定

 パッケージを作成するだけで、デプロイを行わない場合のオプションは以下のようになる。

/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:


/Tオプションを指定すると、デプロイのシミュレートが行われる

 /Yを指定してこのバッチ・ファイルを実行すると、実際にデプロイが行われる。

MvcApplication1.deploy.cmd /Y /M: /U: /P:


/Yオプションを指定するとデプロイが実行される

【コラム】TFSを使わない場合

 TFSビルド・サービスを使わない場合でも定期的にビルドを行いたい場合、どうすればいいだろうか? 実はmsbuildコマンドをコマンド・プロンプトから実行することにより、同等のパッケージを作ることができる。Visual Studio 2012の開発者コマンド・プロンプトを実行して、以下のコマンドを実行すれば、同様にパッケージ・ファイルまで作成される。

Visual Studio 2012の開発者コマンド・プロンプト 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


コマンド・プロンプトで実行するmsbuildコマンドのオプション
ソリューション構成: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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。