Heroku:如何在 gitlab CI/CD 中发布现有图像?

Posted

技术标签:

【中文标题】Heroku:如何在 gitlab CI/CD 中发布现有图像?【英文标题】:Heroku: How to release an existing image in gitlab CI/CD? 【发布时间】:2018-11-27 07:40:49 【问题描述】:

我想将我的应用程序部署为来自 Gitlab CI/CD 管道的容器。

几天前,我可以按照 heroku devCenter 中的说明部署我的 docker 映像。

docker login --username=_ --password=$(heroku auth:token) registry.heroku.com

并将其推送到 heroku 注册表。

docker 标签 imageregistry.heroku.com/app/process-type

docker push registry.heroku.com/app/process-type

但随后他们分两步更改了部署

heroku 硬币容器:推送

heroku 容器:发布

在更新之前,它是在容器被推送到容器注册表时部署的。现在我需要以任何方式释放它。

我尝试将映像重命名为 release 并尝试安装 heroku CLI,但后来我无法登录 heroku 注册表。

你是怎么解决的?

【问题讨论】:

我也有同样的问题,你找到答案了吗? 我尝试了很多东西,但什么都没有。如果您找到解决方案,请在此处发布。 【参考方案1】:

这是我昨天找到的一个可行的解决方案,它触发了发布。您可以使用 docker 保留您的部署,只需将这个小脚本添加到您的管道中。

#!/bin/bash
imageId=$(docker inspect registry.heroku.com/$YOUR_HEROKU_APP/web --format=.Id)
payload='"updates":["type":"web","docker_image":"'"$imageId"'"]'
curl -n -X PATCH https://api.heroku.com/apps/$YOUR_HEROKU_APP/formation \
-d "$payload" \
-H "Content-Type: application/json" \
-H "Accept: application/vnd.heroku+json; version=3.docker-releases" \
-H "Authorization: Bearer $YOUR_HEROKU_API_KEY"

此解决方案来自 Kai tödter,您可以在 https://toedter.com/2018/06/02/heroku-docker-deployment-update/ 找到它

【讨论】:

当 $ ./heroku-container-release.sh 我总是得到:/bin/sh: eval: line 77: ./heroku-container-release.sh: Permission denied。你知道我可以尝试什么吗? 我似乎无法正确获取 image_id。我不断收到:“消息”:“找不到该泊坞窗图像。”。我使用了我的图像名称“网络”。我错过了什么?【参考方案2】:

这是一种简单的方法:

#.gitlab-ci.yml
..............
deploy_stage:
stage: deploy
tags:
- docker
only:
- master
script:
- docker login --username=_ --password=$HEROKU_API_KEY registry.heroku.com
- docker pull $CONTAINER_IMAGE:staging
- docker tag $CONTAINER_IMAGE:staging registry.heroku.com/django-cloud/web
- docker push registry.heroku.com/django-cloud/web
- docker run --rm -e HEROKU_API_KEY=$HEROKU_API_KEY wingrunr21/alpine-heroku-cli container:release web --app django-cloud

参考:https://gitlab.com/Banzyme2/django-cloud9-dokcer

【讨论】:

以上是关于Heroku:如何在 gitlab CI/CD 中发布现有图像?的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab CI/CD 如何在管道中捕获 curl 响应

如何在 Maven GitLab CI/CD 管道中将 JaCoCo 报告 HTML 转换为 PDF

如何使用GitLab和Rancher构建CI/CD流水线 – Part 2

Gitlab CI/CD 中的秘密检测

如何使用 CI/CD 为 Gitlab 注册表推送基于 docker compose 的图像

如何将 gitlab ci/cd 变量传递给 kubernetes(AKS) deployment.yaml