Git

jenkins 無法連接到 git 儲存庫

  • March 22, 2015

我無法以 Jenkins 可以訪問它的方式配置 git 儲存庫 url。

在“項目 > 配置 > 原始碼管理”下,我將儲存庫 URL 設置為“git@store:repositories/testproject.git”

我收到此錯誤:

Failed to connect to repository : Command "/usr/bin/git -c core.askpass=true ls-remote -h git@store:repositories/testproject.git HEAD" returned status code 128:
stdout: 
stderr: Permission denied, please try again. 
Permission denied, please try again. 
Permission denied (publickey,password). 
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

使用該 URL 的訪問在 shell 上工作:

jenkins@dilbert:~$ /usr/bin/git -c core.askpass=true ls-remote -h git@store:repositories/testproject.git
git@store's password: 
4fd35a4f528e2f2921a52cfd03918b7cbde3d253    refs/heads/master

我被要求輸入密碼並且它有效。

我將相同的密碼與 Jenkins 中的憑據關聯到“git/”,我還嘗試了“git@store/”。沒有工作。

請注意,這不是關於 github,而是關於本地 git 儲存庫。

更新:

將 jenkins master 的 pub 密鑰添加到 build slave,有助於使配置正常工作:

ssh-copy-id jenkins@dilbert

現在建構失敗了:

> /usr/bin/git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> /usr/bin/git config remote.origin.url git@store:repositories/testproject.git # timeout=10
Fetching upstream changes from git@store:repositories/testproject.git
> /usr/bin/git --version # timeout=10
> /usr/bin/git -c core.askpass=true fetch --tags --progress git@store:repositories/testproject.git +refs/heads/*:refs/remotes/origin/*
ERROR: Error fetching remote repo 'origin'
hudson.plugins.git.GitException: Failed to fetch from git@store:repositories/testproject.git
   at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:735)
   at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:983)
   at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1016)
   at hudson.scm.SCM.checkout(SCM.java:484)
   at hudson.model.AbstractProject.checkout(AbstractProject.java:1270)
   at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:609)
   at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
   at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:531)
   at hudson.model.Run.execute(Run.java:1751)
   at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
   at hudson.model.ResourceController.execute(ResourceController.java:89)
   at hudson.model.Executor.run(Executor.java:240)
Caused by: hudson.plugins.git.GitException: Command "/usr/bin/git -c core.askpass=true fetch --tags --progress git@store:repositories/testproject.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout: 
stderr: Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

store 是 jenkins master,dilbert 是 build slave。ssh 從 master 到 slave 工作。

jenkins@store:~$ ssh dilbert uptime
16:06:21 up 3 days, 18:53, 13 users,  load average: 0,31, 0,38, 0,50

任何想法如何調試這個?

身份驗證通過 ssh 工作。您是否已將 jenkins 使用者的公共 ssh-key 添加到您的 git-server 上的 git-user 中?

如果您需要有關如何設置 ssh 身份驗證的說明,請告訴我,我將在此處編輯此文章。

/編輯:

很高興你讓它執行起來。我在 jenkins 官方網站上查看了有關配置的 ssh 部分的詳細手冊,但我找不到任何內容。

所以這裡有一個快速概述 - 如果這是您需要的,請告訴我。

  1. jenkins slave(建構機器)連接到 git-server(jenkins master)
  2. 建構機器以 jenkins 使用者身份執行(例如 jenkins@dilbert:~$ )
  3. git-server 以 git 使用者身份執行(例如 git@store:~$ )
  4. jenkins@dilbert 公鑰需要放在 git@store authorized_keys
  5. 執行jenkins@dilbert:~/.ssh$ ssh-copy-id git@store將 jenkins@dilbert ssh 公鑰複製到 git 伺服器

引用自:https://serverfault.com/questions/677371