Я запускаю сценарий оболочки внутри контейнера docker через конвейерный сценарий jenkins groovy. Сценарий bash устанавливает некоторые переменные среды, а затем выполняет модульные тесты. Стандартный вывод этих модульных тестов выводится в текстовый файл. Позже я скопирую этот текстовый файл за пределы контейнера для использования. Вот сценарий оболочки:
#/bin/bash
source /root/venv/bin/activate
export PYTHONPATH=/foo/bar
cd unit_tests
rm -f results.txt
python tests.py >> results.txt
Мой конвейерный сценарий выглядит следующим образом:
stage('Run Unit Tests') {
steps {
sh '''
docker-compose -f ./dir1/docker-compose-test.yml up -d
docker cp /supporting_files/run_unit_tests.sh container_1:/foo/bar/
docker exec container_1 /bin/bash run_unit_tests.sh
docker cp container_1:/foo/bar/unit_tests/results.txt .
'''
}
}
stage('Reporting') {
steps {
//steps for reporting
}
}
Проблема заключается в том, что всякий раз, когда какой-либо тест не проходит, файл results.txt имеет соответствующий текст о сбоях и их стек. Но конвейер перестает выполнять поговорку
[Pipeline] }
ERROR: script returned exit code 1
. Из-за этого я не могу выполнить следующие шаги: анализ файла results.txt и создание отчетов о результатах. Как заставить конвейер выполнить следующий этап?
Я пробовал некоторые вещи, такие как: 1. Использование catchError:
stage('Run Unit Tests') {
steps {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh '''
//Running the commands above
'''
}
}
}
Использование try:
try{
stage('Run Unit Tests') {
sh '''
//Executing tests
'''
}
} catch(e) {
echo e.toString()
}
Но оба они не помогают. Также сценарий оболочки просто выводит стандартный вывод запущенных тестов в текстовый файл, поэтому я не понимаю, почему должен быть возвращен код выхода 1, так как сама операция не завершается ошибкой. Позже я увидел текстовый файл, в нем были правильные ошибки и количество ошибок в стеке.