2012-05-04 183 views
5

[Update2] 因此,當我從CLI運行git時,它會提示我輸入密碼嗎?我能夠使用ssh私鑰的密碼訪問github服務器,但我從來沒有在Jenkins中提示這一點,也沒有要求提供它。 [/ Update2]EC2/AWS,Jenkins,Git,SSH

[更新] 是的。我在EC2上的一個Ubuntu實例上運行這個。我在/var/lib/jenkins/.ssh中生成了由Jenkins創建的用戶的ssh密鑰。我在Jenkins中設置了安全選項來使用Unix用戶/組。我想讓詹金斯從git(github)中拉出來。我得到以下錯誤:

hudson.plugins.git.GitException: Could not clone [my personal repo] 
    at hudson.plugins.git.GitAPI.clone(GitAPI.java:245) 
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1121) 
    at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1063) 
    at hudson.FilePath.act(FilePath.java:832) 
    at hudson.FilePath.act(FilePath.java:814) 
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1063) 
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1218) 
    at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:581) 
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:470) 
    at hudson.model.Run.run(Run.java:1434) 
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46) 
    at hudson.model.ResourceController.execute(ResourceController.java:88) 
    at hudson.model.Executor.run(Executor.java:239) 
Caused by: hudson.plugins.git.GitException: Command "git clone --progress -o origin [email protected]:bobbylo/Verbify.git /var/lib/jenkins/.jenkins/jobs/build_dev/workspace" returned status code 128: 
stdout: Initialized empty Git repository in /var/lib/jenkins/.jenkins/jobs/build_dev/workspace/.git/ 

stderr: Permission denied (publickey). 
fatal: The remote end hung up unexpectedly 

我已經通過Github的ssh教程。我在EC2實例上生成了一個私鑰。將它放到用戶的.ssh目錄中,jenkins。將公鑰放在Github上(同時嘗試部署密鑰+普通SSH密鑰)。我已經驗證了我可以做git over-the-wire操作(拉,克隆等),並且它可以從CLI和用戶一起工作。我已經爲用戶正確設置了unix用戶/組權限(事實上,當我更改它時,我在Jenkin的控制檯日誌中看到了錯誤日誌更改)。當我嘗試使用Jenkin git插件或執行Jenkins shell命令時,出現上述錯誤。

我讀過關於ssh-agent和ssh-add以及如何將它與您的shell啓動腳本綁定,因此您不需要爲每個命令輸入密碼 - 我不確定這是否與此處相關。

否則我不知道還有什麼我可以嘗試。任何提示將有所幫助!

+0

而http://stackoverflow.com/questions/6515039/jenkins-git-permission-denied-publickey沒有幫助嗎? – VonC

+0

我認爲你使用Linux?如果是這樣的話,Jenkins可能會以用戶「jenkins」的身份運行。用戶「jenkins」是否可以訪問必要的SSH密鑰(可能位於/var/lib/jenkins/.ssh)? – msandiford

+0

我在AWS上的ubuntu盒子上。是的,我正在使用的用戶是/ var/lib/jenkins中的jenkins – tom

回答

4

想通了:

- 它證明,如果你運行它不會因爲它使用shell環境中,一個守護你跑了它。 - 它也發現任何需要用戶提示的cmd(如ssh複述),Jenkins將其視爲錯誤。

的解決方案,現在是:

-Run詹金斯後我加入了通過GitHub的酒吧關鍵的ssh-agent SSH-添加,使其不提示覆述。

如果我想運行Jenkins作爲守護進程,我想在運行之前必須正確設置ssh-agent(我不認爲它使用當前的shell環境?)。

0

正面臨類似的問題,我所要做的就是確保部署密鑰是在作爲jenkins安裝的一部分創建的用戶「jenkins」嵌入後生成的,然後在您擁有jenkins服務器後重新啓動jenkins服務器複製github中的部署密鑰中的公鑰。