Конвейер Jenkins не выполняет следующий этап после сбоя на одном этапе выполнения сценария bash - PullRequest
0 голосов
/ 09 апреля 2020

Я запускаю сценарий оболочки внутри контейнера 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, так как сама операция не завершается ошибкой. Позже я увидел текстовый файл, в нем были правильные ошибки и количество ошибок в стеке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...