Plano de fundo / meta
As partes móveis:
- Eu tenho uma conta de serviço, vamos chamá-la
MyDomain\svcMyService
.
- Eu tenho um servidor remoto, vamos chamá-lo de
MyDomain\MyServer
.
- Eu tenho um servidor Jenkins, vamos chamá-lo de
MyDomain\MyJenkins
.
No Jenkins, tenho uma tarefa de implantação. Ele pega alguns artefatos e chama msdeploy
para empurrá-los para o MyServer.
Esta etapa de implantação falha e eu gostaria de descobrir o motivo.
O comando MSDeploy que estou usando
O comando é gerado automaticamente pelo Jenkins e acaba sendo o seguinte (dados sensíveis omitidos):
"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:iisApp="E:\Jenkins\jobs\NotARealJobName\workspace" -dest:iisApp="MyWebSite/MyWebApp",ComputerName="https://MyServer:8172/MsDeploy.axd",UserName=MyDomain\svcMyService,Password="NotARealPassword" -allowUntrusted
O erro
A mensagem de erro que vejo na saída do msdeploy é:
Error Code: ERROR_USER_UNAUTHORIZED
More Information: Connected to the remote computer ("MyServer") using the Web Management Service, but could not authorize. Make sure that you are using the correct user name and password, that the site you are connecting to exists, and that the credentials represent a user who has permissions to access the site. Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED.
Error: The remote server returned an error: (401) Unauthorized.
Minha compreensão do que tenho que fazer
Esta pode ser uma lista incompleta ou incorreta. Por favor, me diga se é onde o problema poderia estar.
Eu acho que tenho que:
- Instale o WebDeploy no IIS (a versão 3.6 é a mais recente neste caso).
- Ativar o serviço de gerenciamento no IIS.
- Crie um pool de aplicativos que seja executado como
MyDomain\svcMyService
.
- Sim, o mesmo nome de usuário que implanta também está sendo executado. Não é o melhor, eu sei. Fora das minhas mãos no momento.
- Crie o diretório do meu aplicativo da Web do IIS.
- Conceder permissões neste diretório.
- Permissões completas para
svcMyService
- Permissões completas para
WDeployAdmin
- Permissões completas para
NetworkService
(já que o WMSvc é executado como)
- Crie o site da Web com a porta apropriada
- O site deve ser executado no pool de aplicativos da conta de serviço
- O site deve se conectar à pasta usando a conta
svcMyService
.
- Crie um aplicativo da web no site.
- O site deve se conectar à pasta usando a conta
svcMyService
.
- Adicione a conta
svcMyService
como um gerenciador de implantação no nível do site e do aplicativo.
- Verifique se as contas locais
WDeployConfigWriter
e WDeployAdmin
não expiraram e se as senhas não podem ser alteradas.
- Verifique se a delegação de gerenciamento do IIS está usando
WDeployConfigWriter
e WDeployAdmin
contas e atualize essas credenciais para cada delegação se você tiver alterado a senha para essas contas locais.
Resolução de problemas até agora
Vou manter essa lista atualizada enquanto tento solucionar problemas.
Check WMSvc IIS Logs - parece que meu usuário não tem os direitos para publicar
- A amostra do registro está abaixo:
#Fields
: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2015-09-14 17:10:06 [Server IP] HEAD /MsDeploy.axd - 8172 - [Jenkins IP] - - 401 2 5 15
Eu vejo que todos os status são 401.2 com um código win32 de 5.
De acordo com este link de solução de problemas , "Se o usuário for autenticado, mas não tiver os direitos necessários para publicar, a entrada de log será semelhante a" that ( 401 2 5
).
Artigos referenciados