Я скачал SSH-Sessions Йоакима Свендсена, который использует SSH.NET и установил модуль PowerShell на сервер Jenkins Windows.
В Jenkins у меня есть следующий скрипт PowerShell:
Import-Module SSH-Sessions
$lastExitCode = 0
$devApp1 = "10.0.0.1"
$devApp2 = "10.0.0.2"
Write-Output "Deployment started in $devApp1......"
New-SshSession -ComputerName $devApp1 -Username test -Password test@123
$return = Invoke-SshCommand -ComputerName $devApp1 -Command "cd /NFS_DATA/autodeploy_scripts && echo test@123 | ./autodeploy.sh"
$return | Get-Member
if ($lastExitCode -ne 0)
{
Write-Output $lastExitCode
exit 1;
}
else
{
Write-Output $lastExitCode
exit 0;
}
Сценарий оболочки содержит:
#!/bin/bash
file="/NFS_DATA/autodeploy_scripts/test.log"
if [ -f "$file" ]
then
echo "$file found."
exit 0;
else
echo "$file not found."
exit 1;
fi
Проблема в том, что задание Jenkins не завершается ошибкой, если файл не найден. Выход Дженкинса:
> Deployment started in 10.0.0.1...... Successfully connected to > 10.0.0.01 > 10.0.0.01 had an error: Finished: SUCCESS
После некоторых предложений я написал следующий скрипт PowerShell, используя Posh-SSH. Я также получаю ошибку для этого, хотя это другое.
#Import-Module SSH-Sessions
Import-Module Posh-SSH
# Setup static variables
$devApp1="10.0.0.1"
$devApp2="10.0.0.2"
$username = "test"
$password = "test@123"
$command = "cd /NFS_DATA/autodeploy_scripts && echo Hybris@123 | ./autodeploy.sh"
Write-Output "Deployment started in $devApp1..."
# Setup PSCredentials
$secPasswd = ConvertTo-SecureString $password -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential ($username, $secPasswd)
echo $credentials
# Estalbish new SSH session automatically accepting new SSH keys
$session = New-SSHSession -Computername $devApp1 -Credential $credentials -Acceptkey:$true
# Invoke command to be run on/in the SSH session
$output = Invoke-SSHCommand -SSHSession $session -Command $command
Write-Output "Returned Output from the Command: "
Write-Output $output.Output
Write-Output "Last Exit Status: "
Write-Output $output.ExitStatus
Получение сообщения об ошибке как:
Тот же код работает на моем локальном ноутбуке, но не работает на сервере Jenkins.
Я думаю, что на сервере Jenkins из-за ограничений безопасности Windows не будет храниться $secpasswd
, полученный из PSCredential. Это приводит к тому, что в POSH предоставляется только имя пользователя.
Как я могу исправить эти проблемы? Как мне жестко закодировать пароль?
Invoke-SSHCommand
. - person Seth   schedule 28.04.2017Get-Member
, чтобы получить дополнительную информацию или просто позволить ей распечатай на экран и посмотри. Имейте в виду, что что-то вроде$?
может быть недостаточным, поскольку сам командлет может работать нормально, хотя команды внутри ошибки. - person Seth   schedule 28.04.2017Invoke-Command
по умолчанию. Вы также можете попробовать запуститьInvoke-SSHCommand -?
илиGet-Help -Full Invoke-SSHCommand
или использовать-Examples
, чтобы получить больше информации о том, как должен работать командлет. - person Seth   schedule 28.04.2017Get-Member
делают? При вызовеecho $return | Get-Member
вы указываете PowerShell преобразовать$return
в строку, а затем проверяете атрибуты... которые, конечно же, являются атрибутами каждого строкового атрибута. - person Seth   schedule 05.05.2017Unblock-File
, вы можете использовать его для разблокировки всех файлов в каталоге. См. также Простая разблокировка всех файлов в каталоге с помощью PowerShell от Hey, Scripting Guy! - person Seth   schedule 05.05.2017