Antecedentes / Objetivo
As partes móveis:
- Eu tenho uma conta de serviço, vamos chamá-la de
MyDomain\svcMyService
. - Eu tenho um servidor remoto, vamos chamá-lo de
MyDomain\MyServer
. - Eu tenho um servidor Jenkins, vamos chamá-lo de
MyDomain\MyJenkins
.
Em Jenkins, tenho uma tarefa de implantação. Ele pega alguns artefatos e, em seguida, chama msdeploy
para enviá-los para o MyServer.
Esta etapa de implantação falha e gostaria de descobrir o motivo.
O comando MSDeploy que estou usando
O comando é gerado automaticamente pelo Jenkins e acaba sendo o seguinte (dados confidenciais 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 da saída msdeploy é:
Código de erro: ERROR_USER_UNAUTHORIZED Mais informações: Conectado ao computador remoto ("MyServer") usando o Web Management Service, mas não pôde autorizar. Verifique se você está usando o nome de usuário e a senha corretos, se o site ao qual está se conectando existe e se as credenciais representam um usuário com permissão para acessar o site. Saiba mais em: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED .
Erro: O servidor remoto retornou um erro: (401) Não autorizado.
Minha compreensão do que devo fazer
Esta pode ser uma lista incompleta ou incorreta. Por favor, diga-me se é aqui que o problema pode estar.
Acho que devo:
- Instale o WebDeploy no IIS (3.6 é o mais recente neste caso).
- Habilite o serviço de gerenciamento no IIS.
- Crie um pool de aplicativos executado como
MyDomain\svcMyService
. - Sim, o mesmo nome de usuário que implanta também está executando. Não é o melhor, eu sei. Fora de minhas mãos no momento.
- Crie o diretório para meu aplicativo da Web do IIS.
- Conceda permissões neste diretório.
- Permissões totais para
svcMyService
- Permissões totais para
WDeployAdmin
- Permissões totais para
NetworkService
(já que é assim que o WMSvc é executado)
- Permissões totais para
- Crie o Web Site 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
svcMyService
conta.
- Crie um aplicativo da web no site.
- O site deve se conectar à pasta usando a
svcMyService
conta. - Adicione a
svcMyService
conta como um gerenciador de implementação no site e no nível do aplicativo.
- O site deve se conectar à pasta usando a
- Certifique-se de que o local
WDeployConfigWriter
e asWDeployAdmin
contas não tenham expirado e que suas senhas não possam ser alteradas. - Certifique-se de que a delegação de gerenciamento do IIS esteja usando contas
WDeployConfigWriter
eWDeployAdmin
e atualize essas credenciais para cada delegação se você alterou a senha dessas contas locais.
Solução de problemas até agora
Manterei esta lista atualizada enquanto tento solucionar o problema.
Verifique os logs WMSvc IIS - parece que meu usuário não tem direitos para publicar
- A amostra do log está abaixo:
#Fields
: data hora 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 [IP do servidor] HEAD /MsDeploy.axd - 8172 - [Jenkins IP] - - 401 2 5 15
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 estiver autenticado, mas não tiver os direitos necessários para publicar, a entrada de log será semelhante" a ( 401 2 5
).
Encontrei a resposta neste antigo post do fórum de 2011 - parece muito obscuro.
A solução encontrada naquele post do fórum foi:
HKEY_LOCAL_MACHINE\Software\Microsoft\WebManagement\Server
WindowsAuthenticationEnabled
com um valor de1
Depois de executar essas etapas, parece ter funcionado para mim pela primeira vez.