设置jenkins与git的集成

10 浏览
0 Comments

设置jenkins与git的集成

我正在尝试使用Git设置Jenkins。当我尝试运行作业时,它给出如下错误:

FATAL: 无法从git@bitbucket.org:xyzlk/xyzlk-services.git获取
hudson.plugins.git.GitException: 无法从git@bitbucket.org:xyzlk/xyzlk-services.git获取
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:647)
    at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:889)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:914)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1253)
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:622)
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:528)
    at hudson.model.Run.execute(Run.java:1745)
    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: 命令"git fetch --tags --progress git@bitbucket.org:xyzlk/xyzlk-services.git +refs/heads/*:refs/remotes/origin/*"返回状态码128:
stdout: 
stderr: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1437)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1225)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:87)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:282)
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:645)
    ... 10 more

我已经将拥有访问该仓库权限的用户组分配给了tomcat7,但仍然没有成功。

在我的Jenkins配置中,我添加了git@bitbucket.org:xyzlk/xyzlk-services.git作为仓库,类型为SSH用户名和私钥。我输入了拥有仓库访问权限的用户名和密钥,但仍然没有成功:(

enter image description here

enter image description here

权限:

drwxr-xr-x  10 root root  4096 Oct 15  2013 usr
drwxr-xr-x 138 root root  4096 Oct 10 09:46 share
drwxr-xr-x   7 tomcat7 root  4096 Oct 13 08:23 tomcat7

在tomcat7内部:

drwxr-xr-x   2 tomcat7 tomcat7 4096 Oct 13 05:31 .ssh

在.ssh内部:

drwxr-xr-x 2 tomcat7 tomcat7 4096 Oct 13 05:31 .
drwxr-xr-x 7 tomcat7 root    4096 Oct 13 08:23 ..
-rwxr-xr-x 1 tomcat7 tomcat7 1679 Oct 13 05:25 id_rsa
-rwxr-xr-x 1 tomcat7 tomcat7  406 Oct 13 05:25 id_rsa.pub
-rwxr-xr-x 1 tomcat7 tomcat7 1326 Oct 13 05:29 known_hosts

0
0 Comments

问题出现的原因:Jenkins执行任务时,需要检查环境变量HOME,根据它来查找公共/私有ssh密钥。具体来说,Jenkins会在$HOME/.ssh(Unix系统)或%HOME%\.ssh(Windows系统)下查找密钥。

解决方法:确保Jenkins在运行时使用相同的账户。可以通过在命令行中执行ssh git.org来检查是否可以成功连接。在Jenkins的配置中,输入有访问存储库权限的用户的用户名,并直接输入密钥。此外,还可以使用Jenkins的SSH Agent插件,该插件只有在私钥有密语保护时才需要使用。首先,建议使用没有密语保护的私钥,并尝试使其正常工作。另外,可以在任务中添加一个构建步骤,用于显示$HOME和用户名的值。

文章如下:

问题:在Jenkins中使用Git设置问题的原因和解决方法

您需要检查Jenkins执行任务时的环境变量HOME(另一种说法是检查Jenkins执行任务时使用的哪个账户)。

根据环境变量HOME的值,Jenkins会在$HOME/.ssh(Unix系统)或%HOME%\.ssh(Windows系统)下查找公共/私有ssh密钥。

您可能可以通过正确的用户在命令行中执行ssh git.org。(确认您在此处使用“git”,而不是用户名)

但是,您需要确保Jenkins在运行时使用相同的账户。

非常感谢您的回复。我已经提供了一个具有访问存储库权限的用户的用户名,并在Jenkins配置中直接输入了密钥。它仍然会查找$HOME/.ssh吗?

您是通过Jenkins的SSH Agent插件进行操作的吗?(链接:wiki.jenkins-ci.org/display/JENKINS/SSH+Agent+Plugin)

是的,我已经安装了Jenkins的SSH插件。

不是“ssh插件”,而是“ssh代理插件”,只有在私钥有密码保护时才需要使用。首先,我建议您使用没有密码保护的私钥,并尝试使其正常工作。

它是ssh代理插件,私钥没有密码保护。我已经添加了一些我目前设置的屏幕截图,您能从中得到一个想法吗?

目录/usr/share/tomcat7存在吗?

但是Jenkins作为tomcat用户运行吗?

我是从war包中运行Jenkins的,不是作为单独的服务。我仍然需要指定用户吗?

您是作为tomcat7登录后运行Jenkins的吗?

不是的。我只是访问URL并运行任务。我找不到指定用户的位置。

尝试在任务中添加一个构建步骤,以显示(echo)$HOME和用户名(或者只显示环境变量env)。

echo $HOME显示/usr/share/tomcat7,但echo $USER没有显示任何内容。我在这里错过了什么?

检查权限(链接:unix.stackexchange.com/a/37166/7490),并检查env的结果(或其他获取用户的方法,链接:stackoverflow.com/a/20964432/6309)。

Jenkins任务作为tomcat用户运行。所以我为tomcat用户创建了一个ssh密钥并尝试了一下。仍然出现相同的错误。

所以,/usr/share/tomcat7/.ssh目录包含id_rsa和id_rsa.pub,并且具有正确的权限吗?父目录中的任何一个(例如/usr/share)是否对组或其他用户具有写权限(链接:stackoverflow.com/a/23751734/6309)。

我认为示例中的权限级别都是正确的。我仍然得到相同的错误。我已经在问题中更新了权限。感谢您的帮助。

确保tomcat的父目录的权限也是正确的。

让我们在聊天中继续这个讨论(链接:chat.stackoverflow.com/rooms/62959/discussion-between-dilantha-and-vonc)。

0