通過 jenkins 和服務帳戶進行 msdeploy:已連接但“無法授權”?
背景/目標
運動元件:
- 我有一個服務帳戶,我們稱之為
MyDomain\svcMyService
。- 我有一個遠端伺服器,我們稱之為
MyDomain\MyServer
。- 我有一個 Jenkins 伺服器,我們稱之為
MyDomain\MyJenkins
.在 Jenkins 中,我有一個部署任務。它抓取一些工件,然後呼叫
msdeploy
以將它們推送到 MyServer。此部署步驟失敗,我想弄清楚原因。
我正在使用的 MSDeploy 命令
該命令由 Jenkins 自動生成,最終結果如下(省略敏感數據):
"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
錯誤
我從 msdeploy 輸出看到的錯誤消息是:
錯誤程式碼:ERROR_USER_UNAUTHORIZED 更多資訊:使用 Web 管理服務連接到遠端電腦(“MyServer”),但無法授權。確保您使用正確的使用者名和密碼,您要連接的站點存在,並且憑據代表有權訪問該站點的使用者。了解更多資訊:http: //go.microsoft.com/fwlink/ ?LinkId=221672#ERROR_USER_UNAUTHORIZED 。
錯誤:遠端伺服器返回錯誤:(401)未經授權。
我對我必須做什麼的理解
這可能是一個不完整或不正確的列表。請告訴我這是否是問題所在。
我想我必須:
在 IIS 上安裝 WebDeploy(在這種情況下是最新的 3.6)。
在 IIS 中啟用管理服務。
創建一個以
MyDomain\svcMyService
.是的,部署的同一個使用者名也在執行它。不是最好的,我知道。此刻不在我的手中。
為我的 IIS Web 應用程序創建目錄。
授予對此目錄的權限。
- 完全權限
svcMyService
- 完全權限
WDeployAdmin
- 完全權限
NetworkService
(因為這就是 WMSvc 的執行方式)使用適當的埠創建網站
- 網站應該在服務賬戶的應用程序池下執行
- 該網站應使用該
svcMyService
帳戶連接到該文件夾。在網站下創建一個 Web 應用程序。
- 該網站應使用該
svcMyService
帳戶連接到該文件夾。- 將
svcMyService
帳戶添加為站點和應用程序級別的部署管理器。確保本地
WDeployConfigWriter
和WDeployAdmin
帳戶未過期,並且其密碼無法更改。如果您更改了這些本地帳戶的密碼,請確保 IIS 管理委派正在使用帳戶並為每個委派更新這些憑據
WDeployConfigWriter
。WDeployAdmin
到目前為止的故障排除
我會在嘗試排除故障時更新此列表。
檢查 WMSvc IIS 日誌 - 看起來我的使用者沒有發布權限
- 日誌範例如下:
#Fields
: 日期時間 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 時間- 拍攝於 2015-09-14 17:10:06$$ Server IP $$頭 /MsDeploy.axd - 8172 -$$ Jenkins IP $$- - 401 2 5 15
我看到所有狀態都是 401.2,win32 程式碼為 5。
根據此故障排除連結,“如果使用者已通過身份驗證,但沒有發布所需的權限,則日誌條目將如下所示”(
401 2 5
)。引用的文章
我在 2011 年的這個舊論壇文章上找到了答案——看起來真的很模糊。
在該論壇文章中找到的解決方案是:
- 打開系統資料庫
- 打開路徑
HKEY_LOCAL_MACHINE\Software\Microsoft\WebManagement\Server
- 添加一個名為的 DWORD
WindowsAuthenticationEnabled
,其值為1
- 重新啟動 WMsvc 和 IIS
執行這些步驟後,它似乎第一次對我有用。