2011-03-30 4 views
12

MsBuild 패키지 + deploy 명령을 두 개의 별도 명령으로 분리하는 데 몇 가지 문제가 있습니다. (MsDeploy에 추가 매개 변수를 전달하려면이 작업을 수행해야합니다.) 이처럼 좋은 모습을 작동MsBuild 패키지 속보 및 별도의 MsBuild 및 MsDeploy 명령으로 배포

명령은 :

msbuild "src\Solution.sln" 
    /P:Configuration=Deploy-Staging 
    /P:DeployOnBuild=True 
    /P:DeployTarget=MSDeployPublish 
    /P:MsDeployServiceUrl=https://192.168.0.1:8172/MsDeploy.axd 
    /P:DeployIISAppPath=staging.website.com 
    /P:AllowUntrustedCertificate=True 
    /P:MSDeployPublishMethod=WmSvc 
    /P:CreatePackageOnPublish=True 
    /P:UserName=staging-deploy 
    /P:Password=xyz 

분리 포장 명령은 다음과 같습니다 잘 작동

msbuild "src\Solution.sln" 
    /P:Configuration=Deploy-Staging 
    /P:DeployOnBuild=True 
    /P:DeployTarget=Package 
    /P:_PackageTempDir=C:\temp\web 

합니다. 그러나 다음 MsDeploy 부분 :

msdeploy 
-verb:sync 
-allowUntrusted 
-usechecksum 
-source:manifest= 
    'src\WebProject\obj\Deploy-Staging\Package\WebProject.SourceManifest.xml' 
-dest:auto,ComputerName= 
    'https://192.168.0.1:8172/MsDeploy.axd?site=staging.website.com', 
    username='staging-deploy',password='xyz',authType='basic',includeAcls='false' 
-enableRule:DoNotDeleteRule 

wmsvc.exe Error: 0 : Attempted to perform an unauthorized operation. 
setAcl/C:\temp\web (Read) 
ProcessId=15784 
ThreadId=31 
DateTime=2011-03-30T14:57:02.4867689Z 
Timestamp=3802908721815 
wmsvc.exe Error: 0 : Not authorized. 
Details: No rule was found that could authorize user 'staging-deploy', 
     provider 'setAcl', operation 'Read', path 'C:\temp\web'. 

(그리고 몇 가지 더 읽기/쓰기 작업)

가 뭔가 분명히 잘못된 것입니다 WmSvc.log에서 다음과 같은 오류와 함께 실패 그것은 (그것은 다른 방법으로 잘 작동합니다) 액세스하려고하는 경로 - iisApp 타겟팅을 올바르게 사용하려고하는지 모르겠지만, 현재 올바른 web.config 중 하나가 배포 될 것이라고 생각하지 않습니다.

답변

15

- 내가 자동으로 생성 .cmd 파일이 사용 된 하나에 다른 명령을 필요로하지만, 비교 두 사람은

(감사 @Vishal R. 조시를) 그것을 해결하기 위해 저를 허용 내가 필요

의 차이는 있었다 :

  • 기본 인증
  • 내 원래의 명령대로 MsBuild.axd 경로의 끝에 신뢰할 수없는 인증서를
  • 사이트 = staging.webserver을 허용
  • 재정 params 객체를 파라미터 설정되어있는 IIS 웹 응용 프로그램의 이름은
  • 이 규칙을 삭제하지 마십시오 가능 파일

우승 명령은 다음과 같다 :

msdeploy 
-verb:sync 
-allowUntrusted 
-source:package='src\WebProject\obj\Deploy-Staging\Package\WebProject.zip' 
-dest:auto,ComputerName= 
    'https://192.168.0.1:8172/MsDeploy.axd?site=staging.website.com', 
    username='staging-deploy',password='xyz',authType='basic',includeAcls='false' 
    setParamFile: 
    "src\WebProject\obj\Deploy-Staging\Package\WebProject.SetParameters.xml" 
-setParam:name='IIS Web Application Name',value='staging.website.com' 
-enableRule:DoNotDeleteRule 
-disableLink:AppPoolExtension -disableLink:ContentExtension 
-disableLink:CertificateExtension 

희망이 사람을 도와줍니다!

+1

James는 myproj.deploy.cmd에 의해 생성 된 msdeploy 명령입니다. 파일이나 손으로 만들어진거야? 감사합니다. Vishal R. Joshi | http://vishalrjoshi.com | http://twitter.com/vishalrjoshi –

+1

안녕하세요, Vishal은 아닙니다. deploy.cmd 명령의 문제점은 다음과 같습니다. 기본 인증을 설정해야하며 사이트에 stage.webserver를 매개 변수로 추가해야했습니다. 사용자가 모든 IIS에 액세스 할 수있는 권한이 없으므로 대상 컴퓨터 이름, 즉 지금이 작업을 수행 할 수있었습니다. 소스를 사용해야했음을 알았습니다. 출처 : 패키지보다는 매니페스트 (나는 생각합니다. 로컬 서버가 아닌 대상 서버의 매니페스트 정의를 사용하여 패키지를 만들 수 있습니다. 이는 패키지 자체가 어떻게 작동하는지 오해 한 것입니다. –

1

inetmgr을 사용하여 서버에 위임 규칙을 추가하여 staging-deploy에서 set-Acl 작업을 수행하도록 허용합니다.Inetmgr -> 서버 노드 -> 관리 서비스 위임 (관리) -> 오른쪽에 규칙 추가 -> "응용 프로그램의 권한 설정"-> 기본값 수락이라는 템플릿을 선택하고 확인을 누릅니다.

배포하려는 사용자가 배포 할 사이트에 대한 사용 권한이있는 한 setAcl을 사용하여 패키지 또는 매니페스트를 배포 할 수 있어야합니다. 나는이 수정되었습니다있어

+1

감사 Owais을하지만, 이미 (contentPath를, createApp 및 iisapp는 함께) 해당 사용자에 대한 SETACL 권한을 가지고있다. 또한 확실히 msdeploy를 직접 호출하면 (정확하게 수행하고 있다면!) msbuild 경로와 동일한 서버 측 사용 권한이 필요합니다. - 그 작업은 완전히 정상적으로 작동합니다. –

관련 문제