Как выдать ошибку в пайплайн, если bash скрипт неправильно отработал?
Чтобы остановить пайплайн и выдать ошибку, если Bash-скрипт завершился с ошибкой, можно использовать несколько подходов. Самый распространенный метод — это проверка кода возврата (exit code) скрипта. В Bash, если скрипт или команда завершаются с ошибкой, они возвращают ненулевой код (обычно 1
или выше). В пайплайнах CI/CD также применяются специальные команды для выдачи ошибки при сбое скрипта.
Подходы для остановки пайплайна при ошибке в Bash-скрипте
1. Использование set -e
в начале скрипта
Добавление set -e
в начале скрипта заставляет его завершаться при любой ошибке. Если скрипт выйдет с ненулевым статусом, пайплайн остановится.
1 2 3 4 5 6 7 8 |
#!/bin/bash set -e # Остановка скрипта при ошибке # Ваши команды command1 command2 # Если эта команда завершится с ошибкой, скрипт остановится command3 |
2. Проверка кода возврата команды ($?
)
Если требуется более выборочное управление, можно проверить код возврата $?
после каждой важной команды. Например:
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash # Выполнение команды some_command if [ $? -ne 0 ]; then echo "some_command завершилась с ошибкой" >&2 exit 1 # Завершение скрипта с ошибкой, чтобы остановить пайплайн fi # Далее ваш код... |
3. Использование || exit 1
для отдельных команд
Также можно использовать || exit 1
сразу после команд, которые могут завершиться с ошибкой:
1 2 3 4 5 |
#!/bin/bash command1 || { echo "command1 завершилась с ошибкой" >&2; exit 1; } command2 || { echo "command2 завершилась с ошибкой" >&2; exit 1; } |
4. Использование trap
для вывода сообщения и выхода при ошибке
С помощью trap
можно отловить ошибку и выполнить дополнительные действия (например, вывод сообщения), прежде чем выйти из скрипта.
1 2 3 4 5 6 7 8 9 |
#!/bin/bash set -e trap 'echo "Скрипт завершился с ошибкой"; exit 1' ERR # Ваши команды command1 command2 # Если эта команда завершится с ошибкой, сработает trap |
Включение в CI/CD пайплайн
В CI/CD пайплайнах (например, GitLab CI, Jenkins или GitHub Actions) скрипты завершаются с ошибкой, если команда Bash возвращает ненулевой код выхода. Поэтому если скрипт выполнит exit 1
, это автоматически приведет к сбою стадии пайплайна.
Пример для CI/CD пайплайна
1 2 3 4 5 6 7 8 9 |
# Пример для GitLab CI stages: - test test_job: stage: test script: - ./test_script.sh # Этот скрипт завершится с ошибкой, если в нем произойдет сбой |
Резюме
Использование set -e
— это самый простой способ остановить скрипт и завершить пайплайн при возникновении ошибки. Однако для более гибкого управления можно использовать trap
или проверку кода возврата ($?
) для специфических команд.
Recommended Posts
Формат и команды файла пайплайна в Gitlab
26.02.2022