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。
OK-これが私がやったことです。多かれ少なかれ、このスレッド/質問の Simon Weaver による投稿に続きます。
しかし、MSBuildの設定に関しては、ほとんどの人が次の設定を使用しています:/p:MSDeployPublishMethod=RemoteAgent
これは、IIS7ではNOT RIGHTです。この設定を使用すると、TFSはURLへの接続を試行します:https://your-server-name/MSDEPLOYAGENTSERVICE
しかし、そのURLにアクセスするには、認証するユーザーが管理者である必要があります。これは壊れています。 (そして、管理上書きルールをチェックする必要があります)。このURLはIIS6用だと思います。
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サイトごとに..にアクセスしたいユーザーを設定できるようになりました。
また、URLへのアクセスを試みます:https://your-web-server:8172/MsDeploy.axd
<-これは、Visual Studio 2010 Publish
ウィンドウの機能とまったく同じです。 (OMG-> PENNY DROPS !! BOOM!)
そして、ここに私の最終的な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だからです)。
最終的に私のために働いたステップはここにあります。 RemoteAgentで動作するようにしたかったのですが、試してみても動作しませんでした。
あなたはこのように正確に行う必要はありませんが、これは私がそれを機能させた方法です
これらはすべて、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を使用して展開しようとしていて、実行中のアカウントにターゲットマシンで展開を実行する権限がなかったときに、これを見てきました。そのため、ビルドを実行しているアカウントを調べ、このアカウントにターゲットマシンにデプロイする権限があるかどうかを確認する必要があります。そうでない場合は、いくつかのオプションがあります。ビルドユーザーに権限を付与するか、ユーザー名/パスワードを渡します。
値を渡す場合は、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 =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フォルダーに含まれなくなったことに気付きましたが、それは大したことではありません。
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は不要です)。
UserNameは、NTLM認証のバグを回避するために空のままになっていることに注意してください(この方法では、展開にTFSビルドエージェントの資格情報を使用します)。 ここで受け入れられた答え を参照してください
これがどのように機能するかを示しています。これは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
私が最初に苦労した項目は、「Default Web Site/YourpplicationNameHere」を囲む引用符でした。
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 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 を実行し、動作を確認し、ユーザー名とパスワードが機能することを確認しました。これは、それを機能させるためにドメイン/ユーザーを配置する必要があることに気づいた場所です。
私はこれが返信してもいいことを願っています私はこれらのエラーを見つけると他の貧しい魂を考え出しました、これは助けになるかもしれません...
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スクリプトを呼び出す方法も教えます。