[visual-studio-2010] TFS2010에서 MSBUILD를 통해 MSDEPLOY를 실행하려면 어떻게해야합니까?

Visual Studio 2010의 새로운 MSDEPLOY 기능과 TFS 내에서 응용 프로그램을 배포하는 방법에 대해 설명하는 Vishal Joshi 의 훌륭한 PDC 강연이 있습니다 . ( 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을 별도로 호출 msdeploy하거나 실행 하지 않고 이러한 인수 를 사용하여 전체 배포를 실행하고 싶습니다 .cmd. 어떻게 할 수 있습니까?

추신. 네, Web Deployment Agent Service실행하고 있습니다. 또한 IIS에서 실행되는 관리 서비스가 있습니다. 나는 둘 다 사용해 보았습니다.


내가 사용하는 Args :

/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) Unauthorized.



답변

IIS7 + 관련 답변 ….

좋아-여기에 내가 한 일이 있습니다. 이 스레드 / 질문에서 Simon Weaver 의 게시물을 따르십시오 .

그러나 MSBuild 설정에 관해서는 .. 여기에있는 대부분의 사람들은 다음 설정을 사용하고 있습니다. /p:MSDeployPublishMethod=RemoteAgent이는 IIS7에 적합 하지 않습니다 . 이 설정을 사용하면 TFS가 URL에 연결을 시도합니다. https://your-server-name/MSDEPLOYAGENTSERVICE 그러나 해당 URL에 액세스하려면 인증 할 사용자가 관리자 여야합니다. 어느 것이 엉망입니다. (그리고 관리자 재정의 규칙을 선택해야합니다). 이 URL은 IIS6 용이라고 생각합니다.

RemoteAgent를 사용하여 연결하려고 할 때 발생하는 표준 오류 메시지는 다음과 같습니다.

Standard 401 Frak Off u suck RemoteAgent, error

