如何通过Bitbucket Pipelines为多AWS环境动态提供密钥部署同一分支?
我来帮你解决这个问题!要在Bitbucket Pipelines里用同一个develop分支部署到AWS的dev/uat/prod三个环境,核心思路是把每个环境的AWS凭证单独存在Bitbucket仓库的加密变量里,然后在Pipeline配置中为每个部署阶段调用对应的变量,这样就能动态切换密钥了。下面是具体的实现步骤和配置示例:
第一步:在Bitbucket仓库配置环境专属变量
进入你的Bitbucket仓库后台,依次点击「Settings」→「Pipelines」→「Repository variables」,为每个环境添加一组独立的AWS密钥对:
- 开发环境:
DEV_AWS_ACCESS_KEY_ID和DEV_AWS_SECRET_ACCESS_KEY - UAT环境:
UAT_AWS_ACCESS_KEY_ID和UAT_AWS_SECRET_ACCESS_KEY - 生产环境:
PROD_AWS_ACCESS_KEY_ID和PROD_AWS_SECRET_ACCESS_KEY
⚠️ 一定要勾选变量的「Secured」选项,这样Bitbucket会加密存储这些敏感信息,不会在日志或配置中泄露。
第二步:编写Pipeline配置文件(bitbucket-pipelines.yml)
根据你的部署需求,这里提供两种常见的配置方案:
方案一:串行部署(依次部署dev→uat→prod)
适合需要前一个环境部署验证通过后,再部署下一个环境的场景:
# 使用AWS官方CLI镜像,省去安装步骤 image: amazon/aws-cli:latest pipelines: branches: develop: # 部署到开发环境 - step: name: Deploy to Development deployment: development # 标记为开发部署环境 script: # 动态设置当前阶段的AWS密钥 - export AWS_ACCESS_KEY_ID=$DEV_AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$DEV_AWS_SECRET_ACCESS_KEY # 替换成你的实际部署命令,比如同步静态文件到S3、部署ECS服务等 - aws s3 sync ./dist s3://your-dev-bucket --delete - echo "✅ 成功部署到开发环境" # 部署到UAT环境 - step: name: Deploy to UAT deployment: test # 标记为测试部署环境 script: - export AWS_ACCESS_KEY_ID=$UAT_AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$UAT_AWS_SECRET_ACCESS_KEY - aws s3 sync ./dist s3://your-uat-bucket --delete - echo "✅ 成功部署到UAT环境" # 部署到生产环境(建议手动触发) - step: name: Deploy to Production deployment: production # 标记为生产部署环境 trigger: manual # 手动触发,避免误部署 script: - export AWS_ACCESS_KEY_ID=$PROD_AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$PROD_AWS_SECRET_ACCESS_KEY - aws s3 sync ./dist s3://your-prod-bucket --delete - echo "✅ 成功部署到生产环境"
方案二:并行部署(同时部署三个环境)
如果三个环境的部署互不依赖,想要提高效率可以用并行步骤:
image: amazon/aws-cli:latest pipelines: branches: develop: - parallel: # 并行部署开发环境 - step: name: Deploy to Development deployment: development script: - export AWS_ACCESS_KEY_ID=$DEV_AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$DEV_AWS_SECRET_ACCESS_KEY - aws s3 sync ./dist s3://your-dev-bucket --delete - echo "✅ Dev部署完成" # 并行部署UAT环境 - step: name: Deploy to UAT deployment: test script: - export AWS_ACCESS_KEY_ID=$UAT_AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$UAT_AWS_SECRET_ACCESS_KEY - aws s3 sync ./dist s3://your-uat-bucket --delete - echo "✅ UAT部署完成" # 并行部署生产环境(手动触发) - step: name: Deploy to Production deployment: production trigger: manual script: - export AWS_ACCESS_KEY_ID=$PROD_AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$PROD_AWS_SECRET_ACCESS_KEY - aws s3 sync ./dist s3://your-prod-bucket --delete - echo "✅ Prod部署完成"
额外建议
- 权限最小化:每个环境的AWS IAM用户只赋予对应环境所需的最小权限(比如dev的用户只能操作dev相关的资源),降低泄露风险。
- 部署审批:你可以在Bitbucket的「Deployments」页面给生产环境添加审批流程,需要指定人员确认后才能部署。
- 日志验证:部署完成后,可以在Bitbucket Pipelines的日志中检查是否正确加载了对应环境的密钥(只会显示变量名,不会显示明文)。
内容的提问来源于stack exchange,提问作者Ashish Yadav
相关产品推荐
相关产品推荐

