Elastic Beanstalk平台升级至2.5.1后Bitbucket Pipeline部署失败
解决Bitbucket Pipeline部署AWS Elastic Beanstalk 2.5.1版本失败问题
问题背景
- 部署栈:.NET 6项目,通过Bitbucket Pipeline部署至AWS Elastic Beanstalk
- 原Elastic Beanstalk配置:
- 平台:.NET Core on Linux
- 平台分支:.NET Core running on 64bit Amazon Linux 2
- 平台版本:2.3.5
- 升级后平台版本:2.5.1
- 所用Bitbucket Pipeline配置片段:
- pipe: atlassian/aws-elasticbeanstalk-deploy:1.0.2 variables: AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION APPLICATION_NAME: $APPLICATION_NAME ENVIRONMENT_NAME: $ENVIRONMENT_NAME ZIP_FILE: 'release.zip' VERSION_LABEL: 'pipeline-testing-deploy-$BITBUCKET_BUILD_NUMBER' WAIT: 'true'
- 报错信息:
✖ Deployment failed. Environment environment-name is running a different version pipeline-test-deploy-239.
问题分析
该错误核心是Elastic Beanstalk环境当前运行的应用版本与Pipeline尝试部署的版本标签存在冲突,或旧版Atlassian部署Pipe对EB 2.5.1的版本校验逻辑不兼容。由于官方pipe长期未更新,需通过替代方案解决兼容性问题。
解决方案
1. 清理冲突的应用版本
- 登录AWS Elastic Beanstalk控制台,进入对应应用的应用版本列表
- 查找是否存在与报错中同名的
pipeline-test-deploy-239版本 - 若该版本未被当前环境使用,直接删除;若已被使用,确认后替换为新版本再删除
- 重新触发Bitbucket Pipeline部署
2. 确保版本标签绝对唯一
修改Pipeline的VERSION_LABEL,加入Git提交哈希值避免重复:
- pipe: atlassian/aws-elasticbeanstalk-deploy:1.0.2 variables: AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION APPLICATION_NAME: $APPLICATION_NAME ENVIRONMENT_NAME: $ENVIRONMENT_NAME ZIP_FILE: 'release.zip' VERSION_LABEL: 'pipeline-testing-deploy-$BITBUCKET_BUILD_NUMBER-$BITBUCKET_COMMIT' WAIT: 'true'
3. 用AWS CLI替代官方Pipe部署
由于官方pipe长期未维护,直接使用AWS CLI命令部署兼容性更强:
# 先添加构建打包并上传S3的步骤 - step: name: Build & Upload to S3 script: - dotnet publish -c Release -o ./publish - zip -r release.zip ./publish - aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID - aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY - aws configure set region $AWS_DEFAULT_REGION - aws s3 cp release.zip s3://your-s3-bucket/release-$BITBUCKET_BUILD_NUMBER.zip # 再添加EB部署步骤 - step: name: Deploy to Elastic Beanstalk image: amazon/aws-cli:latest script: - aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID - aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY - aws configure set region $AWS_DEFAULT_REGION # 创建应用版本 - aws elasticbeanstalk create-application-version --application-name $APPLICATION_NAME --version-label "pipeline-testing-deploy-$BITBUCKET_BUILD_NUMBER-$BITBUCKET_COMMIT" --source-bundle S3Bucket="your-s3-bucket",S3Key="release-$BITBUCKET_BUILD_NUMBER.zip" # 更新环境版本 - aws elasticbeanstalk update-environment --application-name $APPLICATION_NAME --environment-name $ENVIRONMENT_NAME --version-label "pipeline-testing-deploy-$BITBUCKET_BUILD_NUMBER-$BITBUCKET_COMMIT" # 等待部署完成 - aws elasticbeanstalk wait environment-updated --application-name $APPLICATION_NAME --environment-name $ENVIRONMENT_NAME
注意:需确保AWS权限包含S3上传、EB应用版本创建及环境更新权限。
4. 验证项目与EB 2.5.1的兼容性
- 查看EB 2.5.1平台变更日志,确认.NET运行时版本是否匹配项目依赖
- 手动打包项目,通过AWS控制台上传部署测试,排除项目本身的兼容性问题
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

