Это головоломка. Если я запускаю команду из командной строки для удаленного копирования файла, она работает отлично. Если я выполню ту же команду внутри скрипта на сервере (на котором размещен Hudson), он также будет работать отлично, так же как и для запуска задания, как hudson из командной строки. Однако, если я выполню эту точную команду как функцию внутри скрипта bash из задания Hudson, она завершится неудачно с:
cp: cannot stat '/opt/flash_board.tar.gz': No such file or directory
Переменная определяется как:
original_tarball=flash_board.tar.gz
и находится в области видимости (расширение переменной корректно работает в скрипте).
Исходная команда:
ssh -n -o stricthostkeychecking=no root@$IP_ADDRESS ssh -n -o stricthostkeychecking=no 169.254.0.2 cp /opt/$original_tarball /opt/$original_tarball.bak
Я также пробовал это как:
ssh -n -p 1601 -o stricthostkeychecking=no root@$IP_ADDRESS cp /opt/$original_tarball /opt/$original_tarball.bak
, который указывает на правильный порт, но не работает точно так же.
Для справки все переменные были проверены на корректность. Сначала я думал, что это ошибка подстановки, но это не так, поэтому я попытался запустить ее с учетными данными Hudson как:
sudo -u hudson ssh -n -o stricthostkeychecking=no root@$IP_ADDRESS ssh -n -o stricthostkeychecking=no 169.254.0.2 cp /opt/$original_tarball /opt/$original_tarball.bak
Я получаю точно такие же результаты (это работает). Таким образом, только когда эта команда запускается из задания Хадсона, она не выполняется.
Вот последовательность событий:
- Задание Hudson устанавливает параметры и вызывает сценарий оболочки.
- Функция внутри скрипта пытается удаленно скопировать файлы со встроенной платы Montevista (Linux) через шину SPI на вторую встроенную плату Arago (Linux)
- Обе платы физически находятся на одной материнской плате, но нет прямого доступа к плате Arago, кроме как через сеанс последовательной консоли (что невозможно, это задание по автоматизации, выполняемое по сети).
Я пробовал это с помощью ssh с -p 1601 (правильный порт на стороне Араго).
Могу ли я использовать scp для копирования удаленного файла в то же место, что и удаленный файл с другим расширением файла?
Что-то вроде:
scp -o stricthostkeychecking=no root@$IP_ADDRESS /opt/$original_tarball /opt/$original_tarball.bak
Я попросил пару разработчиков посмотреть на это, и они тоже были в тупике. Кто-нибудь получил какие-либо идеи (A), почему это не удается & (B), как обойти это. Я почти уверен, что смогу написать скрипт для локального запуска на удаленной машине, но, похоже, в этом нет необходимости.
О, и если я выполняю ту же самую команду на плате Монтевисты (что означает, что мне не нужно переходить через шину SPI (169.254.0.2)), она отлично работает из задания Хадсона.