【问题标题】:SSH into ec2 from jenkins and run commands从 jenkins SSH 到 ec2 并运行命令
【发布时间】:2020-11-22 12:46:59
【问题描述】:

我正在尝试配置我的 Jenkinsfile,以便我的主 jenkins ssh 进入远程 ec2 服务器并在远程服务器上运行命令。到目前为止,我已将我的主 jenkins 服务器公钥添加到我的远程 ec2 服务器的 authorized_keys 列表中,并且我能够 ssh 进入我的远程服务器。我的 Jenkinsfile 的相关部分:

echo "===> about to SSH into the dev environment.."
        sh '''#!/bin/bash
          echo "===> in bash script now"
          ssh -tt ubuntu@xxx.xx.xx.xxx
          ls
          pwd          
          git pull origin master
          rm -rf node_modules
          npm install
          node app.js
        '''

我知道我能够通过 ssh 连接到远程 ec2 实例,因为 ls 打印了远程服务器上文件的内容。

但是,pwd 打印出 /var/lib/jenkins/workspace/jenkinsfile_master 这意味着我仍在我的 jenkins 主服务器上。此外,我的 gitnpm 命令无法运行,因为我的 Jenkins 主服务器上没有安装 gitnpm

因此,我的第一个问题是我真的 ssh 到我的远程服务器吗?如果我这样做了,为什么pwd 在我的 Jenkins 服务器而不是我的远程服务器上打印工作目录?其次,如何才能真正在远程服务器上运行命令?

【问题讨论】:

    标签: amazon-web-services jenkins amazon-ec2 ssh


    【解决方案1】:

    推测您遇到的每个命令都被单独调用到命令行(这意味着每个命令都作为不同的会话运行)。如果是这种情况,您需要在没有任何其他插件的情况下将它们全部链接起来,如下例所示。

    ssh -tt ubuntu@xxx.xx.xx.xxx && ls && pwd && git pull origin master .....
    

    有一个名为 SSH Steps 的 Jenkins 插件可以让你像下面这样运行每个命令

    sshCommand remote: remote, command: "ls"
    sshCommand remote: remote, command: "pwd"
    sshCommand remote: remote, command: "git pull origin master"
    

    或者,如果您不想使用此插件,AWS 也有一个名为 Run Command 的功能,允许您使用 AWS CLI/SDK 在服务器上远程调用命令。有了这个,当您使用 git pull 命令时,您需要确保远程服务器的磁盘上存在凭据。

    【讨论】:

      猜你喜欢
      • 2019-05-20
      • 1970-01-01
      • 2020-12-29
      • 2023-03-08
      • 2016-11-09
      • 2011-06-21
      • 2020-07-05
      • 2016-06-07
      相关资源
      最近更新 更多