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

如何通过bitbucket-pipelines.yml调用EC2实例上的脚本?

方案可行性说明

通过SSH从Bitbucket Pipeline触发EC2执行脚本是完全适用且合理的方案,也是CI/CD场景下触发远程服务器执行操作的主流实现方式,核心优势如下:

  • 权限收敛:EC2本身已经持有仓库拉取、Docker操作的权限,不需要向Pipeline暴露任何云服务、仓库的敏感凭证,降低敏感信息泄露风险
  • 逻辑拆分:Pipeline仅负责触发执行,具体的构建、部署逻辑全部放在EC2本地的脚本维护,调整逻辑不需要修改Pipeline配置
  • 实现复杂度低:不需要额外部署中间件、消息队列等组件,依赖SSH原生能力即可快速落地

具体实现步骤

1. 准备SSH密钥对(仅首次配置需要)

  • 在本地或EC2上生成专用的无密码SSH密钥对,执行命令:ssh-keygen -t ed25519 -C "bitbucket-pipeline-ssh" -f bitbucket-pipeline-key,执行后会生成公钥文件bitbucket-pipeline-key.pub和私钥文件bitbucket-pipeline-key
  • 将公钥内容添加到EC2对应用户的~/.ssh/authorized_keys文件中,验证私钥可正常登录EC2
  • 把私钥内容、EC2的公网IP/域名、EC2登录用户名作为敏感变量,配置到Bitbucket仓库的Pipeline变量中,路径为:Bitbucket仓库 → 仓库设置 → Pipelines → Repository variables,分别添加3个变量:
    • EC2_SSH_PRIVATE_KEY:值为私钥文件的全部内容
    • EC2_HOST:值为EC2的公网IP或者域名
    • EC2_USER:值为EC2的登录用户名(比如ubuntu、ec2-user等)
      配置时请勾选Secure选项,避免变量值在Pipeline日志中泄露

2. 上传Bash脚本到EC2

手动将需要执行的脚本上传到EC2的固定路径,比如/opt/deploy/scripts/,并给脚本添加执行权限:chmod +x /opt/deploy/scripts/your-script.sh,后续脚本更新可手动同步或通过Pipeline自动同步均可。

3. 编写Pipeline配置

在Bitbucket仓库根目录创建bitbucket-pipelines.yml文件,参考配置如下:

image: atlassian/default-image:3

pipelines:
  default:
    - step:
        name: 触发EC2执行部署脚本
        script:
          # 写入SSH私钥到Pipeline运行环境
          - echo "$EC2_SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
          - chmod 600 ~/.ssh/id_ed25519
          # 添加EC2主机到信任列表避免交互确认
          - ssh-keyscan $EC2_HOST >> ~/.ssh/known_hosts
          # SSH连接EC2执行目标脚本,可按需传递参数
          - ssh $EC2_USER@$EC2_HOST "bash /opt/deploy/scripts/your-script.sh"

4. 注意事项

  • 确保EC2的安全组入方向开放22端口,允许Bitbucket Pipeline的出口IP访问,若不想开放22端口给全公网,可将Bitbucket官方公开的Pipeline出口IP段添加到安全组白名单
  • 脚本执行日志可输出到EC2本地日志文件方便排查,也可在SSH命令中添加-t参数将脚本输出回传到Pipeline日志
  • 若脚本执行时间较长,可按需调整Pipeline的step超时时间,默认超时为1小时

内容的提问来源于stack exchange,提问作者J.J. Beam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:12:01