如何在S3存储桶为发布代码创建Zip包,解决AWS CodeBuild报错问题
问题根因分析
- 路径跳转逻辑错误:CodeBuild默认工作目录为拉取代码的根目录(
$CODEBUILD_SRC_DIR),你执行dotnet publish时指定-o BillingArtifacts,会直接在当前工作目录下生成BillingArtifacts文件夹,执行cd ../BillingArtifacts会跳转到工作目录的上级目录查找文件夹,路径不存在所以触发exit status 2错误。 - 拼写错误(匹配你上报的错误日志):你错误日志中跳转的目录为
OutPutDirecotry,存在拼写错误,正确拼写为OutputDirectory,拼写错误也会导致路径找不到。 - zip命令参数不全:
zip -r myBuild.zip缺少待压缩的目标路径参数,即使路径跳转正确也会执行失败。 - 冗余配置兼容问题:你配置的
-p:PublishDir=.\publish用了Windows风格的反斜杠,如果用Linux构建环境会识别异常,且-o参数已经指定了输出目录,该参数属于冗余配置可直接删除。
修正后的完整buildspec配置
version: 0.2 # buildspec必填的版本声明 phases: build: commands: - echo Build started on `date` - dotnet build BillingData/BillingData.sln post_build: commands: - echo Publish started on `date` - dotnet publish BillingData/BillingData.sln -c Release -r linux-x64 -o BillingArtifacts - cd BillingArtifacts # 直接进入当前工作目录下的BillingArtifacts文件夹 - zip -r myBuild.zip . # 压缩当前目录所有内容到myBuild.zip artifacts: # 配置后才会自动将产物上传到你指定的S3存储桶 files: - BillingArtifacts/myBuild.zip
可选优化方案
如果你不需要跳转目录,可以直接在根目录执行压缩命令,简化配置:
post_build: commands: - echo Publish started on `date` - dotnet publish BillingData/BillingData.sln -c Release -r linux-x64 -o BillingArtifacts - zip -r myBuild.zip BillingArtifacts/* artifacts: files: - myBuild.zip
内容的提问来源于stack exchange,提问作者90-211456
相关产品推荐
相关产品推荐

