Azure Pipelines中Cypress测试失败时如何让流水线始终运行成功?
解决方案
Azure Pipelines 判定任务失败的核心依据是任务执行进程的退出码是否为0,非0就会标记任务失败,进而导致整个流水线失败。当前Cypress用例失败时,cy2命令会返回非0退出码,npm-run-all汇总所有子命令的执行结果后也会返回非0,因此Yarn任务被判定为失败。你可以通过以下两种方案解决:
方案1:修改package.json脚本(推荐,平台通用)
在你的parallel脚本末尾添加|| true,强制让整个脚本无论执行结果如何都返回0退出码,修改后如下:
"parallel": "npm-run-all --sequential delete:reports --parallel --continue-on-error instance1 instance1 instance1 --sequential cleanup-instance --sequential combine:reports || true"
该方案不依赖CI平台配置,在本地执行或者其他CI环境中运行时也不会抛出退出码错误。
方案2:修改Azure Pipelines YAML配置
如果不想修改项目内的脚本,可以直接调整流水线任务配置,可选两种子方案:
- 配置任务容错:给Yarn任务添加
continueOnError: true属性,即使任务返回非0退出码,流水线也会继续执行后续步骤,且不会将整个阶段标记为失败:
- task: Yarn@2 displayName: 'run parallel' inputs: ProjectDirectory: '$(Build.SourcesDirectory)' Arguments: 'parallel' workingDir: '$(Build.SourcesDirectory)' verbose: 'true' continueOnError: true # 新增容错配置
- 强制返回成功退出码:如果你希望该任务的执行状态直接显示为成功(而非"已完成但存在错误"的状态),可以替换为自定义脚本任务,吞掉非0退出码:
- script: | yarn parallel || exit 0 displayName: 'run parallel' workingDirectory: $(Build.SourcesDirectory)
内容的提问来源于stack exchange,提问作者Ashish Khokhariya
相关产品推荐
相关产品推荐

