如何在 Jenkins 管道中使用 SSH?

新手上路,请多包涵

我使用构建 NPM 项目的 Jenkins 管道模型定义定义了一些 Jenkins 工作。我使用 Docker 容器来构建这些项目(使用只有 Node.js + npm + yarn 的通用镜像)。

构建的结果包含在我使用 zip 管道命令压缩的 dist/ 文件夹中。

我想使用 SSH/SCP(使用私钥身份验证)将此 ZIP 文件复制到另一台服务器。我的私钥已添加到 Jenkins 环境(凭据管理器),但是当我使用 Docker 容器时,无法建立 SSH 连接。

我尝试添加 agent { label 'master' } 以使用主 Jenkins 节点进行文件传输,但它似乎使用新的 Git 提取创建了一个干净的工作区,并且没有我构建的文件。

在我尝试了 SSH 代理插件之后,我得到了这个输出:

 Identity added: /srv/jenkins3/workspace/myjob-TFD@tmp/private_key_370451445598243031.key (rsa w/o comment)
[ssh-agent] Started.
[myjob-TFD] Running shell script
+ scp -r dist test@myremotehost:/var/www/xxx
$ docker exec bfda17664965b14281eef8670b34f83e0ff60218b04cfa56ba3c0ab23d94d035 env SSH_AGENT_PID=1424 SSH_AUTH_SOCK=/tmp/ssh-k658r0O76Yqb/agent.1419 ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 1424 killed;
[ssh-agent] Stopped.
Host key verification failed.
lost connection

如何添加授权的远程主机?

原文由 Loïc 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 611
1 个回答

我有一个类似的问题。我没有使用标签“master”,并且我发现当我这样做时文件传输可以跨从属工作:

第 1 步 - 在远程主机服务器中创建 SSH 密钥,将密钥包含到 authorized_keys

第 2 步 - 在 Jenkins 中使用 SSH 密钥创建凭证,使用来自远程主机的私钥

使用 SSH 代理插件

 stage ('Deploy') {
    steps{
        sshagent(credentials : ['use-the-id-from-credential-generated-by-jenkins']) {
            sh 'ssh -o StrictHostKeyChecking=no user@hostname.com uptime'
            sh 'ssh -v user@hostname.com'
            sh 'scp ./source/filename user@hostname.com:/remotehost/target'
        }
    }
}

原文由 user9948238 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题