Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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在作业中卡住_Jenkins_Ssh_Jenkins Pipeline - Fatal编程技术网

Jenkins 詹金斯管道。到服务器的Ssh在作业中卡住

Jenkins 詹金斯管道。到服务器的Ssh在作业中卡住,jenkins,ssh,jenkins-pipeline,Jenkins,Ssh,Jenkins Pipeline,我需要从一个简单的jenkin管道ssh到一个服务器,并进行部署,该部署只需移动到一个目录,执行git fetch和其他一些comands nmp安装。问题是,当jenkin job ssh连接到远程服务器时,它连接正常,但随后它被阻塞,我必须停止它。我刚刚修改了脚本,只需对服务器执行ssh,并使用pwd命令转到最简单的位置,但它连接到它,并一直被卡住,直到我中止为止。我错过了什么?下面是simpe管道脚本和屏幕截图上的输出 pipeline { agent any stages {

我需要从一个简单的jenkin管道ssh到一个服务器,并进行部署,该部署只需移动到一个目录,执行git fetch和其他一些comands nmp安装。问题是,当jenkin job 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"
        }
    }
}

}

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

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

sh "ssh jenkins@10.x.x.xx pwd"
这足以让你的例子发挥作用。无论Jenkins如何,将命令放在单独的行上都无法使用常规shell脚本。但是,您仍然需要在节点上提供私钥,否则作业将挂起,等待您以交互方式提供密码。通常,您会希望使用在运行时提供私钥

剧本{ sshagent[您的ssh credentals]{ 嘘。。。 } }
要在较长的命令上执行,请参见

如果我不添加-t-t,我会得到:sudo:no tty present,并且没有预期的指定askpass程序,因为运行sudo命令会以交互方式提示您输入密码。您可以使用sudo visudo在目标机器上添加jenkins ALL=ALL NOPASSWD:ALL,但我真的不鼓励这样做。您不太可能需要sudo来执行git fetch或npm install命令。