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

如何在Bitbucket Pipeline中执行Heroku container:release完成部署

解决Bitbucket Pipeline中Heroku容器发布的问题

问题背景

我已经完成了Docker镜像构建、推送至Heroku Registry的全部步骤,但卡在最后一步——无法执行heroku container:release web -a $HEROKU_APP_NAME来更新运行中的应用。Bitbucket Pipeline默认环境没有Heroku CLI,尝试通过npm安装相关包发现已废弃,用Heroku Platform API写的curl脚本返回HTTP 200 OK,但应用并未实际更新。

可行解决方案

方案1:在Pipeline中安装官方Heroku CLI

Bitbucket的atlassian/default-image:3基于Ubuntu系统,可以直接通过官方脚本安装Heroku CLI,这是最直接可靠的方式。修改Pipeline脚本如下:

image: atlassian/default-image:3

options:
  docker: true

pipelines:
  branches:
    'develop':
    - step:
        name: Docker Build Push & Release
        deployment: Develop
        services:
          - docker
        caches:
          - docker
        script:
          - echo "Docker Build"
          - docker build -t $HEROKU_APP_NAME .
          - echo "Heroku Registry Login"
          - docker login --username=_ --password=$HEROKU_API_KEY registry.heroku.com
          - echo "Heroku Image Tagging"
          - docker tag $HEROKU_APP_NAME registry.heroku.com/$HEROKU_APP_NAME/web
          - echo "Heroku Docker Push"
          - docker push registry.heroku.com/$HEROKU_APP_NAME/web
          # 安装Heroku CLI
          - curl https://cli-assets.heroku.com/install.sh | sh
          # 用API Key完成Heroku认证
          - echo "$HEROKU_API_KEY" > ~/.netrc
          - chmod 600 ~/.netrc
          # 执行发布命令
          - heroku container:release web -a $HEROKU_APP_NAME

方案2:修复Heroku Platform API的curl请求

之前的curl请求返回200但未生效,核心原因是docker_image的格式不符合Heroku要求。Heroku接受的镜像标识可以是完整的RepoDigest(如registry.heroku.com/app/web@sha256:xxx)或带sha256前缀的完整镜像ID,修改脚本如下:

image: atlassian/default-image:3

options:
  docker: true

pipelines:
  branches:
    'develop':
    - step:
        name: Docker Build Push & Release via API
        deployment: Develop
        services:
          - docker
        caches:
          - docker
        script:
          - echo "Docker Build"
          - docker build -t $HEROKU_APP_NAME .
          - echo "Heroku Registry Login"
          - docker login --username=_ --password=$HEROKU_API_KEY registry.heroku.com
          - echo "Heroku Image Tagging"
          - docker tag $HEROKU_APP_NAME registry.heroku.com/$HEROKU_APP_NAME/web
          - echo "Heroku Docker Push"
          - docker push registry.heroku.com/$HEROKU_APP_NAME/web
          # 获取符合要求的镜像RepoDigest
          - docker inspect registry.heroku.com/$HEROKU_APP_NAME/web --format='{{index .RepoDigests 0}}' > HEROKU_DOCKER_IMAGE_ID
          # 执行API请求发布
          - HEROKU_IMAGE=$(cat HEROKU_DOCKER_IMAGE_ID)
          - curl -X PATCH https://api.heroku.com/apps/$HEROKU_APP_NAME/formation \
            -d "{\"updates\": [{\"type\": \"web\", \"docker_image\": \"$HEROKU_IMAGE\"}]}" \
            -H "Content-Type: application/json" \
            -H "Accept: application/vnd.heroku+json; version=3.docker_releases" \
            -H "Authorization: Bearer $HEROKU_API_KEY"

验证建议

  • 发布完成后,可添加heroku logs --tail -a $HEROKU_APP_NAME命令查看应用日志,确认是否有新的部署启动记录
  • 登录Heroku控制台,检查应用的部署历史,确认新版本是否已上线

内容的提问来源于stack exchange,提问作者Ariston Darmayuda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:40:07