因此,我有以下情况:一台服务器,每个项目都有专门的用户(例如foo
),还有一台以jenkins
用户身份运行的 jenkins 服务器。我为我的用户生成了一个 SSH 密钥对foo
,并将公共密钥作为部署密钥添加到 github 存储库。(我已验证我可以使用用户克隆存储库foo
)
在 Jenkins 中,我在“管理 Jenkins”>“管理凭据”中将身份验证设置为“带有私钥的 SSH 用户名”,用户名为“foo”,foo
私钥在“全局”范围内。
所以我使用正确的工作空间(例如,显然/home/foo/deployment
用户拥有完全所有权foo
)并且使用凭证“foo”。对于“源代码管理”,我想使用我的仓库的 SSH URL(例如[电子邮件保护]:foo/foo.git) 但是它立即通知我存在权限问题:
Failed to connect to repository : Command "git -c core.askpass=true ls-remote -h [email protected]:foo/foo.git HEAD" returned status code 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.
如果我使用 https 版本的 URL(https://github.com/foo/foo.git)错误消失了,但是当我运行作业时,我在控制台输出中收到以下错误:
Started by user developer
[EnvInject] - Loading node environment variables.
Building in workspace /home/foo/deployment
Cloning the remote Git repository
Cloning repository https://github.com/foo/foo.git
> git init /home/foo/deployment # timeout=10
ERROR: Error cloning remote repo 'origin'
hudson.plugins.git.GitException: Could not init /home/foo/deployment
[long stacktrace]
Caused by: hudson.plugins.git.GitException: Command "git init /home/foo/deployment" returned status code 1:
stdout:
stderr: /home/foo/deployment/.git: Permission denied
[long stacktrace]
ERROR: null
Finished: FAILURE
密钥对不使用密码,但如果我先让它工作,我想添加一个。Jenkins 在 Ubuntu 14.04.2 LTS(GNU/Linux 3.13.0-65-generic x86_64)机器上运行。
我这里漏掉了什么?看来我提供的凭据未被使用,这解释了为什么权限会爆炸。但我不明白为什么它们未被使用?为什么不能使用 URL git@
?
由于它因权限问题而阻塞,git init
我手动运行了它,但重新运行Jenkins作业时它又因权限问题而/home/foo/deployment
阻塞。git fetch
答案1
啊,是的,我很傻。SSH 用户代理显然只允许用户以jenkins
身份连接到远程存储库foo
,但不授予其写入本地文件系统的权限...