Jenkins在克隆Git仓库时未按预期使用凭据

58次阅读
没有评论

问题描述

正在尝试为IaC(基础设施即代码)代码验证设置Jenkins流水线。他希望Jenkins能够克隆一个托管在GitLab上的仓库。为此,他使用了用户名/密钥类型的凭据,使用了一个Jenkins用户和生成的RSA密钥(为了简单起见,主节点和从节点上使用相同的密钥)。
用户在主节点或从节点上登录后,可以使用以下命令成功克隆Git仓库:

root@jenkins-slave-1 [~]: su - jenkins
jenkins@jenkins-slave-1:~$ cd /tmp
jenkins@jenkins-slave-1:/tmp$ git clone git@l-gitlab1.domain:salt/salt_states.git

用户在GitLab实例的认证日志中看到了正确的条目,说明公钥认证被接受。

然而,当用户运行流水线(使用相同的凭据)时,它失败并显示以下消息:

Cloning the remote Git repository
Honoring refspec on initial clone
Cloning repository git@l-gitlab1.domain:salt/salt_states.git > git init /home/jenkins/workspace/salt_build_test
...
ERROR: Error cloning remote repo 'origin'
hudson.plugins.git.GitException: Command "git fetch --tags --progress -- git@l-gitlab1.domain:salt/salt_states.git +refs/remotes/origin/dev" returned status code 128:
stdout: ...
stderr: Permission denied, please try again.
...

GitLab的认证日志显示,尝试使用密码身份验证模式,而不是公钥身份验证。

用户询问有关他做错了什么的想法。

解决方案

以下解决方案是根据用户问题和回复生成的,如果有任何版本差异,请自行适应和验证。

检查凭据类型

首先,确保你在Jenkins中正确配置了Git仓库的凭据。根据你的描述,你使用了用户名/密钥类型的凭据。然而,从错误消息中可以看出,Jenkins似乎在尝试密码身份验证,而不是公钥身份验证。

解决方案1:使用正确的凭据

  1. 在Jenkins中,导航到你的流水线项目。
  2. 在流水线配置中的Git设置中,确保你选择了正确的凭据。
  3. 如果你确保使用了正确的凭据但问题仍然存在,继续阅读下一个解决方案。

解决方案2:检查SSH密钥配置

  1. 确保你的Jenkins用户的SSH密钥与GitLab中的公钥匹配。
  2. 检查密钥文件的权限,确保它们不是过于开放的(应设置为600)。

解决方案3:配置Git插件

根据用户回复,你正在使用Git插件来管理Git仓库。这里有一些步骤可以尝试:
1. 在Jenkins中,导航到”系统管理” > “系统设置”。
2. 找到Git配置部分。
3. 尝试在“全局设置”中配置Git用户的名称和电子邮件地址,这些信息在执行Git操作时可能有用。

解决方案4:清理工作空间

有时候工作空间可能会损坏或不一致,尝试清理工作空间并重新运行流水线:
1. 在Jenkins流水线中,添加一个”Execute shell”步骤。
2. 在该步骤中,添加以下命令:

rm -rf *

这将清空工作空间并移除旧的代码,然后再次运行流水线。

如果问题仍然存在,你可能需要进一步调查是否有特定的配置或设置问题导致了这个行为。

正文完