AWS CodeBuild构建报错:容器标签数量不符,预期为1
问题
通过CloudFormation模板创建AWS CodeBuild项目,该项目从CodeCommit拉取源码,构建产物存储到S3桶,但构建失败,报错信息如下:
[Container] 2024/02/29 17:32:12.865253 Waiting for agent ping [Container] 2024/02/29 17:32:15.073019 Waiting for DOWNLOAD_SOURCE [Container] 2024/02/29 17:32:19.478936 Phase is DOWNLOAD_SOURCE [Container] 2024/02/29 17:32:19.481311 CODEBUILD_SRC_DIR=/codebuild/output/src1892399736/src/git-codecommit.us-east-1.amazonaws.com/v1/repos/spring-petclinic [Container] 2024/02/29 17:32:19.481832 YAML location is /codebuild/output/src1892399736/src/git-codecommit.us-east-1.amazonaws.com/v1/repos/spring-petclinic/buildspec.yaml [Container] 2024/02/29 17:32:19.485543 Phase complete: DOWNLOAD_SOURCE State: FAILED [Container] 2024/02/29 17:32:19.485556 Phase context status code: YAML_FILE_ERROR Message: wrong number of container tags, expected 1
使用的CloudFormation模板内容:
AWSTemplateFormatVersion: 2010-09-09 Description: Create CodeBuild Stack Template Parameters: ApplicationRepoName: Type: String Description: Name of the repo which contains Rest Application. Default: spring-petclinic ArtifactStoreS3Location: Type: String Description: Name of the S3 bucket to store CodePipeline artificat. Default: rest-apps-cbd Resources: CodeBuildRole: Type: "AWS::IAM::Role" Properties: RoleName: Fn::Sub: CodeBuildRole-${AWS::StackName} AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - "codebuild.amazonaws.com" Action: - "sts:AssumeRole" Path: /service-role/ Policies: - PolicyName: "CodeBuildCICDAccessPolicy" PolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Action: - "codecommit:GitPull" Resource: - Fn::Sub: arn:aws:codecommit:${AWS::Region}:${AWS::AccountId}:${ApplicationRepoName} - Effect: "Allow" Action: - "logs:CreateLogGroup" - "logs:CreateLogStream" - "logs:PutLogEvents" Resource: - Fn::Sub: arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/codebuild/* - Effect: "Allow" Action: - "s3:PutObject" - "s3:GetObject" - "s3:GetObjectVersion" - "s3:ListBucket" Resource: - Fn::Sub: arn:aws:s3:::codepipeline-${AWS::Region}-* - Fn::Sub: arn:aws:s3:::${ArtifactStoreS3Location}/* - Fn::Sub: arn:aws:s3:::${ArtifactStoreS3Location} BuildRestAppCFNProject: Type: AWS::CodeBuild::Project Properties: Name: !Sub BuildRestAppCFN-${AWS::StackName} Description: Build war file for rest application ServiceRole: !GetAtt [ CodeBuildRole, Arn ] Artifacts: Type: S3 Location: !Ref ArtifactStoreS3Location Name: !Sub BuildRestAppCFN-${AWS::StackName} Environment: Type: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/standard:2.0 Source: Location: !Sub https://git-codecommit.us-east-1.amazonaws.com/v1/repos/${ApplicationRepoName} Type: CODECOMMIT TimeoutInMinutes: 10 Tags: - Key: Name Value: !Sub BuildRestAppCFN-${AWS::StackName}
问题定位与解决
报错提示wrong number of container tags, expected 1,问题出在CodeCommit仓库根目录的buildspec.yaml文件中,与CloudFormation模板无关。
具体修复步骤:
- 检查
buildspec.yaml的构建阶段命令,是否存在类似docker build -t tag1 tag2 .这种一次指定多个镜像标签的操作,CodeBuild要求单个容器操作只能对应一个标签。 - 将多标签命令拆分,比如把上述命令拆分为两个独立命令:
docker build -t my-app:v1 . docker tag my-app:v1 my-app:latest - 同时验证
buildspec.yaml的YAML语法,确保没有缩进错误或格式问题,这类问题也可能引发解析报错。
内容的提问来源于stack exchange,提问作者sromit
相关产品推荐
相关产品推荐

