在运行bash脚本的一个阶段失败后,Jenkins管道无法执行下一阶段

时间:2020-04-08 21:49:42

标签: bash jenkins groovy jenkins-pipeline jenkins-groovy

我正在通过jenkins groovy管道脚本在docker容器中运行shell脚本。 bash脚本设置了一些环境变量,然后执行单元测试。这些单元测试执行的标准输出被转储到文本文件中。 稍后,我将此文本文件复制到容器之外以供使用。 这是shell脚本:

#/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

因此,我无法执行解析result.txt文件并报告结果的后续步骤。 如何使管道在下一阶段执行?

我尝试了一些类似的事情: 1.使用catchError:

stage('Run Unit Tests') {
    steps {
        catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
            sh '''
                //Running the commands above
            '''
        }
    }
}
  1. 使用尝试:
    try{
        stage('Run Unit Tests') {
            sh '''
                //Executing tests
            '''
        }
    } catch(e) {
        echo e.toString()  
    }

但是他们两个都无济于事。 此外,shell脚本只是将正在运行的测试的标准输出转储到文本文件中,因此我不明白为什么应该返回退出代码1,因为操作本身不会失败。稍后我看到了该文本文件,该文件带有正确的故障和带有堆栈的错误计数。

0 个答案:

没有答案