我已经下载了Joakim Svendsen的SSH-Sessions,它使用SSH.NET并在Jenkins Windows服务器中安装了PowerShell模块
在Jenkins中,我有以下PowerShell脚本:
Import-Module SSH-Sessions
$lastExitCode = 0
$devApp1 = "10.0.1.109"
$devApp2 = "10.0.1.110"
Write-Output "Deployment started in $devApp1......"
New-SshSession -ComputerName $devApp1 -Username test -Password test@123
问题是,当连接失败时,Jenkins作业不会失败。 Jenkins的输出是:
Unable to connect to 10.0.1.109: Exception calling "Connect" with "0" argumen t(s): "No connection could be made because the target machine actively refused it" Finished: SUCCESS
如何解决此问题?
答案 0 :(得分:1)
使用this documentation,我会做这样的事情:
New-SshSession -ComputerName $devApp1 -Username test -Password test@123
if (!$SshSessions.$devApp1.Connected) {
throw "Session to $devApp1 is not connected"
}
或者这个:
New-SshSession -ComputerName $devApp1 -Username test -Password test@123
$Session = Get-SshSession -ComputerName $devApp1
if (!$Session.Connected) {
throw "Session to $devApp1 is not connected"
}
显然,如果您与$devApp1
有多个连接,则此代码将无效,但文档中的示例表明它不允许您这样做。无论出于何种原因New-SshSession
不支持-PassThru
参数,它似乎也不返回会话,也不允许您为会话指定变量。相反,设计使用全局变量:$SshSessions
。不是我设计它的方式。
您可能需要查看Posh-SSH。我不记得这是否设计得更好,但我不记得这种问题。它还使用SSH.Net库。或者,WinSCP has a .Net assembly在PowerShell中非常容易使用。