You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS CodePipeline中避免测试失败时的COMMAND EXECUTION ERROR中断脚本

解决AWS CodePipeline中pytest测试失败后中断脚本的问题

核心问题分析

你的脚本存在两个关键问题:

  1. AWS CodePipeline的Shell步骤默认开启set -e,任何命令返回非0会直接终止脚本,导致后续判断无法执行。
  2. 使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:02:39