我需要从简单的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"
}
}
}
}
答案 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?