TFS2010에서 MSBUILD를 통해 MSDEPLOY를 실행하려면 어떻게해야합니까?


78

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.


@pure 나도 꽤 실망했습니다. 결국 작동하기를 바랍니다. 전담 (과다 지불) 빌드 담당자가없는 팀의 경우 정말 쉬워야합니다. 최근에 작업해온 페이스 북 통합에 비하면 산들 바람으로 밝혀졌지만!
Simon_Weaver

ㅎ :) 오늘 드디어 했어요. 그녀는 일한다!
Pure.Krome

4
@shaun - 당신이 ;-)를 사용하는 방법을 알고있는 경우에는 그냥 벌금을 작동하지 않습니다
Simon_Weaver


4
@Simon_Weaver 어쩌면 그 빌드 녀석은 결국 그렇게 과다 지불되지 않았을 것입니다 ;-)
Damien Ryan

답변:


48

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이기 때문에) ....

여기에 이미지 설명 입력


환상적인 대답입니다. 필요한 사람을 위해 추가하려고했는데, 빌드 및 배포 단계를 분리하려는 경우 찾고있는 대상은 WebMSDeployPublish입니다. (따라서 / t : Build / p : DeployOnBuild = True 대신 / t : WebMSDeployPublish 만있을 수 있습니다.)
moswald

마지막 게시물에 대한 후속 조치 : WebMSDeployPublish는 VS 11 개발자 미리보기에서만 사용할 수 있습니다. 죄송합니다.
moswald

3
당신의 대답은 여러면에서 제 삶을 향상 시켰습니다. Microsoft가이 정보를 이렇게 압축하지 못한 이유가 확실하지 않습니다.
Michael McGuire 2012 년

3
당신은 내 친구 록 스타입니다. 나는 WMSVC를 사용하여 모든 방식으로 그리고 결국이 시도에 대해 머리를 부딪 혔습니다.
uadrive

msbuild는 여전히 나를 위해 배포를 자동으로 우회했습니다. 이 대답은 저를 승리로 이끌었습니다 . stackoverflow.com/a/15543183/141508 ; 또한 C : \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web 디렉터리를 개발 상자에서 빌드 서버 로 복사해야했습니다 .
Paul Smith

19

마침내 나를 위해 일한 단계는 다음과 같습니다. 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 문제 해결

추가 문제 해결


6
참고로-/ p : SkipExtraFilesOnServer = true는 기존 사이트를 유지합니다.
NotMe 2010

@Chris 나는 모든 곳에서 그 재산을 찾고 있었다
Joseph

@Joseph : 드디어 어디에서 찾았는지 기억이 나지 않지만 도움이 돼 기쁩니다!
NotMe 2010

한 가지 질문입니다. / p : DeployTarget = MSDeployPusblish는 TFS 관리 빌드가 완료되었을 때 자체적으로 배포되도록 작동했습니다. 유일한 문제는 web.config 변환이 잘못되었다는 것입니다. web.config 변환이 특정 구성에 대해 작동하도록 강제하는 방법이 있습니까?
Michael McCarthy

16

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


문제에 대해 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

따라서 지금이 주제를 자세히 배우려면 해당 파일을 검사하고 직접 학습해야합니다.


저는 이러한 기술을 자세히 다룰 무언가를 작업 할 것입니다.하지만 꽤 오랫동안 출시되지는 않을 것입니다. 여전히이 문제에 대해 알아낼 것이 많습니다.

사용자 이름 / 비밀번호 거래를 시도하고 효과가 있는지 알려주시겠습니까?


마침내 작동하도록 관리했지만 RemoteAgent가 아닌 WMSVC를 통해서만 작동했습니다. 시도한 URL에 상관없이 원격 에이전트에 연결할 수 없습니다.
Simon_Weaver

1
이제 언급 했으므로 https에 WMSVC가 필요하다고 생각합니다. 나는 그것에 주목하지 않았다.
Sayed Ibrahim Hashimi 2010-04-17

1
나는 내가 시도 했든 아니든 시도해 보았다. RemoteAgent가 작동하지 않았다 왜 그냥 볼 수 없습니다 - 난 정말 내가 사용하는 걱정하지 않는다
Simon_Weaver

사용자 이름과 암호를 코딩하는 대신 Windows 인증을 사용할 수 있습니까?
Maslow

WMSVC에 대한 Sayeds 의견은 저에게 중요한 포인트였습니다. https 주소를 msdeploy 서비스에 넣으려고하면 http 주소도 추가되었습니다. 'RemoteAgent'에서 WMSVC로 전환하면 https가 포함 된 주소가 리터럴로 사용되어 저에게 효과적입니다.
The Senator

6

비슷한 문제가 있었고 해결책은 다음 매개 변수를 갖는 것이 었습니다.

/ 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 폴더에 포함되어 있지 않다는 것을 알았지 만 그것은 나에게 큰 문제가 아닙니다.


MsDeployServiceUrl에 대한 모든 종류의 변형을 시도했습니다. 나는 항상 다음과 같은 것을 얻습니다 : VsMsdeploy failed. (원격 에이전트 (URL localhost / MSDEPLOYAGENTSERVICE? site = staging.example.com )에 연결할 수 없습니다. 원격 에이전트 서비스가 대상 컴퓨터에 설치되고 시작되었는지 확인하십시오.) 오류 세부 정보 : 원격 에이전트 (URL localhost / MSDEPLOYAGENTSERVICE? site = staging.rollingrazor.com )에 연결할 수 없음
Simon_Weaver

이것은 효과가있는 것 같습니다. 그러나 이것은 Vishal이 그의 강연에서했던 것과 거의 같습니다. 에이전트 서비스는 확실히 액세스 할 수 있습니다. 브라우저에서 localhost / MSDEPLOYAGENTSERVICE 를 누르면 로그 항목이 C : \ Windows \ ServiceProfiles \ NetworkService \ AppData \ Local \ Temp \ MSDepSvc.log
Simon_Weaver에 추가됩니다

1
하나의 솔루션에서 3 개의 애플리케이션을 배포 할 위치를 어떻게 지정 했습니까?
GWLlosa

4

DeployTarget = Package를 설정할 수도 있습니다. 이렇게하면 패키지가 준비되지만 즉시 배포되지는 않습니다. 자세한 내용은 이 블로그 게시물을 참조하십시오 .


3

나에게 문제는 그것이 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

작동하는 방법은 다음과 같습니다. 이것은 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 를 눌러 작동하는지 확인하고 사용자 이름과 암호가 작동하는지 확인했습니다. 이것이 내가 작동하게하려면 도메인 / 사용자를 입력해야한다는 것을 알았습니다.

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


1

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 스크립트를 호출하는 방법을 가르칩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.