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.