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?
To deploy your Docker image to Heroku, simply run one command in the directory of your Dockerfile: $ heroku container:push web === Building web Step 1 : FROM alpine:latest ... Successfully built 74bab4bf0df3 === Pushing web The push refers to a repository [registry.heroku.com/yourapp/web] c8821d626157: Pushed ...
When you release your Docker images, by running heroku container:release , your release phase process type needs to be specified: $ heroku container:release web release Releasing images web,release to your-app-name... done Running release command... Migrating database.
It makes GitLab, on every push, use Node. js docker runner to deploy the app to Heroku. To make the deployment we'll use DPL (more information about Travis), that is, a deploy tool made for continuous deployment that will help us to deploy our app to Heroku.
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/
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With