DigitalOcean Function部署提示“Nothing Deployed”问题求助
问题描述
几周前构建并部署的DigitalOcean Function运行正常,但小幅修改后无法完成部署。执行以下命令均无有效更新:doctl serverless watch packages/utilities/send-maildoctl serverless deploy packages/utilities/send-mail
命令执行后输出:
Watching 'packages/utilities/send-mail' [use Control-C to terminate]
Deploying 'packages/utilities/send-mail' due to change in 'packages/utilities/send-mail/send-mail.js'
Nothing deployed
Deployment complete. Resuming watch.
无错误提示,但函数未更新。当前project.yml配置:
parameters: {} environment: {} packages: - name: utilities shared: false environment: {} parameters: {} annotations: {} functions: - name: send-mail binary: false main: "" runtime: nodejs:18 web: true webSecure: false parameters: {} environment: { MAIL_HOST: ${MAIL_HOST}, MAIL_USER: ${MAIL_USER}, MAIL_PASS: ${MAIL_PASS} } annotations: {} limits: {}
排查与解决步骤
验证文件实质变更
若修改仅为空格、换行等无意义内容,doctl可能判定无更新。手动修改函数核心逻辑(比如添加一行console.log("test deploy")),再重新执行部署命令。检查环境变量有效性
配置中的${MAIL_HOST}等占位符需要本地终端已加载对应变量。执行echo $MAIL_HOST确认变量存在,若不存在,可通过以下方式传入:doctl serverless deploy packages/utilities/send-mail --env MAIL_HOST=你的主机地址 --env MAIL_USER=你的邮箱账号 --env MAIL_PASS=你的授权码清理serverless缓存
doctl的本地缓存异常可能导致部署无响应,执行命令清理缓存:doctl serverless cache clear清理后重新尝试部署。
尝试全量部署
跳过单函数部署,直接部署整个项目:doctl serverless deploy .修正main字段配置
当前main字段为空,明确指定函数入口(假设入口是send-mail.js中的main函数):functions: - name: send-mail # ...其他配置不变 main: send-mail.main更新doctl版本
旧版本doctl可能存在部署逻辑bug,更新到最新版本:doctl update
内容的提问来源于stack exchange,提问作者Donnie

