我正在通过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
'''
}
}
}
try{
stage('Run Unit Tests') {
sh '''
//Executing tests
'''
}
} catch(e) {
echo e.toString()
}
但是他们两个都无济于事。 此外,shell脚本只是将正在运行的测试的标准输出转储到文本文件中,因此我不明白为什么应该返回退出代码1,因为操作本身不会失败。稍后我看到了该文本文件,该文件带有正确的故障和带有堆栈的错误计数。