銀の光と碧い空

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

WebPiCMD で複数サーバーをアップデートするときは /Offline を使おう

以前の記事で、WebPi (Web Platform Installer) をコマンドラインから使うというものがありました。最近、ARR (Application Request Routing) 3.0 がベータからRTMにアップデートされたため、某弊社サーバー群もアップデートしました。この時、この WebPiCMD を使ってのですが、困ったことが起きました。

ARR 3.0 RTM リリースのブログのコメントにもあるのですが、WebPi で公開・配布されるパッケージはキャッシュされています。そして、どうもこのキャッシュはクライアントによって表示されるものが異なるようです(特に公開したてのもの)。そのためか、複数のサーバーで ARR 3.0 RTMへのアップデートを試みると、正常にアップデートできるものもあれば、ARR 3.0 RTM が見つからずアップデートに失敗するサーバーも出てきました。 そこで調べて出てきたのが Offline オプションです。

Offline オプションは WebPiCMD v4 で新しく追加されたオプションです。Offline オプションにより、ネットワークにつながっていない環境でもWebPI 経由でインストール可能なパッケージを作成することができます。 今回の場合、ARR 3.0 RTM (WebPI でのIDは ARRv3_0)をインストールするパッケージを作成したいので、次のようにコマンドを実行します。

> "C:\Program Files\Microsoft\Web Platform Installer\WebpiCmd.exe" /Offline /Products:ARRv3_0 /Path:C:/ARRv3_0

f:id:tanaka733:20140307161650p:plain

これで準備は完了です。あとはこのパッケージを各サーバーに配布するか、各サーバーから参照できる場所に公開するかが必要ですが、http://mywebpipack/ 以下で公開したと仮定しましょう。 あとは各サーバーで以下のコマンドを実行すればOKです。

> "C:\Program Files\Microsoft\Web Platform Installer\WebpiCmd.exe" /Install /Products:ARRv3_0 /XML:http://mywebpipack/feeds/latest/webproductlist.xml

これでインストール可能になります。ただ、問題があってこの方法でインストールすると、WebPICMD のListオプションでインストールされた製品を表示しても出てこなくなってしまいました。そのためバージョンアップしたかどうかを確認するには一工夫必要です。私が使ったのは、直接モジュール(今回ならARRv3_0)のバージョンを確認する方法です。 C:\Program Files\IIS 以下にIIS拡張モジュールはインストールされます。そこで直接DLLのバージョンを確認します。PowerShellであれば、次のようにして確認できます。

> (Get-Item "C:\Program Files\IIS\Application Request Routing\requestRouter.dll").VersionInfo.ProductVersion

ちなみに、現時点で ARRv3_0 であれば 7.1.1750.0 が返ってきます。

これで、WebPiのキャッシュ情報に依存せず(かつ、パブリックネットワークにつながっていない環境でも)WebPI経由のインストールができるようになりました。