簡體   English   中英

Jenkins:無法連接到存儲庫

[英]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 上解決它的方法是這樣的:

  1. 切換到 jenkins 用戶 (sudo -iu jenkins)
  2. 運行:ssh-keygen(注意 - 您現在正在為 jenkins 用戶創建 ssh 密鑰對。您應該看到如下內容:輸入用於保存密鑰的文件 (/Users/Shared/Jenkins/.ssh/id_rsa):
  3. 一直按 Enter 鍵獲取默認值直到結束
  4. 在您的終端上運行 Jenkins 錯誤消息中顯示的命令(例如:“git ls-remote -h git@github.com:adolfosrs/jenkins-test.git HEAD”)
  5. 系統會詢問您是否要繼續。 說是
  6. Github 存儲庫將添加到您的 known_hosts 文件中:/Users/Shared/Jenkins/.ssh/
  7. 返回 Jenkins 門戶並嘗試您的 Github SSH url
  8. 它應該工作。 祝你好運

這是一個非常棘手的問題 - 即使您熟悉 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,如

https://yourserver.com/your-repositorypath

請注意,您仍然需要 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 密鑰。 我通過以下方式解決了這個問題

第1步

在jenkins作業中,在Source Code Management下填寫以下信息

存儲庫

存儲庫 URL:ssh://git@my_server/repo.git
憑據:-無-

第2步

在我的設置中 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

第 3 步

將您的公鑰添加到您的 GIT 服務器帳戶。 運行 jenkins 作業,現在您應該能夠通過 jenkins 的 ssh 連接到 GIT 帳戶。

在我們的例子中, git必須安裝在 Jenkins 服務器上。

檢查以下設置。 那總是對我有用。

詹金斯配置:

1) 檢查是否正確指定了 git 可執行文件

2)提供SSH倉庫鏈接git@blahblah

3) 在憑據下 >> 選擇用戶名和身份驗證密鑰(轉到您的服務器,生成 SSH 密鑰 ssh-keygen... 將密鑰復制到 JENKINS_HOME/,ssh)您應該能夠從 Jenkins 連接到您的 GIT 存儲庫

在 Ubuntu 上,將id_rsaid_rsa.pub文件放在/var/lib/jenkins/.ssh

讓詹金斯擁有它們sudo chown -R jenkins /var/lib/jenkins/.ssh/

確保在 GitHub(或類似)中將 Jenkins 密鑰添加為具有 RW 訪問權限的部署密鑰 - 為此使用id_rsa.pub密鑰。

現在一切都應該與 SCM 同步插件配合使用。

Jenkins 以另一個用戶的身份運行,而不是您的普通登錄名。 所以,這樣做來解決ssh問題:

  1. 以 jenkins su jenkins身份登錄(您可能首先必須執行sudo passwd jenkins才能為 jenkins 設置密碼。我找不到默認值...)
  2. 生成 ssh 密鑰對: ssh-keygen
  3. 將公鑰( id_rsa.pubid_rsa.pub到您的 github 帳戶(或任何地方)
  4. 將 repo 克隆為 jenkins ,以便將主機添加到 jenkins 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 解決了這個問題。

就我而言,我通過以下方式解決了這個問題

  • 單擊“憑據”文本旁邊的“添加”按鈕
  • 添加憑據( loginpassword
  • 在“添加”按鈕左側的彈出菜單上選擇這些憑據
  • 等待幾秒鍾

我的環境是 Jenkins 安裝在 Windows 中。 UI 問題是為什么將警告放在解決它的工具之前。

我在以下步驟中解決了同樣的問題:

  1. 在 CMD 行上運行 > git.exe ls-remote URL
  2. 然后提供 git 憑據:您將找到 git 存儲庫的所有負責人
  3. 返回Jenkins,在SCM中提供你的git倉庫URL,然后在credentials中添加你的Git repo的憑證。

如果您使用的是 dockerized Jenkins 和 github,請按照以下步驟操作。

  1. 使用 docker 命令訪問 Jenkins 容器docker exec -it your-container-id bash
  2. 然后使用命令ssh-keygen生成 ssh 密鑰回車直到提示完成。
  3. 使用命令cat ~/.ssh/id_rsa.pub訪問您的公鑰
  4. 復制顯示的密鑰,然后將其添加到您的 github,如下圖所示。 在此處輸入圖像描述

對於 jenkins 通過 SSH 進行通信:

  1. 我們go下的用戶jenkins:su jenkins(第一次需要給他設置密碼:sudo passwd jenkins)
  2. 在根目錄下創建 jenkins'a.ssh: mkdir.ssh
  3. 創建 SSH 個密鑰:ssh-keygen
  4. 將.pub密鑰上傳到GitHub,將私鑰上傳到項目中
  5. 在 GitHub 上克隆 SSH 下的任何存儲庫:git clone git@github.com:username/forJenkins.git 全部完成!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM