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