web-dev-qa-db-ja.com

MSBUILDを介してTFS2010でMSDEPLOYを実行するにはどうすればよいですか?

Visual Studio 2010の新しいMSDEPLOY機能について説明するVishal Joshiの優れたPDC talk こちらから入手可能 )と、TFS内にアプリケーションを展開する方法があります。 Scott Hanselmanからも素晴らしい講演がありますが、彼はTFSには入りません)。

TFS2010内でMSBUILDを使用して、MSDEPLOYを呼び出してパッケージをIISに展開できます。これは、MSBUILDへのパラメーターによって行われます。

トークでは、次のようなコマンドラインパラメータの一部について説明します。

/p:DeployOnBuild
/p:DeployTarget=MsDeployPublish
/p:CreatePackageOnPublish=True
/p:MSDeployPublishMethod=InProc
/p:MSDeployServiceURL=localhost
/p:DeployIISAppPath="Default Web Site"

しかし、これに関するドキュメントはどこにありますか-見つかりませんか?

私はこれを機能させるために一日中費やしてきましたが、うまくいかず、さまざまなエラーが発生し続けています。パッケージのcmdファイルを実行すると、完全にデプロイされます。 Visual Studioを使用してWebDeployを実行すると、完全に機能します。

しかし、msbuildへの個別の呼び出しやパッケージ.cmdファイルの実行ではなく、これらの引数を使用してmsdeployを介して展開全体を実行したいです。これどうやってするの?

PS。はい、Web Deployment Agent Serviceを実行しています。また、IISで管理サービスを実行しています。私は両方を使用してみました。


私が使用している引数:

/p:DeployOnBuild=True 
/p:DeployTarget=MsDeployPublish 
/p:Configuration=Release 
/p:CreatePackageOnPublish=True  
/p:DeployIisAppPath=staging.example.com   
/p:MsDeployServiceUrl=https://staging.example.com:8172/msdeploy.axd 
/p:AllowUntrustedCertificate=True

私に与える:

