TFS2010 で MSBUILD を通じて MSDEPLOY を実行できるようにするにはどうすればよいですか?
-
26-09-2019 - |
質問
素晴らしい PDC トークがあります ここで入手可能 Vishal Joshi による、Visual Studio 2010 の新しい MSDEPLOY 機能と、TFS 内にアプリケーションをデプロイする方法について説明しています。(素晴らしいトークもあります) スコット ハンセルマンですが、彼は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
を個別に呼び出すのではなく、これらの引数を使用します。 msdeploy
またはパッケージを実行する .cmd
ファイル。これどうやってするの?
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 に失敗しました。(リモート エージェント (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) 無許可です。
解決
IIS7 + 関連する回答....
OK - これが私が最終的にやったことです。多かれ少なかれ、次の投稿に続いて、 サイモン・ウィーバー このスレッド/質問で。
しかし、MSBuild の設定に関しては...ここにいるほとんどの人は次の設定を使用しています。 /p:MSDeployPublishMethod=RemoteAgent
それは 正しくない IIS7の場合。この設定を使用すると、TFS は次の URL への接続を試行します。 https://your-server-name/MSDEPLOYAGENTSERVICE
ただし、その URL にアクセスするには、認証するユーザーが管理者である必要があります。それは壊れています。(そして、Admin-override ルールにチェックを入れる必要があります)。この URL は IIS6 用だと思います。
RemoteAgent を使用して接続しようとしたときの標準エラー メッセージは次のとおりです:-
標準 401 Frak Off you suck RemoteAgent、エラー
c:プログラムファイル(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)不正。
それで ..あなたは自分を変える必要があります MSDeployPublishMethod
これに:
/p:MSDeployPublishMethod=WMSVC
の WMSVC
Windows マネージャー サービスの略です。これは基本的にリモート エージェントの新しいラッパーですが、ユーザー名とパスワードを正しく提供できるようになりました。ユーザーが管理者である必要はありません。(嬉しい!) これで、アクセスしたいユーザーを正しく設定できるようになりました。ウェブサイトごとに..
また、次の URL にアクセスしようとします。 https://your-web-server:8172/MsDeploy.axd
<-- これはまさに Visual Studio 2010 です。 Publish
窓はそうです! (OMG -> ペニードロップ!!ブーム!)
最終的な 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
グループ ...それがすべての仕組みです。
さて、これをすべて読んだなら、lolcat を持ってください (だって、2007 年ですから)。
他のヒント
最終的にうまくいった手順は次のとおりです。RemoteAgentを操作したかったのですが、何を試してもうまくいきませんでした。
まったく同じようにする必要はありませんが、これが私がそれを機能させた方法です
- WMSVC の構成
- サービスが開始されていることを確認してください
- IIS ユーザーを構成し (IIS の最上位のサーバー名をクリックし)、「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 を指すエントリ。Localhost もおそらくここで機能するでしょう。
役立つ記事:
残念ながら、現時点ではこれに関する情報はあまりありません。このメッセージの最後にいくつかのヒントを記載します。
あなたの問題については、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
したがって、このトピックを今すぐ詳しく学ぶには、これらのファイルを調べて自分で学ぶ必要があります。
私はこれらのテクノロジーを詳細にカバーするものに取り組む予定ですが、公開されるのはしばらく先になり、このことについては自分自身で理解することがまだたくさんあります。
ユーザー名とパスワードの契約を試してみて、うまくいったかどうか教えてもらえますか?
私も同様の問題を抱えていましたが、解決策は次のパラメータを使用することでした。
/p:MSDeployPublishMethod=リモートエージェント
ここに私が使用したすべてのパラメータがあります。
/p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MSDeployPublishMethod=リモートエージェント /p:MsDeployServiceUrl=http://私のサーバー名 /p:ユーザー名=私のユーザー名 /p:パスワード=私のパスワード
注記:ソリューションを構築し、一度に 3 つの Web アプリケーションを構築しようとしているため、DeployIisAppPath は使用しません。また、MsDeployServiceUrl は次のようにする必要があると思います http://staging.example.com
MSDeployPublishMethod に InProc (デフォルトの可能性があります) を使用すると、MSBuild は MsDeployServiceUrl を無視し、常にローカル サーバーへの展開を試行するようです。これを RemoteAgent に変更すると、3 つの Web アプリケーションがすべて正常にデプロイされました。Package ファイルが MyWebApplication_Package フォルダーに含まれていないことに気付きましたが、それは私にとっては大したことではありません。
DeployTarget=Package を設定することもできることに注意してください。これにより、パッケージが準備されますが、すぐには展開されません。詳細については、を参照してください このブログ投稿.
私にとって問題だったのは、 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 は必要ありません)。
NTLM 認証のバグを回避するために、UserName は空のままであることに注意してください (この方法では、展開に TFS ビルド エージェントの資格情報が使用されます)。見る ここで受け入れられた答え
これが私がそれを機能させる方法です。これは Webdeploy 2.0 で発生しました。同じドメイン上にビルド マシンから開発 Web サーバー マシン Windows Server 2008 r2 にデプロイしています。デプロイに使用しているアカウントは、両方のマシンで管理者権限を持つドメインのサービス アカウントです。私のソリューションには、いくつかの単体テスト プロジェクト、1 つの mvc3 プロジェクト、およびソリューションの下にいくつかのライブラリが含まれています。デプロイしているサーバーに MVC3 をインストールしない場合は、 http://www.iwantmymvc.com/2011-03-23-bin-deploy-aspnet-mvc-3-visual-studio 指導のために。
/p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:DeployIisAppPath="既定の Web サイト/アプリケーション名はこちら" /p:MsDeployServiceUrl=https://devserver02:8172/msdeploy.axd /p:AllowUntrustedCertificate=True /p:UserName =yourDomain\buildaccount /p:Password=パスワード
最初に苦労したのは、「Default Web Site/YourapplicationNameHere」の周りの引用符でした。これにより、部分的なエラーが発生します。
MSBUILD :エラー MSB1008:指定できるプロジェクトは 1 つだけです。
これは、Default Web Site/YourApplicationNameHere の周囲に引用符がない場合に発生します。
次に発生したエラーは、展開用の資格情報のユーザー名とパスワードが間違っていたことが原因でした。このエラーが発生しました:
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 サイト)に連絡できませんでした。リモート エージェント サービスがターゲット コンピュータにインストールされ、開始されていることを確認してください。) サイト名、ユーザー名、およびパスワードが正しいことを確認してください。問題が解決しない場合は、ローカル管理者またはサーバー管理者に問い合わせてください。エラーの詳細:リモートエージェント (URL https://devserver02:8172/msdeploy.axd?site=Default Web サイト)に連絡できませんでした。リモート エージェント サービスがターゲット コンピュータにインストールされ、開始されていることを確認してください。サポートされていない応答を受信しました。応答ヘッダー「MSDeploy.Response」は「」でしたが、「v1」が予期されていました。リモート サーバーがエラーを返しました:(401) 無許可です。
これは、/p:UserName=/p:Password= に指定したユーザー名とパスワードにユーザーのドメインが含まれていなかったためです。ビルドがそのユーザーの下で実行されていたとしても、デプロイされません。なのでURLを直接押してみました https://devserver02:8172/msdeploy.axd ブラウザで操作していることを確認し、ユーザー名とパスワードが機能することを確認します。ここで、機能させるためにドメイン/ユーザーを入力する必要があることに気づきました。
返信しても大丈夫だと思いますが、これらのエラーを見つけた他の哀れな魂がいると思いました、そしてこれは役立つかもしれません...
fileCopy を使用してアプリケーションをデプロイできる場合、そのように TFS ワークフローをカスタマイズするのは簡単です。
次の記事を参考に、CopyDirectory アクティビティを使用しました。
http://www.ewaldhofman.nl/post/2010/11/09/Part-14-Execute-a-PowerShell-script.aspx
そして
とてもシンプルでわかりやすいです。
目的の共有に対する書き込み権限を持つユーザー アカウントを使用してビルド サービスを構成しました。
次に、CopyDirectory ワークフロー ステップを作成し、ソースを BuildDetail.DropLocation + "_PublishedWebsites" として構成し、宛先としてビルド構成に入力できる "DeployPath" という引数を作成しました。
ここで、CopyDirectory アクティビティを呼び出す前に、ビルドが成功したかどうかを確認するテストを実装する必要があります。私が言及した記事はその方法を示しています。また、CopyDirectory の代わりに PowerShell スクリプトを呼び出す方法も説明します。