Heroku: How to release an existing image in gitlab CI/CD?
Asked Answered
B

2

5

I would like to deploy my application as a container from Gitlab CI/CD pipeline.

A few days ago I could deploy my docker image as written in the heroku devCenter.

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

and pushed it to the heroku registry.

docker tag imageregistry.heroku.com/app/process-type

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

But then they changed the deploy in 2 steps

heroku cointainer:push

heroku container:release

Before the update it was deployed when the container was pushed into the container registry. Now I need to release it in any way.

I tried to rename the image to release and tried to install heroku CLI but then I cannot log into heroku registry.

How did you solve it?

Border answered 18/6, 2018 at 12:43 Comment(2)
I have the same question, did you found an answer ?Matzo
I tried a lot more things but couldn't reach anything. If you find a solution please post it here.Border
M
8

Here's a working solution I found yesterday which trigger a release. You can keep your deployment with docker and just add this little script to your pipeline.

#!/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"

This solution comes from Kai tödter and you can find it at https://toedter.com/2018/06/02/heroku-docker-deployment-update/

Matzo answered 2/7, 2018 at 23:51 Comment(2)
When $ ./heroku-container-release.sh i always get: /bin/sh: eval: line 77: ./heroku-container-release.sh: Permission denied. Do you know what I could try?Border
I can't seem to get the image_id right. I Keep getting: "message": "Couldn't find that docker image.". I used my image name, "web". I'm I missing something?Taxi
P
3

Here's one simple way of doing it:

#.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

Ref: https://gitlab.com/Banzyme2/django-cloud9-dokcer

Pythian answered 15/8, 2018 at 17:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.