詹金斯管道。 Ssh到服务器卡在工作上

时间:2018-04-23 15:51:27

标签: jenkins ssh jenkins-pipeline

我需要从简单的jenkin管道ssh到服务器并进行部署,只需移动到目录并执行git fetch和其他一些命令(nmp install等)。事情是,当jenkin作业ssh到远程服务器它连接好,但然后它被卡住,我必须停止它。我刚刚修改脚本,只需要对服务器" ssh进行操作。和一个" pwd命令"去最简单,但它连接到它,它被卡住,直到我中止。我错过了什么?这是simpe管道脚本和屏幕截图

的输出
pipeline {
agent any 
stages {
    stage('Connect to server') {
        steps {
            sh "ssh -t -t jenkins@10.x.x.xx"
            sh "pwd"

        }
    }

    stage('branch status') {
        steps {
            sh "git status"
        }
    }
}

}

enter image description here

1 个答案:

答案 0 :(得分:1)

Jenkins将每个“sh”步骤作为单独的shell脚本执行。内容将写入Jenkins节点上的临时文件,然后才会执行。每个命令都在单独的会话中执行,并且不知道前一个命令。因此,ssh会话或环境变量的变化都不会在两者之间存在。

更重要的是,您正在使用-t标志强制伪终端分配。这与你想要实现的完全相反,以非交互方式运行shell命令。简单地

sh "ssh jenkins@10.x.x.xx pwd"

足以让您的示例正常工作。无论Jenkins如何,将命令放在单独的行上都不适用于常规shell脚本。但是,您仍然需要在节点上使用私钥,否则作业将挂起,等待您以交互方式提供密码。通常,您需要使用SSH Agent Plugin在运行时提供私钥。

script {
    sshagent(["your-ssh-credentals"]) {
        sh "..."
    }
}

要执行更长的命令,请参阅What is the cleanest way to ssh and run multiple commands in Bash?