Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让Jenkins将SSH放到服务器中,并从git-post构建中提取_Git_Jenkins_Ssh_Continuous Integration_Jenkins Plugins - Fatal编程技术网

让Jenkins将SSH放到服务器中,并从git-post构建中提取

让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

我有一个Jenkins实例,我正在尝试创建一个持续集成工作流。我正在努力让jenkins把代码放到生产服务器上

以下是我想做的:

  • 在推送到主分支(bitbucket)时,运行构建(工作)
  • 构建通过后,SSH进入生产服务器(工作)
  • 在生产服务器上,git拉动master更新项目(不工作)
  • 我似乎有以下问题:

  • jenkins使用用户
    deploy
    将SSHs导入prod服务器
  • 尽管
    deploy
    ~/.ssh
    中具有
    id\u rsa
    密钥,并且在bitbucket的repo“部署密钥”设置中具有
    id\u rsa.pub
    内容,但我在运行
    git pull
    git clone
    时收到一个
    权限被拒绝(公钥)。
    错误
  • 因此,这让我感到困惑,我不确定我会错在哪里。。对我来说,这可能是其中的一个或多个:

  • 为什么部署的ssh凭据不能自动获取
  • prod服务器是否应该有自己的SSH凭据?我想是的
  • 这个过程是否合理?这件事对我造成了影响,直到我遇到了麻烦
  • 任何想法、建议或替代路线都将不胜感激


    更新

    当我以jenkins使用的同一个用户的身份运行这个时,当我运行git clone…时,会提示我输入id\u rsa的密码短语。这一定是jenkins绊倒的地方,因为它无法解码id_rsa。我将查看是否可以生成不提示输入密码短语的ssh密钥

    更新2


    我为生产服务器生成了一个ssh密钥,该密钥不需要使用密码短语,而且工作正常。

    首先,手动启动时,您应该确保git clone/pull在生产服务器上按预期工作

    接下来,调试为什么Jenkins无法驱动它

    我想到的最可能的原因是:

    • Jenkins代理为SSH会话填充不正确的${HOME}环境变量(我自己也曾经遇到过这个错误),这取决于您如何实现您的工作
    • 在生产中使用错误的git用户名(每个用户的全局配置可能在~/.gitconfig中设置)
    • 在生产环境中使用错误的私钥/公钥访问远程git存储库(您可能希望在~/.ssh/config中进行配置)
    我自己也实现了类似的逻辑

    在我的例子中,生产服务器配置为Jenkins节点,每次在作业工作区中创建所需的主环境,SSH和git访问凭据在Jenkins上配置,并在每次运行时在生产中填充


    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看看插件。它允许配置每个作业和每个节点(在节点配置页面)的环境变量。但是,当我为生产服务器创建的密码需要解码时,问题就出现了。我生成了一个密钥,不需要密码短语,效果很好。