web-dev-qa-db-ja.com

MSDeploy.exeコマンドラインで宛先Webサイトを設定する方法

リモートサーバーにデプロイしたい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

しかし、パッケージファイルと組み合わせて使用​​するのに問題があります。

13
dthrasher

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"
22
Richard Szalay

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 + '"');
13
Scott Munro

私はここからのすべての答え(そして基本的にインターネットからのすべての答え)を試しましたが、どれも私のために働いていませんでした。理由はわかりません。次に、バックアップに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日を無駄にしていました...しかし、それはとても簡単です!

それが役に立てば幸い...

2
Major