銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

あるディレクトリ以下のファイルを MSDeploy でIIS Webサイトにデプロイする

先日、このようなつぶやきをしたところ、何人かから回答をいただきました。

なんでこういうことやりたいかというと、静的コンテンツのみを公開するIISのWebサイトを作成し、そのサイトへVCSから取得したファイル群をデプロイ(展開)したいという要件があったからです。特に静的コンテンツのみであることから、MSBuild によるパッケージングはそのままでは使えないという条件がついています。 また、単純にファイルコピーでなくMSDeployを使いたいのは、全体の容量に対し、更新する差分の量が少ないため、差分検知してその差分だけファイル転送できるからです。

で、MSDeployには Web 配置 dirPath プロバイダー という方法であるディレクト以下をリモート先と同期させることができます。

>"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:dirPath="C:\Repository\Image" -dest:computerName="http://ww.xx.yy.zz/MSDeployAgentService",userName="administrator",password="zeijaku",includeAcls="False",dirPath="C:\www\Image" 

この方法を使うときは、リモート側に Web 配置ツール をインストールしてサービスを起動しておく必要があります。また、リモートサーバー ww.xx.yy.zz は administrator/zeijaku で管理者権限つきのユーザーでログインできる必要があります。そして、C:\Repository\Image 以下が C:\www\Image 以下と同期され、そのディレクトリをWebサイトとして公開している、という想定です。

さて、これで一件落着、かというとそうではなくて、今回VCSにはgitを使っています。gitで管理していると、.git というディレクトリがあって、そこに管理下のコンテンツと同程度の容量を占めるファイルが存在しています。同期させるときにこれを転送するのは避けたいところです。そこで、 Web 配置の操作設定skip設定を使います。今回は指定したディレクトリ以下を無視したいため、objectName に dirPath をして、.git にマッチするような正規表現を指定します。

>"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:dirPath="C:\Repository" -dest:computerName="http://ww.xx.yy.zz/MSDeployAgentService",userName="administrator",password="zeijaku",includeAcls="False",dirPath="C:\www\Image" -skip:objectName='dirPath',absolutePath='\\\.git'

これで、git で取得した静的コンテンツのみを MSDeploy で展開することができました。