2011-03-30 13 views
12

Tengo algunos problemas al dividir un paquete MsBuild + comando de implementación en dos comandos separados. (Necesito hacer esto para pasar parámetros adicionales a MsDeploy).Rompiendo el paquete MsBuild y despliéguelo en comandos separados de MsBuild y MsDeploy

El comando que funciona se ve bien como esto:

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 

El comando envases separados se ve así:

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

que funciona muy bien. Pero entonces la porción 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 

falla, con el siguiente error en WmSvc.log

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'. 

(y varios más operaciones de lectura/escritura)

algo va mal con la claridad caminos a los que está intentando acceder (ya que funciona bien con el otro método): no estoy seguro de que siquiera intente utilizar la orientación de iisApp correctamente, y en este momento tampoco creo que se implemente el web.config correcto.

Respuesta

15

Tengo esta resuelto ahora - que necesitaba un comando diferente a la que el archivo .cmd generada automáticamente estaba usando, pero la comparación de los dos me permitió arreglarla (gracias @Vishal R. Joshi)

las diferencias que necesitaba era:?

  • autenticación básica
  • permiten que los certificados no confiables
  • sitio = staging.webserver en el extremo de la trayectoria MsBuild.axd, al igual que con mi mando original de
  • anulación el nombre de aplicación web de IIS que se establece en los parametros archivo
  • habilitar la regla de no elimine

La orden de ganancia es la siguiente:

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 

Espero que esto ayude a alguien!

+1

James, este es el comando msdeploy generado por myproj.deploy.cmd archivo o es hecho a mano? Gracias Vishal R. Joshi | http://vishalrjoshi.com | http://twitter.com/vishalrjoshi –

+1

Hola Vishal, no del todo - el problema con el comando deploy.cmd es que: Necesito establecer la autenticación básica, y tuve que agregar? site = staging.webserver como un parámetro en el el nombre de la computadora objetivo, ya que el usuario no tiene permiso para acceder a todo IIS. Dicho esto, he logrado que esto funcione ahora - Resulta que debería haber estado usando source: package en lugar de source: manifest (creo que estaba intentando para crear un paquete utilizando la definición del manifiesto en el servidor de destino en lugar de localmente, mi propia incomprensión de cómo funcionaría). –

1

Agregue una regla de delegación en el servidor utilizando inetmgr para permitir que staging-deploy lleve a cabo operaciones set-Acl. Inetmgr -> Haga clic en el nodo del servidor -> Delegación del servicio de administración (en Gestión) -> Haga clic en Agregar regla a la derecha -> Elija la plantilla etiquetada "Establecer permisos para aplicaciones" -> Aceptar valores predeterminados y haga clic en Aceptar.

Esto debería permitirle implementar cualquier paquete o manifiesto con setAcl, siempre que el usuario que está implementando tenga permisos para el sitio en el que está implementando.

+1

Gracias Owais, pero ya tiene un permiso SETACL para ese usuario (junto con contentPath, createApp y iisapp). Además, seguramente llamar a msdeploy directamente (¡si lo estoy haciendo correctamente!) Requeriría los mismos permisos del lado del servidor que la ruta de msbuild, y eso funciona completamente bien ... –

Cuestiones relacionadas