You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bitbucket Pipelines部署后在AWS EC2实例内执行命令?

解决Bitbucket Pipelines部署Elastic Beanstalk后在EC2实例执行命令的问题

Bitbucket Pipelines的after-script仅在构建容器内执行,无法直接操作目标EC2实例。要实现部署后在EC2实例内运行命令,可通过以下几种方案解决:

方法1:使用Elastic Beanstalk原生配置(推荐)

利用Elastic Beanstalk的内置机制,在部署包中添加配置文件,让实例自动执行指定命令,这是最稳定可靠的方式。

方式A:.ebextensions配置(兼容旧版平台)

  1. 在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 ]"
  1. 修改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/
  1. 更新pipe的ZIP_FILE变量为新打包的文件:
ZIP_FILE: 'deploy-package.zip'

方式B:.platform钩子(Amazon Linux 2+平台推荐)

若使用Amazon Linux 2平台,推荐用平台钩子替代.ebextensions:

  1. 在项目根目录创建.platform/hooks/postdeploy文件夹,新建脚本unpack_jar.sh:
#!/bin/bash
# 解压jar包到目标目录
unzip -o /var/app/current/xxxx-$version.jar -d /var/app/current/unpacked
  1. 给脚本添加执行权限:
- chmod +x .platform/hooks/postdeploy/unpack_jar.sh
  1. 参考方式A的打包步骤,将.platform目录和jar包一起打包,更新ZIP_FILE变量。

方法2:通过AWS SSM Run Command远程执行

若不想修改部署包,可在Bitbucket Pipelines部署完成后,用AWS CLI调用SSM命令远程操作EC2实例:

  1. 提前准备:

    • EC2实例已安装SSM Agent(Amazon Linux 2默认预装)
    • 实例的IAM角色拥有AmazonSSMManagedInstanceCore权限
    • Bitbucket使用的AWS账号拥有ssm:SendCommand权限
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:43:19