C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(2660):VsMsdeploy failed。(リモートエージェント(URL https:// staging。 example.com:8172/msdeploy.axd?site=staging.example.com )に接続できませんでした。ターゲットコンピューターにリモートエージェントサービスがインストールされ、開始されていることを確認してください。)エラーの詳細:リモートエージェント(URL- https://staging.example.com:8172/msdeploy.axd?site=staging.example.com )に接続できませんでした。ターゲットコンピュータにリモートエージェントサービスがインストールされ、開始されていることを確認してください。サポートされていない応答を受信しました。応答ヘッダー 'MSDeploy.Response'は ''でしたが、 'v1'が予期されていました。リモートサーバーがエラーを返しました:(401)Unauthorized。

78
Simon_Weaver

IIS7 +関連する回答....

OK-これが私がやったことです。多かれ少なかれ、このスレッド/質問の Simon Weaver による投稿に続きます。

しかし、MSBuildの設定に関しては、ほとんどの人が次の設定を使用しています:/p:MSDeployPublishMethod=RemoteAgentこれは、IIS7ではNOT RIGHTです。この設定を使用すると、TFSはURLへの接続を試行します:https://your-server-name/MSDEPLOYAGENTSERVICEしかし、そのURLにアクセスするには、認証するユーザーが管理者である必要があります。これは壊れています。 (そして、管理上書きルールをチェックする必要があります)。このURLはIIS6用だと思います。

RemoteAgentを使用して接続しようとしたときの標準エラーメッセージは次のとおりです。

Standard 401 Frak Off uはRemoteAgentを吸います、エラー

C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3588):Web展開タスクが失敗しました。(リモートエージェント(URL http:// your-web-server/MSDEPLOYAGENTSERVICE )に接続できませんでした。ターゲットコンピューターにリモートエージェントサービスがインストールされ、開始されていることを確認してください。)サイト名、ユーザー名、およびパスワードが正しいことを確認してください。問題が解決しない場合は、ローカルまたはサーバー管理者に連絡してください。エラーの詳細:リモートエージェント(URL http:// your-web-server/MSDEPLOYAGENTSERVICE )に接続できませんでした。ターゲットコンピュータにリモートエージェントサービスがインストールされ、開始されていることを確認してください。サポートされていない応答を受信しました。応答ヘッダー 'MSDeploy.Response'は 'V1'でしたが、 'v1'が予期されていました。リモートサーバーがエラーを返しました:(401)Unauthorized。

.. MSDeployPublishMethodを次のように変更する必要があります。

/p:MSDeployPublishMethod=WMSVC

WMSVCは、Windowsマネージャーサービスを表します。基本的にはリモートエージェントの新しいラッパーですが、ユーザーが管理者である必要のないユーザー名とパスワードを正しく入力できるようになりました。 (喜び!)Webサイトごとに..にアクセスしたいユーザーを設定できるようになりました。

enter image description here

また、URLへのアクセスを試みます:https://your-web-server:8172/MsDeploy.axd <-これは、Visual Studio 2010 Publishウィンドウの機能とまったく同じです。 (OMG-> PENNY DROPS !! BOOM!)

enter image description here

そして、ここに私の最終的なMSBuild設定があります:

/p:DeployOnBuild=True
/p:DeployTarget=MSDeployPublish 
/p:MSDeployPublishMethod=WMSVC
/p:MsDeployServiceUrl=your-server-name
/p:DeployIISAppPath=name-of-the-website-in-iis7    
/p:username=AppianMedia\some-domain-user 
/p:password=JonSkeet<3<3<3
/p:AllowUntrustedCertificate=True

ユーザー名にドメイン名が含まれていることに注意してください。そう、それが必要です。また、私の写真では、管理のためにドメインユーザーにWebサイトへのアクセスを許可しています。そのため、追加した新しいユーザーアカウント(TFSBuildService)のメンバーシップはDomain Users group ...これがすべての仕組みです。

さて、もしあなたがこれをすべて読んだら、lolcatを持ってください(彼らはSOOOOOOOO 2007だからです)。

enter image description here

48
Pure.Krome

最終的に私のために働いたステップはここにあります。 RemoteAgentで動作するようにしたかったのですが、試してみても動作しませんでした。

あなたはこのように正確に行う必要はありませんが、これは私がそれを機能させた方法です

  • WMSVCの構成
  • サービスが開始されていることを確認してください
  • IISユーザー(IISの[TOP MOST SERVERNAME]をクリック)]を構成し、[IISマネージャーユーザー]に移動します。Windows名とは異なる名前にすることをお勧めします。
  • WMSVC(私にとってはLOCAL SERVICE)のユーザーアカウントに、使用しているIISディレクトリへの書き込み権限があることを確認してください。
  • 私の場合、SSL証明書を使用しています(ローカルホストにアクセスしている場合でも)。

これらはすべて、TFSビルド定義内に追加されたMSBUILDの引数であることに注意してください

/p:DeployOnBuild=True 
/p:DeployTarget=MSDeployPublish 
/p:MSDeployPublishMethod=WMSVC 
/p:MsDeployServiceUrl=https://staging.example.com:8172/msdeploy.axd 
/p:username=sweaveriis 
/p:password=abcd1234 
/p:DeployIisAppPath=staging.example.com/virtual_directory_name
/p:AllowUntrustedCertificate=True

注:staging.example.comは実際には、127.0.0.1を指す hosts file エントリを持つローカルボックスです。ローカルホストもおそらくここで動作します。

有用な記事:

MSDeployの問題のトラブルシューティング

その他のトラブルシューティング

19
Simon_Weaver

残念ながら、現時点ではこれに関する多くの情報はありません。ただし、このメッセージの最後にヒントを示します。


あなたの問題については、MSDeployを使用して展開しようとしていて、実行中のアカウントにターゲットマシンで展開を実行する権限がなかったときに、これを見てきました。そのため、ビルドを実行しているアカウントを調べ、このアカウントにターゲットマシンにデプロイする権限があるかどうかを確認する必要があります。そうでない場合は、いくつかのオプションがあります。ビルドユーザーに権限を付与するか、ユーザー名/パスワードを渡します。

値を渡す場合は、MsDeployDestinationProviderSettingという名前のアイテムを定義する必要があり、そのメタデータには必要な値が含まれている必要があります。

したがって、プロジェクトファイルで(または渡されたプロパティを使用して)次のようなものを定義します。

_<PropertyGroup>
    <UserName>USERNAME-HERE</UserName>
    <Password>PASSWORD-HERE
</PropertyGroup>
_

前に言ったように、ドキュメントはどこにありますか?ただし、Web公開パイプライン全体がMSBuildのターゲットとタスクにキャプチャされているため、MSBuildに精通している場合は、自分で多くを学ぶことができます。 Visual Studio 2010で作成されたWebプロジェクトの.csproj(または.vbproj)ファイルを見ると、次のようなステートメントがあります。

_<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
_

これは%ProgramFiles(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targetsにあるファイルをインポートし、このファイルは%ProgramFiles(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targetsをインポートします

したがって、このトピックを今すぐ詳細に学習するには、これらのファイルを調べて自分で学習する必要があります。


私はこれらの技術を詳細にカバーするものに取り組んでいきますが、それはしばらくの間出てこないでしょう。

ユーザー名/パスワードの取引を試してみて、うまくいったかどうかを教えてください。

16

私は同様の問題があり、解決策は次のパラメータを持つことでした:

/ p:MSDeployPublishMethod =RemoteAgent

ここに私が使用したすべてのパラメーターがあります。

/ p:DeployOnBuild = True/p:DeployTarget = MSDeployPublish/p:MSDeployPublishMethod =RemoteAgent/ p:MsDeployServiceUrl = http:// my -server-name /p:username = myusername/p:password = mypassword

注:ソリューションを構築し、3つのWebアプリケーションを一度に構築しようとしているため、DeployIisAppPathを使用していません。また、MsDeployServiceUrlは http://staging.example.com である必要があると思います

MSDeployPublishMethodにInProc(デフォルトの場合もあります)を使用すると、MSBuildはMsDeployServiceUrlを無視し、常にローカルサーバーに展開しようとします。これをRemoteAgentに変更し、3つのWebアプリケーションすべてが正常にデプロイされました。 PackageファイルがMyWebApplication_Packageフォルダーに含まれなくなったことに気付きましたが、それは大したことではありません。

6
Chad Peck

DeployTarget = Packageを設定することもできます。これにより、パッケージは準備されますが、すぐには展開されません。詳細については、 このブログ投稿 を参照してください。

4
zvolkov

私にとって問題はWeb Deployment Agent Serviceは開始されませんでした。

シンプルな net start msdepsvcそれを修正しました。このサービスでスタートアップモードを自動に設定することもできます。

私が使用している引数は次のとおりです。

/p:DeployOnBuild=True 
/p:DeployTarget=MsDeployPublish 
/p:MSDeployPublishMethod=RemoteAgent 
/p:MSDeployServiceUrl=stagingserver 
/p:DeployIisAppPath=test.local 
/p:UserName=

完全なパスではなく、サーバー名のみを指定する必要があります(httpは不要です)。

UserNameは、NTLM認証のバグを回避するために空のままになっていることに注意してください(この方法では、展開にTFSビルドエージェントの資格情報を使用します)。 ここで受け入れられた答え を参照してください

3
andreialecu

これがどのように機能するかを示しています。これはWebdeploy 2.0で発生しました。ビルドマシンからdev webserverマシンwindows server 2008 r2に同じドメインにデプロイしています。展開に使用しているアカウントは、両方のマシンの管理者権限を持つドメインのサービスアカウントです。私のソリューションには、いくつかの単体テストプロジェクト、mvc3プロジェクト、およびソリューションの下にあるいくつかのライブラリが含まれています。展開するサーバーにMVC3をインストールしていない場合、 http://www.iwantmymvc.com/2011-03-23-bin-deploy-aspnet-mvc-3-visual-studio ガイダンス。

/ p:DeployOnBuild = True/p:DeployTarget = MSDeployPublish/p:DeployIisAppPath = "Default Web Site/YourpplicationNameHere" /p:MsDeployServiceUrl=https://devserver02:8172/msdeploy.axd/p:AllowUntrustedCertificate = True/p:UserName = yourDomain\buildaccount/p:Password = password

  1. 私が最初に苦労した項目は、「Default Web Site/YourpplicationNameHere」を囲む引用符でした。

    MSBUILD:エラーMSB1008:1つのプロジェクトのみを指定できます。

    これは、Default Web Site/YourApplicationNameHereの周りに引用符がない場合に発生します

  2. 私が受け取った次のエラーは、展開用の資格情報に間違ったユーザー名とパスワードがあったためです。このエラーが発生しました:

    C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3588):Web展開タスクが失敗しました。(リモートエージェント(URL https:// devserver02:8172/msdeploy.axd?site = Default Web Site)に接続できませんでした。ターゲットコンピューターにリモートエージェントサービスがインストールされ、開始されていることを確認してください。)サイト名、ユーザー名、およびパスワードが正しい。問題が解決しない場合は、ローカルまたはサーバー管理者に連絡してください。エラーの詳細:リモートエージェント(URL https:// devserver02:8172/msdeploy.axd?site = Default Webサイト)に接続できませんでした。ターゲットコンピュータにリモートエージェントサービスがインストールされ、開始されていることを確認してください。サポートされていない応答を受信しました。応答ヘッダー 'MSDeploy.Response'は ''でしたが、 'v1'が予期されていました。リモートサーバーがエラーを返しました:(401)Unauthorized。

    これは、/ p:UserName =/p:Password = didにあったユーザー名とパスワードに、ユーザーのドメインが含まれていないためです。そのユーザーの下でビルドが実行されていたとしても、デプロイされません。そのため、ブラウザで直接URLにアクセスして https:// devserver02:8172/msdeploy.axd を実行し、動作を確認し、ユーザー名とパスワードが機能することを確認しました。これは、それを機能させるためにドメイン/ユーザーを配置する必要があることに気づいた場所です。

私はこれが返信してもいいことを願っています私はこれらのエラーを見つけると他の貧しい魂を考え出しました、これは助けになるかもしれません...

3
ElvisLives

FileCopyを使用してアプリケーションを展開できる場合、TFSワークフローをカスタマイズして簡単に展開できます。

これらの記事の助けを借りて、CopyDirectoryアクティビティを使用しました。

http://www.ewaldhofman.nl/post/2010/11/09/Part-14-Execute-a-PowerShell-script.aspx

そして

http://geekswithblogs.net/jakob/archive/2010/09/01/tfs-team-build-2010-how-to-place-the-build-output.aspx

非常にシンプルでわかりやすい。

  • 目的の共有に対する書き込み特権を持つユーザーアカウントでビルドサービスを構成しました。

  • 次に、CopyDirectoryワークフローステップを作成し、ソースをBuildDetail.DropLocation + "_PublishedWebsites"として構成し、宛先に対して、 "DeployPath"と呼ばれるビルド構成で入力できる引数を作成しました。

  • CopyDirectoryアクティビティを呼び出す前に、ビルドが成功したかどうかを確認するテストを実装する必要があります。私が言及した記事は、その方法を示しています。また、CopyDirectoryの代わりにPowerShellスクリプトを呼び出す方法も教えます。

1
Sergio Treiger