リモートサーバーにデプロイしたいWebDeploy3.5パッケージがあります。 MSDeploy.exeコマンドラインでサイトの名前を指定するにはどうすればよいですか?
これが私がこれまでに持っているものです:
C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe
-source:package='package.Zip'
-dest:auto,computerName="ServerName",includeAcls="False"
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"package.SetParameters.xml"
ただし、サイトの名前はpackage.SetParamters.xml
ファイルで指定されているので、コマンドラインで設定したいと思います。このパッケージをデプロイしたい場所のいくつかは、StageサイトやUATサイトなど、同じサーバー上にある異なるサイトです。
ここで説明するiisAppプロバイダーとappHostConfigプロバイダーの使用について見てきました: http://technet.Microsoft.com/en-us/library/dd569040%28v=ws.10%29.aspx
しかし、パッケージファイルと組み合わせて使用するのに問題があります。
setParam
を使用してオーバーライドできます。
msdeploy.exe
-source:package='package.Zip'
-dest:auto,computerName="ServerName",includeAcls="False"
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"package.SetParameters.xml"
-setParam:name="IIS Web Application Name",value="site name"
Powershellで同じことを行うには( Richard Szalayの回答 を参照)、特にスペースが関係する場合は、コマンドライン引数の処理に少し注意する必要があります。必要なコマンドライン引数がスペース文字で効果的に分割される配列としてそれらを渡すのが最善であることがわかりました。以下の行はコンマで区切られ、パラメータ名「IISWebアプリケーション」が分割されていることに注意してください。読みやすさを向上させるために、1行に1行残しました。
$msdeploy = "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe";
$msdeployArguments =
'-source:package="package.Zip"',
'-dest:auto,computerName="<ServerName>",includeAcls="False"',
'-verb:sync',
'-disableLink:AppPoolExtension',
'-disableLink:ContentExtension',
'-disableLink:CertificateExtension',
'-setParam:name="IIS', 'Web', 'Application', 'Name",value="<WebsiteName>"'
& $msdeploy $msdeployArguments
更新
ウェブサイトの名前をパラメータ化するために戻ったときに問題が発生しました。文字列に一重引用符を使用していたため、 文字列補間 ではなく連結を使用することにしました。残念ながら、配列内の要素を区切ったコンマは、連結の前に評価されているようです。その結果、配列要素内で文字列を連結する代わりに、新しい要素を配列に連結していました。私の解決策は、括弧を使用して配列要素を囲み、連結を最初に実行することでした。
$msdeployArguments =
'-source:package="package.Zip"',
('-dest:auto,computerName="' + $webServerName + '",includeAcls="True"'),
'-verb:sync',
'-disableLink:AppPoolExtension',
'-disableLink:ContentExtension',
'-disableLink:CertificateExtension',
'-setParam:name="IIS', 'Web', 'Application', ('Name",value="' + $websiteName + '"');
私はここからのすべての答え(そして基本的にインターネットからのすべての答え)を試しましたが、どれも私のために働いていませんでした。理由はわかりません。次に、バックアップにMSDeployを使用する方法を説明する this ページを見つけました(デプロイに使用するために逆にしただけです)。秘密の原因は「contentPath」です。この場合、ディスク上のパスではないため、これは少し誤解を招く可能性があります(ただし、ホストされたサイトの物理パスを渡すためにそれを使用していた例を見てきました)。しかし、私は物理パスを使用したくありませんでした。そして、あなたはする必要はありません!秘訣は次のとおりです。Webサイトまたは子サイトを含めることができます(IIS yoursite.com/shop内なので、IISのパスだと思います)) 。
バックアップの使用法:
msdeploy –verb:sync -source:contentPath="yoursite.com" -dest:package=c:\Backups\yoursite.Zip
デプロイするための使用法:
msdeploy –verb:sync -source:package=c:\Deployment\yoursite.Zip -dest:contentPath="yoursite.com"
私はdeclareParam、setParamなどでほぼ1日を無駄にしていました...しかし、それはとても簡単です!
それが役に立てば幸い...