Я запускаю команду в Azure-конвейере
az vm run-command invoke --command-id RunShellScript --name DevServer -g Takeoffs --scripts "cd /home/user/workdir/project/ && bash ./buildDev.sh > /home/user/workdir/project/exlogs.txt"
Этот сценарий оболочки имеет разные коды завершения для разных ошибок.
Я хотел бы иметь возможность их поймать.
Похоже, что выходные данные, которые я могу уловить, - это выходные данные «вызова команды запуска az vm», но коды завершения фактического сценария оболочки потеряны.
Как я могу получить код выхода?
Я попытался получить вывод команды примерно так:
command_output=$(az vm run-command invoke --command-id RunShellScript --name AIDevServer -g Takeoffs --scripts "cd /home/aiadmin/workdir/wall_classification/ && bash ./buildDev.sh > /home/aiadmin/workdir/wall_classification/exlogs.txt" -o json)
echo "Command output: $command_output"
Но это дает только выходные данные команды запуска az vm, а не код завершения базового сценария оболочки.
Вы можете добавить новый ответ, чтобы поделиться обходным путем решения проблемы. Тогда вы можете принять ответ. Это будет полезно другим пользователям, у которых возникла такая же проблема.
Ну это не совсем полезно. Просто я отказался от кодов выхода и мне пришлось запрограммировать своего рода систему связи через файлы, чтобы выяснить, какой выход выбрал мой сценарий.
Да. Таким образом, основная причина этой проблемы заключается в том, что команда запуска az vm не поддерживает возврат кодов выхода, как указано в моем ответе. Вы можете оставить отзыв в сообщении GitHub, упомянутом в ответе.
Могу воспроизвести ту же ситуацию. При использовании команды: az vm run-command ignore отображается только сообщение о результате команды без кода выхода.
Например:
Это ограничение самого Azure Cli.
Боюсь, что команда az vm run-command invoke
не поддерживает вывод кода завершения результата команды.
Вот билет предложения на Github: Поддержка отчетов о коде выхода в az run-command ignore Вы можете отслеживать билет предложения и добавлять комментарии, чтобы поделиться своими идеями.
В качестве обходного пути вы можете использовать задачу SSH в конвейере Azure для запуска сценария оболочки на виртуальной машине Azure.
Он будет использовать SSH для подключения к виртуальной машине Azure для запуска сценария оболочки. И вы можете увидеть код выхода.
Например:
- task: SSH@0
inputs:
sshEndpoint: 'test0405ssh'
runOptions: 'inline'
inline: |
cd /home/aiadmin/workdir/wall_classification/ && bash ./buildDev.sh > /home/aiadmin/workdir/wall_classification/exlogs.txt
echo $?
readyTimeout: '20000'
Результат:
Я сделал что-то еще, чтобы обойти эту проблему: мой скрипт теперь создает разные файлы в облаке, поэтому я могу проверить файлы и посмотреть, что произошло, не проверяя код выхода.