如何在AWS CodePipeline中避免测试失败时的COMMAND EXECUTION ERROR中断脚本
解决AWS CodePipeline中pytest测试失败后中断脚本的问题
核心问题分析
你的脚本存在两个关键问题:
- AWS CodePipeline的Shell步骤默认开启
set -e,任何命令返回非0会直接终止脚本,导致后续判断无法执行。 - 使用
echo $?会覆盖原有的返回值(echo本身返回0),导致后续if判断拿到的不是make test的真实结果。
修正后的YAML脚本
将你的YAML步骤替换为以下内容:
# 关闭自动中断机制,允许命令失败后继续执行后续逻辑 set +e # 执行测试并保存返回值到变量 make test TEST_RESULT=$? # 根据测试结果执行不同任务 if [ $TEST_RESULT -ne 0 ]; then # 测试失败时执行的任务,示例: echo "测试失败,执行任务1" # 这里添加你的task1逻辑,比如发送失败通知、回滚操作等 else # 测试成功时执行的任务,示例: echo "测试成功,执行任务2" # 这里添加你的task2逻辑,比如部署、发送成功通知等 fi # 可选:如果需要让CodePipeline根据测试结果决定后续阶段是否执行,保留此行;否则可改为exit 0 exit $TEST_RESULT
关键说明
set +e:关闭Shell的set -e模式,确保make test失败后脚本不会直接中断,能继续执行后续的判断逻辑。- 保存返回值到变量:通过
TEST_RESULT=$?将make test的返回值存储起来,避免后续命令(如echo)覆盖$?的值。 - 移除
--keep-going:该参数仅在Makefile存在多个目标时生效,你只有单个test目标,所以这个参数没有作用,可以删除。
Makefile无需修改
你的现有Makefile内容完全可以正常工作,pytest执行完成后会返回对应结果,make会将这个结果传递出来供后续判断使用:
test: python -m pytest tests.py
内容的提问来源于stack exchange,提问作者Tanu
相关产品推荐
相关产品推荐

