#bash #jenkins
#bash #дженкинс
Вопрос:
Я использую SCP для передачи файла, однако, когда я указываю ключевой файл, используя имя переменной, я получаю следующую ошибку:
Предупреждение: Файл идентификации RPD-API.pem недоступен: такого файла или каталога нет.
Команда, которую я использую, это:
scp -i $SSH_KEY_PATH -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $WORKSPACE/test.war root@$MQ_IP:/home/test/ROOT.war
Я новичок в bash, но я чувствую, что это что-то простое, и мне просто не хватает знакомства. Когда я жестко кодирую имя ключевого файла, проблем не возникает. Например:
scp -i RPD-API.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $WORKSPACE/test.war root@$MQ_IP:/home/test/ROOT.war
Когда я печатаю значение переменной, оно выглядит правильно:
$ echo $SSH_KEY_PATH
RPD-API.pem
Комментарии:
1. Что
declare -p SSH_KEY_PATH
показывает? Там скрыты какие-либо специальные символы?2. Хорошо, после того, как я выполнил команду, кажется, что в переменной есть пробел и новая строка. следующий результат: declare -x SSH_KEY_PATH=»RPD-API.pem»
3. @JohnKugelman спасибо за совет, мне удалось исправить это после удаления новой строки. Я опубликую решение здесь.
Ответ №1:
Спасибо Джону Кугельману за подсказку. В конце переменной был возврат каретки. Чтобы устранить проблему, мне пришлось ее удалить. Я сделал это, используя следующий метод:
CLEANED_KEY=${SSH_KEY_PATH//[$'trn ']}
scp -i $CLEANED_KEY -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $WORKSPACE/target/razer-pay-backend-mq.war root@$MQ_IP:/home/jenkins/ROOT.war
Разница в выводе заключается в следующем:
Перед очисткой
declare -x SSH_KEY_PATH="RPD-API.pem
"
После очистки
declare -- CLEANED_KEY="RPD-API.pem"