Разбиение пакета MsBuild и развертывание в отдельные команды MsBuild и MsDeploy
У меня есть несколько проблем, которые вызывают команду MsBuild package + deploy на две отдельные команды. (Мне нужно сделать это, чтобы передать дополнительные параметры 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.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'.
(и еще несколько операций чтения/записи)
Что-то явно не так с путями, к которым он пытается получить доступ (поскольку он отлично работает с другим методом) - я не уверен, что он даже пытается правильно использовать таргетинг iisApp, и на данный момент я не думаю будет также установлен правильный web.config.
Ответы
Ответ 1
У меня это исправлено сейчас - мне нужна была другая команда, которую использовал автоматически созданный файл .cmd, но сравнение двух позволило мне исправить (спасибо @Vishal R. Joshi)
Мне нужны были различия:
- базовая аутентификация
- разрешить ненадежные сертификаты
- ? site = staging.webserver в конце пути MsBuild.axd, как и в моей исходной команде
- переопределить имя веб-приложения 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
Надеюсь, это поможет кому-то!
Ответ 2
Добавьте правило делегирования на сервере с помощью inetmgr, чтобы позволить развертыванию-развертыванию выполнять операции set-Acl.
Inetmgr → Нажмите на сервере node → Делегирование службы управления (в Менеджменте) → Нажмите Добавить правило вправо → Выберите шаблон с надписью "Установить разрешения для приложений" → Принять значения по умолчанию и нажмите "ОК".
Это должно позволить вам развернуть любой пакет или манифест с помощью setAcl, пока пользователь, которому вы развертываете, имеет разрешения на сайт, на который вы развертываете.
Ответ 3
Вы можете указать флаг -setParam: name= '', value = '' при вызове файла MyProject.deploy.cmd, который создается при создании пакета из Интернета проект. Cmd - дружественная оболочка вокруг msdeploy.exe, поэтому вам не нужно указывать все остальные значения по умолчанию.
Здесь подробности: http://evolutionarydeveloper.blogspot.co.uk/2013/05/specifying-environment-variables-at.html