[英]Jenkins: Failed to connect to repository
我正在嘗試在 github 存儲庫上連接 jenkins。
當我指定 Repo URL jenkins 返回以下錯誤消息:
無法連接到存儲庫:命令“git ls-remote -h git@github.com:adolfosrs/jenkins-test.git HEAD”返回狀態代碼 128:stdout:stderr:主機密鑰驗證失敗。 致命:無法從遠程存儲庫讀取。 請確保您擁有正確的訪問權限並且存儲庫存在。
當使用 HTTPS:// Url jenkins 返回:
無法連接到存儲庫:無法連接到https://github.com/adolfosrs/jenkins-test.git (狀態 = 407)
我可以在運行 jenkins 的同一台機器上成功克隆 repo,我還運行git ls-remote -h git@github.com:adolfosrs/jenkins-test.git HEAD
命令。 所以我在 github 有正確的 SSH。
問題是我以某種方式使用 root 用戶創建了 ssh 文件。 所以文件所有者是root。
解決方案只是將所有權更改為 jenkins 用戶。
chown jenkins id_rsa.pub
chown jenkins id_rsa
我有同樣的問題。 我在 Mac 上解決它的方法是這樣的:
這是一個非常棘手的問題 - 即使您熟悉 https 與證書的工作方式(OTOH,如果您看到我的解決方法,這似乎非常合乎邏輯:)
如果您想從 shell 通過 http(s) 連接到 GIT 存儲庫,您將確保將公共證書(作為文件)存儲在您的機器上。 然后您將該證書添加到您的 GIT 配置中
git config [--global] http.sslCAInfo“證書”
(用 PEM 文件的完整路徑/名稱替換“證書”:)
對於 shell 使用,您還可以提供一個“.netrc”來證明您的 http-server 登錄憑據。 完成后,您將能夠執行“git clone https://...”而無需任何交互式憑據配置。
然而,對於 Jenkins-service 來說有點不同......這里,jenkins 進程需要知道服務器證書 - 它不使用 shell 設置(在全局 git 配置文件 '.gitconfig ') :P
我需要做的是在 Jenkins 的啟動選項中添加另一個參數。
... -Djavax.net.ssl.trustStore="keystore" ...
(用完整的路徑/名稱替換“keystore”,如下所述:)
secure :) and refer to it with the '-Djavax.net.ssl.trustStore=' parameter.現在將持有證書的網絡服務器的密鑰庫文件復制到某個路徑(我知道這是一個骯臟的黑客,安全:) 並使用“-Djavax.net.ssl.trustStore=' 參數引用它。
現在 Jenkins 服務將接受來自通過 https 提供存儲庫的網絡服務器的證書。 配置 GIT 存儲庫 URL,如
請注意,您仍然需要 jenkins-user 主文件夾下的“.netrc”才能登錄!!! 因此,我所描述的將被視為一種解決方法......直到提供了一個正常工作的憑據幫助程序插件。 恕我直言,這個插件(在其當前版本 1.9.4 中)有問題。
無論我嘗試什么,我都無法讓憑證助手從 Jenkins 工作:( 充其量我看到了一些關於不可訪問的臨時憑證助手文件等的錯誤。你可以在 Jenkins 中看到很多關於它的錯誤報告JIRA,但沒有修復。
所以如果有人讓它正常工作,請分享知識......
PS:使用以下版本的Jenkins插件:
憑據插件 1.9.4、GIT 客戶端插件 1.6.1、Jenkins GIT 插件 2.0.1
當我嘗試將 Windows 服務器中的 jenkins 與我的私人 GIT 存儲庫連接時,我遇到了類似的問題。 以下是Jenkins作業源碼管理部分返回的錯誤
無法連接到存儲庫:命令“git.exe ls-remote -h ssh://git@my_server/repo.git HEAD”返回狀態代碼 128: stdout: stderr: Load key "C:\\Windows\\TEMP\\ssh4813927591749610777. key": 無效格式 git@my_server: 權限被拒絕 (publickey)。 致命:無法從遠程存儲庫讀取。
請確保您擁有正確的訪問權限並且存儲庫存在。
拋出此錯誤是因為 jenkins 無法從其用戶目錄中選擇私有 ssh 密鑰。 我通過以下方式解決了這個問題
在jenkins作業中,在Source Code Management
下填寫以下信息
存儲庫
存儲庫 URL:ssh://git@my_server/repo.git
憑據:-無-
在我的設置中 jenkins 是在本地系統帳戶下運行的,所以用戶目錄是C:\\Windows\\System32\\config\\systemprofile
(這是這個設置中不是很明顯的重要事情)。
現在通過git bash
shell 使用ssh-keygen -t rsa -C "key label"
創建 ssh 私鑰和公鑰。 ssh 私鑰和公鑰位於您登錄用戶目錄的 .ssh 目錄下。 只需復制 .ssh 文件夾並將其粘貼到C:\\Windows\\System32\\config\\systemprofile
將您的公鑰添加到您的 GIT 服務器帳戶。 運行 jenkins 作業,現在您應該能夠通過 jenkins 的 ssh 連接到 GIT 帳戶。
在我們的例子中, git
必須安裝在 Jenkins 服務器上。
檢查以下設置。 那總是對我有用。
詹金斯配置:
1) 檢查是否正確指定了 git 可執行文件
2)提供SSH倉庫鏈接git@blahblah
3) 在憑據下 >> 選擇用戶名和身份驗證密鑰(轉到您的服務器,生成 SSH 密鑰 ssh-keygen... 將密鑰復制到 JENKINS_HOME/,ssh)您應該能夠從 Jenkins 連接到您的 GIT 存儲庫
在 Ubuntu 上,將id_rsa
和id_rsa.pub
文件放在/var/lib/jenkins/.ssh
讓詹金斯擁有它們sudo chown -R jenkins /var/lib/jenkins/.ssh/
確保在 GitHub(或類似)中將 Jenkins 密鑰添加為具有 RW 訪問權限的部署密鑰 - 為此使用id_rsa.pub
密鑰。
現在一切都應該與 SCM 同步插件配合使用。
Jenkins 以另一個用戶的身份運行,而不是您的普通登錄名。 所以,這樣做來解決ssh問題:
su jenkins
身份登錄(您可能首先必須執行sudo passwd jenkins
才能為 jenkins 設置密碼。我找不到默認值...)ssh-keygen
id_rsa.pub
) id_rsa.pub
到您的 github 帳戶(或任何地方)known_hosts
,這是必要的。 現在,您可以根據需要再次刪除克隆的存儲庫。讓我在這里補充一點,可能會產生此類錯誤的一個非常小的問題是存儲庫 URL 中缺少.git
擴展名。 確保輸入以.git
結尾的完全限定 URL。 我使用 bitbucket,所以我要做的是單擊“克隆”,然后會自動為我生成完全限定的 URL。 github 也有類似的方法。
就我而言,我使用 root 用戶編輯了 known_hosts 文件。 因此它將文件所有權更改為 root 並且 jenkins 用戶開始在克隆 git 圖像時拋出“git@github.com:xxxxxx/xxxx.git HEAD”返回狀態代碼 128: stdout: stderr: Host key verification failed” 錯誤。恢復所有權解決了這個問題。
確保將 RSA 主機密鑰和 bitbucket 服務器的 IP 添加到“已知主機”文件中。 內容應該看起來像
bitbucket.org,xx.xx.xx.xx ssh-rsa host_key
請記住將/var/lib/jenkins/.ssh/
所有文件的所有權更改為 Jenkins
到目前為止這里沒有提到,但這也可以來自 stash。 我們遇到了同樣的問題,我們問題的根本原因是我們用於 jenkins 的 stash 實例確實崩潰了。 在我們的案例中,重新啟動 stash 解決了這個問題。
就我而言,我通過以下方式解決了這個問題
login
和password
)我的環境是 Jenkins 安裝在 Windows 中。 UI 問題是為什么將警告放在解決它的工具之前。
我在以下步驟中解決了同樣的問題:
對於 jenkins 通過 SSH 進行通信:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.