使用Jenkins和AWS CodeDeploy时遇BundleType必须为YAML或JSON错误
解决Jenkins + AWS CodeDeploy部署Lambda时的"BundleType must be either YAML or JSON"错误
咱们先拆解下这个错误的核心:AWS CodeDeploy部署Lambda时,得能准确识别部署包里的部署规范文件(也就是你的appspec.yml),要么是Jenkins配置没选对类型,要么是部署包结构不符合要求。下面一步步来排查解决:
1. 先确认部署包的结构是否合规
AWS CodeDeploy要求appspec.yml必须放在压缩包的根目录,绝对不能嵌套在子文件夹里。举个正确的结构例子:
你的部署包解压后/ ├── appspec.yml ├── lambda_function.py └── 其他依赖文件
如果你的appspec.yml藏在src/这类子目录里,CodeDeploy根本找不到它,自然会抛出这个错误。
2. 检查Jenkins里AWS CodeDeploy插件的配置
打开Jenkins的部署任务,找到AWS CodeDeploy的配置项:
- 一定要在Bundle Type选项里选
YAML(因为你用的是.yml文件),别选错成其他类型。 - 如果是用Pipeline脚本部署,要确认
deploy步骤里的bundleType参数明确设为'YAML',示例脚本如下:
deploy codedeploy: [ applicationName: '你的Lambda应用名', deploymentGroupName: '你的部署组名', deploymentConfig: 'CodeDeployDefault.LambdaAllAtOnce', bundleType: 'YAML', s3Location: [ bucket: '你的S3桶名', key: '你的部署包.zip', bundleType: 'YAML' ] ]
注意这里s3Location里的bundleType也要同步设置,别漏了。
3. 验证appspec.yml的格式是否正确
哪怕你有这个文件,要是YAML语法出错(比如缩进不对、符号写错),CodeDeploy也识别不出这是有效的YAML文件。你可以用本地的yamllint命令,或者随便找个在线YAML校验工具检查下语法。
给你一个Lambda用的appspec.yml基础结构参考:
version: 0.0 Resources: - 你的Lambda函数名: Type: AWS::Lambda::Function Properties: Name: "你的Lambda函数名" Alias: "prod" CurrentVersion: "v1" TargetVersion: "v2"
4. 确认S3里的压缩包没问题
有时候Jenkins上传的压缩包可能损坏,或者没把appspec.yml包含进去。你可以手动下载S3里的压缩包,解压后检查根目录有没有这个文件,内容是不是正确的。
按上面的步骤排查完,重新触发Jenkins部署任务,应该就能解决这个BundleType错误了。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

