我正在尝试为我的 .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
管道脚本运行良好,结果如下:
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 应用程序。
从 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 工具。它是多种语言和工具的混搭,你通常会想要避免。