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

Serverless WSGI在Bitbucket流水线中执行失败(本地运行正常)

问题分析与解决方案

看起来你遇到的核心问题是:流水线中sls wsgi manage无法识别已部署的函数,但本地执行完全正常。结合你的配置和流水线步骤,我整理了几个最可能的原因和对应的解决办法:

1. 流水线步骤的工作目录不一致(最可能)

Bitbucket Pipelines的每个独立步骤(就是你用-列出的每一行)默认都是在仓库根目录执行的,单个步骤里的cd src只会在当前步骤生效,下一个步骤会自动回到根目录。

你看,你在「配置Serverless」步骤里有cd src,但后面的sls deploy、sls wsgi manage都是单独的步骤,这意味着这些命令其实是在根目录执行的——而你的serverless.yml是放在src目录里的!虽然sls deploy可能因为之前的插件安装或其他原因侥幸成功,但sls wsgi manage对配置的依赖更直接,找不到正确目录下的serverless.yml就会识别不出函数名,抛出undefined错误。

解决办法:把所有需要在src目录执行的命令合并到同一个脚本块里,确保工作目录始终正确。比如修改流水线配置为:

script: |
  cp requirements.txt src/requirements.txt
  serverless config credentials --provider aws --key ${AWS_KEY} --secret ${AWS_SECRET}
  cd src
  sls plugin install -n serverless-python-requirements
  sls plugin install -n serverless-wsgi
  sls plugin install -n serverless-dotenv-plugin
  sls deploy --stage ${LOCAL_SERVERLESS_STAGE}
  sls deploy list functions
  sls wsgi manage --stage ${LOCAL_SERVERLESS_STAGE} --command "migrate"
  sls wsgi manage --stage ${LOCAL_SERVERLESS_STAGE} --command "collectstatic --noinput"

用script: |把所有命令串起来,这样cd src之后的所有命令都会在src目录下执行。

2. sls wsgi manage未指定部署的Stage

你部署的时候用了--stage ${LOCAL_SERVERLESS_STAGE},但执行wsgi manage时没加这个参数。Serverless默认会用serverless.yml里配置的dev stage,如果你的LOCAL_SERVERLESS_STAGE不是dev,那wsgi manage会去查找dev stage的函数——而这个stage根本没部署过,自然找不到。

解决办法:给sls wsgi manage命令加上--stage ${LOCAL_SERVERLESS_STAGE}参数,和部署时保持一致,比如:

sls wsgi manage --stage ${LOCAL_SERVERLESS_STAGE} --command "migrate"

3. 强制指定函数名(兜底方案)

如果上面两个办法都不行,可能是serverless-wsgi插件在流水线环境里没正确识别到你的WSGI函数。你可以直接在命令里显式指定函数名(你的函数叫app),强制插件找到正确的函数:

sls wsgi manage --function app --stage ${LOCAL_SERVERLESS_STAGE} --command "migrate"

你可以先试试第一个办法,这是Bitbucket流水线里最常见的路径问题,大概率能解决你的问题。

内容的提问来源于stack exchange,提问作者Bryant Makes Programs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:02:38