Ubuntu环境下AWS Lambda(.NET6)GitHub Action中ZIP打包命令报错排查
嗨,我来帮你分析下这个问题。你遇到的zip error: Invalid command arguments (nothing to select from)错误加上退出码16,本质是zip命令找不到任何要打包的文件,或者参数写法有问题,结合你的场景,主要排查这几个点:
1. ZIP命令的参数顺序写错了
zip的标准语法是zip [选项] 压缩包文件名 要打包的文件/目录,你现在把-i(包含过滤规则)放在了压缩包名和目标路径之间,这会让zip无法正确解析参数逻辑。而且其实你根本不需要-i参数——你要打包的是publish目录下的所有内容,直接指定路径就行,没必要再加过滤规则。
修正后的命令应该是这样的(完全符合Lambda部署包的要求,-j参数会去掉目录结构,把所有文件放在zip根目录):
zip -jr customerlambda-356e9e4b8869b2cf7f483d739aa5a8aa34e0fc13.zip ./bin/Release/net6.0/publish/
2. 确认publish目录真的生成了文件
报错的另一个常见原因是./bin/Release/net6.0/publish/目录是空的,甚至根本不存在。你需要确保在执行zip命令之前,已经成功运行了正确的dotnet publish命令:
dotnet publish --configuration Release --framework net6.0 --output ./bin/Release/net6.0/publish/
为了方便排查,建议在GitHub Action里加一步检查publish目录的内容:
ls -la ./bin/Release/net6.0/publish/
如果这一步输出为空,说明publish命令没有生成文件,得回头看dotnet编译/发布的日志,排查是不是有编译错误、项目文件配置问题,或者publish命令的参数写错了。
3. 注意Ubuntu的大小写敏感性
Ubuntu是大小写严格区分的系统,一定要确认路径里的大小写和实际生成的目录完全一致——比如别把net6.0写成Net6.0,Release写成release,这种小失误会直接导致路径找不到,自然没文件可打包。
备注:内容来源于stack exchange,提问作者ZedZip

