teamcity,在代理伺服器後面使用 bitbucket (git) 設置 vcs root
我在企業防火牆後面的 Windows Server 2012 機器上安裝了 TeamCity,該防火牆需要通過代理伺服器進行使用者身份驗證才能訪問 Internet。
我想將 TeamCity 連接到託管我們項目的 Bitbucket (git),以提取程式碼並在 corp 網路中建構和部署。
Git 通過 SourceTree(Git Windows 客戶端)和命令行執行良好。我已將代理設置添加到 .gitconfig 中,它可以通過代理通過 https 毫無問題地連接。
到現在為止還挺好。但是,當我嘗試讓 TeamCity 與 bitbucket 對話時,我收到一個錯誤:
連接失敗! 列出遠端參考失敗:java.netConnectException:連接被拒絕:連接 bitbucket.org
我查看了文件,如果您想通過代理進行連接,您需要將憑據傳遞給執行 TeamCity 的 JVM。當我在 Windows Server 2012 上並且 TeamCity 作為服務執行時,這應該是通過設置如下環境變數來實現的:
TEAMCITY_SERVER_OPTS -Dproxyset=true -Dhttp.proxyHost=11.111.1.11 -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password -Dhttp.nonProxyHosts=localhost|127.0.0.1 -Dhttps.proxyHost=11.111.1.11 -Dhttps.proxyPort=8080 -Dhttps.proxyUser=username -Dhttps.proxyPassword=password -Dhttps.nonProxyHosts=localhost|127.0.0.1
我創建了一個系統級 env 變數並重新啟動了伺服器,然後出現以下錯誤:
**https://bitbucket.org/teamname/example.git:**需要 407 代理身份驗證(Forefront TMG 需要授權才能完成請求。拒絕訪問 Web 代理過濾器。)
所以這給我留下了兩種可能性
- 防火牆正在阻止來自 Windows 服務的請求
- 使用者名和密碼未傳遞
TeamCity文件沒有提到 proxyUser 和 proxyPassword 參數,我在查看了可用的 JVM 代理參數後自己插入了它們。
我已經請我們的一位網路人員看一下防火牆(不是今天),但與此同時,如果有人有這方面的經驗並且知道我是否遺漏了什麼。任何幫助都感激不盡。
2016 年 2 月 16 日更新
在查看 JetBrains 支持網站時,我發現以下內容:
您好,我們不支持從命令行進行代理身份驗證。並且只設置參數是行不通的。
此外,上述選項僅適用於使用 TC 伺服器 JVM 執行的 java 程式碼。但是,我們經常使用本機客戶端來訪問 VCS:hg、perforce 和 TFS。Git 和 svn 使用 java 庫。
所以看起來環境變數的方法是死路一條,將不得不考慮使用 Git 客戶端進行連接。
因此,如何讓 TeamCity 在 NTLM 代理伺服器後面工作的答案就是作弊。
最後,我安裝了一個名為CNTLM Authentication Proxy的應用程序,它位於 TeamCity 和我的 NTLM 代理之間並處理所有請求。
當它工作時,我可以連接到 bitbucket 並觸發建構等等。但我應該提醒一句,在 Windows Server 2012 R2 上,它崩潰了很多。起初我們並沒有註意到太多,但是當我們向 TeamCity 添加應用程序時,我們每天都會發生多次崩潰,需要重新啟動 CNTLM 服務。
我現在有一個沒有身份驗證的新代理設置來解決這個問題。你的旅費可能會改變。
要將 TeamCity 連接到 CNTLM,您需要添加一個具有以下值的環境變數 TEAMCITY_SERVER_OPTS
-Dproxyset=true -Dhttp.proxyHost=localhost -Dhttp.proxyPort=3128 -Dhttp.nonProxyHosts="localhost|127.0.0.1" -Dhttps.proxyHost=localhost -Dhttps.proxyPort=3128 -Dhttps.nonProxyHosts="localhost|127.0.0.1"
埠 3128 是 CNTLM 安裝後正在監聽的埠。更改/添加此項後,您需要重新啟動 TeamCity 服務和代理。