Привет ! Меня зовут Ксавье Жувено, и в этом небольшом посте мы увидим, как ожидать ошибки компиляции с помощью Azure Pipelines.
Самореклама: другие статьи можно найти на моем сайте
Проблемный
В большинстве случаев, когда разработчики взаимодействуют с Azure Pipelines и CI в целом, они хотят убедиться, что их программа компилируется, а их тесты проходят. Но, в зависимости от программы, которую вы создаете, или системы, которую вы устанавливаете, вы можете захотеть проверить, генерируется ли ошибка, когда должна быть сгенерирована одна ошибка.
Например, я столкнулся с этой проблемой, играя с инструментом cppcheck, и хотел убедиться, что смогу заставить его вызвать ошибку в небольшой программе. Для проведения такого теста нам доступно несколько решений: мы можем, например, создать скрипт или программу, которая будет проверять это поведение и ожидать ошибки. В этом случае этот скрипт будет таким же, как и любые другие тесты, и особых проблем у вас не возникнет. Создание такого скрипта займет некоторое время.
Другое решение, о котором идет речь в этой статье, заключается в том, чтобы иметь возможность ожидать ошибки непосредственно в CI, в данном случае в Azure Pipelines. 😉
Решение
Вот пример того, как ожидать ошибки на шаге Azure Pipeline:
steps:
- bash: |
cd build
cmake --build .
error_code=$?
if [[ $error_code -eq 0 ]]; then
exit 1
fi
exit 0
Давайте немного погрузимся в то, что здесь происходит! 😄
В этом фрагменте файла azure-pipeline.yml
мы создаем шаг bash
. На этом этапе мы компилируем проект с помощью CMake. Вы можете заметить, что технология не важна, я взял этот пример из проекта, где я использовал CMake, но вы можете заменить его любой командой, которая должна быть успешной.
После завершения операции мы получаем «результат» операции с помощью команды error_code=$?
в переменной с именем error_code
. В bash и shell при успешном выполнении команды предполагается возврат кода ошибки, равного 0; тогда как в случае сбоя он должен возвращать любое значение, кроме 0.
Наконец, мы смотрим на значение переменной error_code
, чтобы проверить, не произошла ли ошибка во время компиляции. Если переменная оценивается как 0
, то компиляция прошла успешно, и мы выходим из шага, возвращая значение 1
, чтобы сделать шаг неудачным. С другой стороны, если переменная оценивается как 1
, то компиляция завершится ошибкой, чего мы и ожидали, поэтому мы выходим из шага, возвращая значение 0
, чтобы шаг завершился успешно.
И вот так, с помощью нескольких строк, мы можем ожидать ошибку на шаге Azure Pipelines. 😄
Примечание. Должен признаться, мне бы очень хотелось, чтобы поле is_error_expected
было доступно. Это сделало бы это решение более элегантным, и его было бы легче воспроизвести в другом проекте. Надеюсь, когда-нибудь такая функция будет нам доступна 😉
Спасибо всем за чтение этой статьи, и до моей следующей статьи, есть великолепный день.
Интересные ссылки
Первоначально опубликовано на http://10xlearner.com 9 ноября 2020 г.