让Jenkins将SSH放到服务器中,并从git-post构建中提取
我有一个Jenkins实例,我正在尝试创建一个持续集成工作流。我正在努力让jenkins把代码放到生产服务器上 以下是我想做的:让Jenkins将SSH放到服务器中,并从git-post构建中提取,git,jenkins,ssh,continuous-integration,jenkins-plugins,Git,Jenkins,Ssh,Continuous Integration,Jenkins Plugins,我有一个Jenkins实例,我正在尝试创建一个持续集成工作流。我正在努力让jenkins把代码放到生产服务器上 以下是我想做的: 在推送到主分支(bitbucket)时,运行构建(工作) 构建通过后,SSH进入生产服务器(工作) 在生产服务器上,git拉动master更新项目(不工作) 我似乎有以下问题: jenkins使用用户deploy将SSHs导入prod服务器 尽管deploy在~/.ssh中具有id\u rsa密钥,并且在bitbucket的repo“部署密钥”设置中具有id\u rs
deploy
将SSHs导入prod服务器deploy
在~/.ssh
中具有id\u rsa
密钥,并且在bitbucket的repo“部署密钥”设置中具有id\u rsa.pub
内容,但我在运行git pull
或git clone
时收到一个权限被拒绝(公钥)。
错误更新 当我以jenkins使用的同一个用户的身份运行这个时,当我运行git clone…时,会提示我输入id\u rsa的密码短语。这一定是jenkins绊倒的地方,因为它无法解码id_rsa。我将查看是否可以生成不提示输入密码短语的ssh密钥 更新2
我为生产服务器生成了一个ssh密钥,该密钥不需要使用密码短语,而且工作正常。首先,手动启动时,您应该确保git clone/pull在生产服务器上按预期工作 接下来,调试为什么Jenkins无法驱动它 我想到的最可能的原因是:
- Jenkins代理为SSH会话填充不正确的${HOME}环境变量(我自己也曾经遇到过这个错误),这取决于您如何实现您的工作
- 在生产中使用错误的git用户名(每个用户的全局配置可能在~/.gitconfig中设置)
- 在生产环境中使用错误的私钥/公钥访问远程git存储库(您可能希望在~/.ssh/config中进行配置)
PS:为生产服务器使用专用凭据是绝对正常的(例如出于安全原因)您应该使用Jenkins插件从Jenkins作业中与目标服务器对话。您可以使用它在目标上运行命令或脚本。SSH公钥/私钥信任需要事先配置,并在目标服务器的插件中配置 这里的具体问题是,我在生产服务器上创建的SSH密钥需要使用密码短语。jenkins脚本无法处理此问题,因此它发送了带有编码密钥的
git pull
请求,因此被拒绝
我创建了不需要密码短语的SSH密钥,这解决了我的问题。这是我使用的命令:
ssh-keygen-t rsa-C“您的_email@example.com“-N”
-N
标志在密钥上设置一个密码短语。我想我有你的第一个场景。如果我在ssh命令中回显$HOME,则得到“/var/jenkins\u HOME”。但我似乎无法为此导出新值-如果我设置export HOME=/HOME/deploy/,然后立即回显它,我将再次获得/var/jenkins\u HOME。你遇到过这个吗?@dafyddPrys看看插件。它允许配置每个作业和每个节点(在节点配置页面)的环境变量。但是,当我为生产服务器创建的密码需要解码时,问题就出现了。我生成了一个密钥,不需要密码短语,效果很好。