У меня такая структура:
Что я хочу получить? Машина 1 получает некоторые параметры от Jenkins (используется для тестов JMeter).
path/Performance.bat %param1% %param2% %param3%
Итак, Performance.bat выглядит примерно так:
IF %param1%==param1_value(
IF %param2%==param2_value(
@echo
path_to_psexec\PsExec.exe \\machine1_address -u user -p password cmd /c (
MKDIR %param3%\Automation_Results_Build_%BUILD_NUMBER%_ID
cd %JMeterPath%/
jmeter -n -t [...])
exit /b 0
))
Итак, в основном он создает папку результатов, затем переходит к местоположению JMeter и пытается запустить тесты производительности с заданными значениями.
Проблема. Похоже, что PSExec не выполняет команды должным образом. Через CMD отправляются 3 команды: создать папку для результатов, перейти по пути JMeter, запустить тесты. Что не так с моим подходом? Как я могу запустить несколько команд CMD в одном вызове PSexec?
Выход:
ECHO is on.
PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Connecting to machine_address...
Starting PSEXESVC service on machine_address...
Connecting with PsExec service on machine_address...
Starting cmd on machine_address...
cmd exited on machine_address with error code 0.
The system cannot find the path specified.
'jmeter' is not recognized as an internal or external command,
operable program or batch file.
Почему именно The system cannot find the path specified.
?
Я не хочу создавать файл .bat
на машине 2, потому что хочу видеть результаты тестов в Jenkins.
Вы можете создать один сценарий PowerShell, в котором вы сможете выполнять все свои команды.
Ниже приведены команды, которые необходимо включить в ваш сценарий PowerShell, который будет подключаться к вашему удаленному компьютеру и выполнять команды на удаленном компьютере.
$machine_addr = "your_ip_address"
$user = your_username
$Password = your_password
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $user ,$pass
Invoke-Command -ComputerName $machine_addr -ScriptBlock {C:\path_to_your_jmeter_with_parameters} -Credential $Cred
Вы можете добавить другие команды по своему усмотрению, например, вы хотите создать папку
New-Item -Path "folder name with path" -ItemType directory
После создания сценария PowerShell просто позвоните из командного файла.
C:\Users\%username%\Desktop\path_to_your_powershell_file\filename.ps1
Предположение: Вы также можете создать отдельный сценарий PowerShell с параметрами, как вы делаете с пакетным файлом (это просто снимет бремя создания пакетного файла).