C : \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets (3588) : 웹 배포 작업이 실패했습니다. (원격 에이전트 (URL
http : // your-web- server / MSDEPLOYAGENTSERVICE )에 연결할 수 없습니다. 원격 에이전트 서비스가 대상 컴퓨터에 설치되고 시작되었는지 확인하십시오.) 사이트 이름, 사용자 이름 및 암호가 올바른지 확인하십시오. 문제가 해결되지 않으면 로컬 또는 서버 관리자에게 문의하십시오. 오류 세부 정보 : 원격 에이전트 (URL
http : // your-web-server / MSDEPLOYAGENTSERVICE)에 연락 할 수 없습니다. 원격 에이전트 서비스가 대상 컴퓨터에 설치되고 시작되었는지 확인하십시오. 지원되지 않는 응답이 수신되었습니다. 응답 헤더 ‘MSDeploy.Response’는 ‘V1’이었지만 ‘v1’이 필요했습니다. 원격 서버가 오류를 반환했습니다 : (401) Unauthorized.

따라서 .. 변경해야 MSDeployPublishMethod합니다.

/p:MSDeployPublishMethod=WMSVC

WMSVCWindows Manager Service 의 약자입니다. 기본적으로 Remote Agent에 대한 새로운 래퍼이지만 이제 사용자 이름과 암호를 수정하여 제공 할 수 있습니다. 사용자가 관리자 일 필요는 없습니다! (기쁨!) 이제 웹 사이트별로 .. 액세스 할 사용자를 수정할 수 있습니다.

여기에 이미지 설명 입력

또한 이제 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

사용자 이름에 도메인 이름이 있습니다. 그게 필요 해요. 또한 내 사진에서는 도메인 사용자가 관리를 위해 웹 사이트에 액세스하도록 허용했습니다. 따라서 내가 추가 한 새 사용자 계정 (TFSBuildService)에는 Domain Users그룹 에 대한 멤버십이 있습니다 . 그래서 모든 것이 작동합니다.

자-이 모든 것을 읽으 셨다면, lolcat을 드세요 (SOOOOOOOO 2007이기 때문에) ….

여기에 이미지 설명 입력


답변

마침내 나를 위해 일한 단계는 다음과 같습니다. RemoteAgent로 작업하고 싶었지만 무엇을 시도해도 작동하지 않았습니다.

정확히 이렇게 할 필요는 없지만 이것이 제가 작동하게 한 방법입니다.

  • WMSVC 구성
  • 서비스가 시작되었는지 확인
  • IIS 사용자를 구성하고 (IIS에서 최상위 서버 이름 클릭) ‘IIS 관리자 사용자’로 이동합니다. Windows 이름과 다르게 만드는 것이 좋습니다.
  • WMSVC (나를위한 로컬 서비스)의 사용자 계정에 사용중인 IIS 디렉터리에 대한 쓰기 권한이 있는지 확인하십시오.
  • 제 경우에는 SSL 인증서를 사용하고 있습니다 (localhost에 도달하더라도).

이들은 모두 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 문제 해결

추가 문제 해결


답변

안타깝게도 현재로서는 이에 대한 정보가 많지 않습니다. 그래도이 메시지의 끝에서 몇 가지 힌트를 드릴 것입니다.


문제에 대해 MSDeploy를 사용하여 배포하려고 할 때 이전에 이것을 보았고 실행중인 계정에 대상 컴퓨터에서 배포를 실행할 권한이 없었습니다. 따라서 빌드가 실행중인 계정을 살펴보고이 계정에 대상 머신에 배포 할 권한이 있는지 확인해야합니다. 그렇지 않은 경우 몇 가지 옵션이 있습니다. 빌드 사용자에게 권한을 부여하거나 사용자 이름 / 암호를 전달합니다.

값을 전달하려면 이름이 지정된 항목을 정의해야 MsDeployDestinationProviderSetting하며 해당 메타 데이터에는 필요한 값이 포함되어야합니다.

따라서 프로젝트 파일 (또는 전달 된 속성을 통해)에서 다음과 같이 정의합니다.

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

문서를 어디에서 찾을 수 있는지에 관해서는 내가 전에 말했듯이 아직 거기에별로 없습니다. 그러나 전체 웹 게시 파이프 라인이 MSBuild 대상 및 작업에서 캡처되므로 MSBuild에 익숙하다면 스스로 많은 것을 배울 수 있습니다. Visual Studio 2010으로 만든 웹 프로젝트에 대한 .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

참고 : 솔루션을 구축하고 한 번에 세 개의 웹 응용 프로그램을 구축하려고하기 때문에 DeployIisAppPath를 사용하지 않습니다. 또한 MsDeployServiceUrl이 http://staging.example.com 이어야한다고 생각합니다 .

MSDeployPublishMethod에 InProc (기본값 일 수 있음)를 사용할 때 MSBuild는 MsDeployServiceUrl을 무시하고 항상 로컬 서버에 배포를 시도합니다. RemoteAgent로 변경했고 세 가지 웹 애플리케이션이 모두 성공적으로 배포되었습니다. 패키지 파일이 더 이상 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에서였습니다. 빌드 시스템에서 개발 웹 서버 시스템 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 = “기본 웹 사이트 / 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 : 하나의 프로젝트 만 지정할 수 있습니다.

    이것은 기본 웹 사이트 / YourApplicationNameHere 주위에 따옴표가 없을 때 발생합니다.

  2. 다음 오류는 배포를위한 내 자격 증명의 사용자 이름과 암호가 잘못 되었기 때문입니다. 이 오류가 발생했습니다.

    C : \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets (3588) : 웹 배포 작업이 실패했습니다. (원격 에이전트 (URL https : // devserver02 : 8172 / msdeploy.axd? site = 기본 웹 사이트)에 연결할 수 없습니다. 원격 에이전트 서비스가 대상 컴퓨터에 설치되고 시작되었는지 확인하십시오.) 사이트 이름, 사용자 이름 및 암호가 올바른지 확인하십시오. 문제가 해결되지 않으면 로컬 또는 서버 관리자에게 문의하십시오. 오류 세부 정보 : 원격 에이전트 (URL https : // devserver02 : 8172 / msdeploy.axd? site = Default 웹 사이트)에 연결할 수 없습니다. 원격 에이전트 서비스가 대상 컴퓨터에 설치 및 시작되었는지 확인하십시오. 지원되지 않는 응답을 받았습니다. 응답 헤더 ‘MSDeploy.Response’는 ”이지만 ‘v1입니다. ‘이 (가) 예상되었습니다. 원격 서버에서 오류를 반환했습니다 : (401) 권한이 없습니다.

    / p : UserName = / p : Password =에있는 사용자 이름과 암호에 사용자의 도메인이 포함되지 않았기 때문입니다. 빌드가 해당 사용자로 실행되었지만 배포되지 않았습니다. 그래서 브라우저에서 직접 URL https : // devserver02 : 8172 / msdeploy.axd 를 눌러 작동하는지 확인하고 사용자 이름과 암호가 작동하는지 확인했습니다. 이것이 내가 작동하게하려면 도메인 / 사용자를 입력해야한다는 것을 알았습니다.

나는이 오류를 찾는 다른 불쌍한 영혼이 있다고 생각하고 이것이 도움이 될 수 있다고 대답하는 것이 괜찮기를 바랍니다.