如何通过Terraform获取CodeBuild最新成功构建编号并用于镜像标签?
解决CodeBuild构建编号作为Docker镜像标签的Terraform配置问题
错误原因
你在Terraform配置里把CODEBUILD_BUILD_NUMBER当成了Terraform变量引用,但这个值是CodeBuild运行时自动注入的环境变量,不属于Terraform的变量体系,因此Terraform会提示未声明该变量。
解决方案
步骤1:修正Terraform配置
删除Terraform中environment块里的IMAGE_TAG环境变量定义——这个值不需要在Terraform层面配置,而是在构建过程中由CodeBuild提供。修改后的相关配置片段如下:
environment { compute_type = "BUILD_GENERAL1_SMALL" image = "aws/codebuild/standard:4.0" type = "LINUX_CONTAINER" image_pull_credentials_type = "CODEBUILD" environment_variable { name = "AWS_DEFAULT_REGION" value = var.aws_default_region } environment_variable { name = "AWS_ACCOUNT_ID" value = var.aws_account_id } environment_variable { name = "IMAGE_NAME" value = var.aws_codecommit_repo_name } }
步骤2:在buildspec.yml中使用构建编号作为镜像标签
在你的buildspec.yml构建脚本里,直接引用CodeBuild自动注入的CODEBUILD_BUILD_NUMBER环境变量作为Docker镜像标签。示例buildspec内容如下:
version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com build: commands: - echo Build started on `date` - echo Building the Docker image... # 直接使用CODEBUILD_BUILD_NUMBER作为镜像标签 - docker build -t $IMAGE_NAME:$CODEBUILD_BUILD_NUMBER . - docker tag $IMAGE_NAME:$CODEBUILD_BUILD_NUMBER $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_NAME:$CODEBUILD_BUILD_NUMBER post_build: commands: - echo Build completed on `date` - echo Pushing the Docker image... - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_NAME:$CODEBUILD_BUILD_NUMBER
配置完成后,每次CodeBuild运行时,会自动将当前构建的编号注入到CODEBUILD_BUILD_NUMBER变量中,构建脚本就能用它生成带对应编号的Docker镜像标签。
内容的提问来源于stack exchange,提问作者user21700129
相关产品推荐
相关产品推荐

