如何在Bitbucket Pipelines部署后在AWS EC2实例内执行命令?
解决Bitbucket Pipelines部署Elastic Beanstalk后在EC2实例执行命令的问题
Bitbucket Pipelines的after-script仅在构建容器内执行,无法直接操作目标EC2实例。要实现部署后在EC2实例内运行命令,可通过以下几种方案解决:
方法1:使用Elastic Beanstalk原生配置(推荐)
利用Elastic Beanstalk的内置机制,在部署包中添加配置文件,让实例自动执行指定命令,这是最稳定可靠的方式。
方式A:.ebextensions配置(兼容旧版平台)
- 在Spring Boot项目根目录创建
.ebextensions文件夹,新建配置文件01_post_deploy.config:
container_commands: 01_unpack_jar: # 解压jar包到目标目录,-o参数覆盖已存在文件 command: "unzip -o /var/app/current/xxxx-$version.jar -d /var/app/current/unpacked" # 先检查jar文件存在再执行,避免无意义报错 test: "[ -f /var/app/current/xxxx-$version.jar ]"
- 修改Bitbucket Pipelines脚本,将
.ebextensions和jar包一起打包成zip(Elastic Beanstalk部署包需包含配置文件):
在原pipe步骤前添加打包命令:
# 创建临时打包目录 - mkdir -p deploy-package # 复制jar包到打包目录 - cp xxxxxx/target/xxxx-$version.jar deploy-package/ # 复制配置目录到打包目录 - cp -r .ebextensions deploy-package/ # 打包成zip文件 - zip -r deploy-package.zip deploy-package/
- 更新
pipe的ZIP_FILE变量为新打包的文件:
ZIP_FILE: 'deploy-package.zip'
方式B:.platform钩子(Amazon Linux 2+平台推荐)
若使用Amazon Linux 2平台,推荐用平台钩子替代.ebextensions:
- 在项目根目录创建
.platform/hooks/postdeploy文件夹,新建脚本unpack_jar.sh:
#!/bin/bash # 解压jar包到目标目录 unzip -o /var/app/current/xxxx-$version.jar -d /var/app/current/unpacked
- 给脚本添加执行权限:
- chmod +x .platform/hooks/postdeploy/unpack_jar.sh
- 参考方式A的打包步骤,将
.platform目录和jar包一起打包,更新ZIP_FILE变量。
方法2:通过AWS SSM Run Command远程执行
若不想修改部署包,可在Bitbucket Pipelines部署完成后,用AWS CLI调用SSM命令远程操作EC2实例:
提前准备:
- EC2实例已安装SSM Agent(Amazon Linux 2默认预装)
- 实例的IAM角色拥有
AmazonSSMManagedInstanceCore权限 - Bitbucket使用的AWS账号拥有
ssm:SendCommand权限
在Bitbucket Pipelines的
after-script或script末尾添加命令:
aws ssm send-command \ --document-name "AWS-RunShellScript" \ # 通过实例标签定位目标EC2,替换为你的环境名称 --targets "Key=tag:aws:elasticbeanstalk:environment-name,Values=xxxxxxxx" \ --parameters commands="unzip -o /var/app/current/xxxx-$version.jar -d /var/app/current/unpacked" \ --region $AWS_DEFAULT_REGION
注意事项
- 替换所有命令中的
xxxx-$version.jar为实际的jar文件名 - 打包时确保
.ebextensions或.platform目录位于部署zip的根目录下 - SSM方式需额外配置IAM权限,适合临时操作;长期部署推荐使用原生配置文件方式
内容的提问来源于stack exchange,提问作者Shehan Simen
相关产品推荐
相关产品推荐

