Heroku 容器:在 Bitbucket 管道上发布

问题描述 投票:0回答:1

我正在尝试为我的 .NET Core Web API 项目的 Heroku CD 构建 Bitbucket 管道 (Dockerize)。我的管道脚本:

image: atlassian/default-image:3

options:
  docker: true

pipelines:
  branches:
    'develop':
    - step:
        name: Docker Build And Push
        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
          - docker inspect registry.heroku.com/$HEROKU_APP_NAME/web --format='{{.Id}}' > HEROKU_DOCKER_IMAGE_ID
          - echo "Heroku Publish Done"
          - echo "??? How to execute 'heroku container:release web -a $HEROKU_APP_NAME'"
        artifacts:
          - HEROKU_DOCKER_IMAGE_ID

管道脚本运行良好,结果如下:

  1. 我可以构建 docker 镜像
  2. Docker 登录 Heroku 注册表
  3. 将 docker build 推送到 Heroku 注册表中
  4. 从 Heroku 注册表获取我的应用程序的最后推送的图像

Heroku 使用最新上传的 docker 镜像更新正在运行的应用程序所需的最后一步。如果使用 PowerShell,命令是:

heroku container:release web -a <<app-name>>

但是由于这个进程在 Bitbucket 管道中运行,因此没有 Heroku CLI 可以执行(我尝试添加 Heroku npm,但这些包已被弃用)。

我还尝试使用 shell 脚本 (.sh) 进行平台 API 容器注册表和运行时(Docker 部署):

#!/usr/bin/env bash

curl -n -X PATCH https://api.heroku.com/apps/$HEROKU_APP_NAME/formation \
-d '{
    "updates": [
        {
            "type": "web",
            "docker_image": "'"$HEROKU_DOCKER_IMAGE_ID"'"
        }
    ]
}' \
-H "Content-Type: application/json" \
-H "Accept: application/vnd.heroku+json; version=3.docker_releases" \
-H "Authorization: Bearer $HEROKU_API_KEY"

这也无法使用最新的 docker 镜像更新我的 Heroku 应用程序(CURL 结果是 HTTP 200OK,没有错误)

我期待执行最后一个命令的解决方案

heroku container:release web
以更新 Bitbucket 管道中的 Heroku 应用程序。

heroku bitbucket-pipelines heroku-cli heroku-api
1个回答
0
投票

从 Bitbucket Pipelines 部署到 Heroku 的规范机制是使用 Atlassian 的管道而不是任何 API 或 CLI:

https://bitbucket.org/product/features/pipelines/integrations?p=atlassian/heroku-deploy

pipelines:
  branches:
    develop:
      - step:
          name: Docker Build
          services:
            - docker
          caches:
            -  docker
          script:
            - docker build -t $HEROKU_APP_NAME .
            - docker login --username=_ --password=$HEROKU_API_KEY registry.heroku.com
            - docker tag $HEROKU_APP_NAME registry.heroku.com/$HEROKU_APP_NAME/web
            - docker push registry.heroku.com/$HEROKU_APP_NAME/web
      - step:
          name: Heroku Deploy
          deployment: development
          script:
            - pipe: atlassian/heroku-deploy:2.1.0
              variables:
                HEROKU_API_KEY: '<string>'
                HEROKU_APP_NAME: '<string>'
                # ... checkout the docs

如果您不想使用管道,我建议您研究一个包含 Heroku CLI 的镜像 https://hub.docker.com/search?q=heroku-cli 或自行构建。

atlassian/default-image
图像只是缺少 Heroku 工具。它是多种语言和工具的混搭,你通常会想要避免。

© www.soinside.com 2019 - 2024. All rights reserved.