Почему я не могу обновить свое приложение heroku через gitlab CI - PullRequest
0 голосов
/ 21 апреля 2020

Я начал возиться с Героку docker и Django. Я следовал инструкциям учебника, и все отлично работает. Мое приложение на Heroku, но я не могу обновить свое приложение. Согласно учебному пособию, когда я отправляю свой новый код в Gitlab sh, конвейер запускается, и он развертывает новый код в моем приложении в Heroku. Несмотря на то, что конвейер не передает никаких изменений в моем приложении Heroku, что я делаю не так?

Вот мой .gitlab-ci.yml:

image: docker:stable
services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay2
  HEROKU_APP_NAME: myapp
  HEROKU_REGISTRY_IMAGE: registry.heroku.com/${HEROKU_APP_NAME}/web

stages:
  - build_and_deploy

build_and_deploy:
  stage: build_and_deploy
  script:
    - apk add --no-cache curl
    - docker login -u _ -p $HEROKU_AUTH_TOKEN registry.heroku.com
    - docker pull $HEROKU_REGISTRY_IMAGE || true
    - docker build
        --cache-from $HEROKU_REGISTRY_IMAGE
        --tag $HEROKU_REGISTRY_IMAGE
        --file ./Dockerfile
        "."
    - docker push $HEROKU_REGISTRY_IMAGE
    - chmod +x ./release.sh

И это релиз. sh

#!/bin/sh

IMAGE_ID=$(docker inspect ${HEROKU_REGISTRY_IMAGE} --format={{.Id}})
PAYLOAD='{"updates": [{"type": "web", "docker_image": "'"$IMAGE_ID"'"}]}'

curl -n -X PATCH https://api.heroku.com/apps/"${HEROKU_APP_NAME}"/formation \
  -d "${PAYLOAD}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/vnd.heroku+json; version=3.docker-releases" \
  -H "Authorization: Bearer ${HEROKU_AUTH_TOKEN}"

И последнее, но не менее важное: последние сообщения конвейера, так как я думаю, что остальные из них не имеют отношения к моему вопросу.

Successfully built dbd1d36dea04
Successfully tagged registry.heroku.com/gollem/web:latest
$ docker push $HEROKU_REGISTRY_IMAGE
The push refers to repository [registry.heroku.com/gollem/web]
569b9f7da69f: Preparing
3dba57770497: Preparing
6f76eda67156: Preparing
ef56c01e8a45: Preparing
16542a8fc3be: Preparing
6597da2e2e52: Preparing
977183d4e999: Preparing
c8be1b8f4d60: Preparing
6597da2e2e52: Waiting
977183d4e999: Waiting
c8be1b8f4d60: Waiting
16542a8fc3be: Layer already exists
ef56c01e8a45: Layer already exists
6f76eda67156: Layer already exists
977183d4e999: Layer already exists
6597da2e2e52: Layer already exists
c8be1b8f4d60: Layer already exists
569b9f7da69f: Pushed
3dba57770497: Pushed
latest: digest: sha256:df5aced032043ca4cfbe35c103a0bdbebab4460fee02b69d88541b96222b1e19 size: 1996
$ chmod +x ./release.sh
Running after_script
00:02
Saving cache
00:01
Uploading artifacts for successful job
00:02
Job succeeded

РЕДАКТИРОВАТЬ: Похоже, gitlab-ci.yml никогда не выполнял релиз. sh скрипт. Поэтому я добавил sh release.sh в конце скрипта.

image: docker:stable
services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay2
  HEROKU_APP_NAME: myapp
  HEROKU_REGISTRY_IMAGE: registry.heroku.com/${HEROKU_APP_NAME}/web

stages:
  - build_and_deploy

build_and_deploy:
  stage: build_and_deploy
  script:
    - apk add --no-cache curl
    - docker login -u _ -p $HEROKU_AUTH_TOKEN registry.heroku.com
    - docker pull $HEROKU_REGISTRY_IMAGE || true
    - docker build
        --cache-from $HEROKU_REGISTRY_IMAGE
        --tag $HEROKU_REGISTRY_IMAGE
        --file ./Dockerfile
        "."
    - docker push $HEROKU_REGISTRY_IMAGE
    - chmod +x ./release.sh
    - sh release.sh

1 Ответ

0 голосов
/ 21 апреля 2020

при развертывании через Реестр контейнеров Heroku рабочий процесс обычно выглядит следующим образом:

docker build -t myImage .
docker tag myImage registry.heroku.com/appname/web
docker push registry.heroku.com/appname/web
heroku container:release web -a appname

Я посмотрел учебник, и действительно есть эти шаги (см. Подход № 1: Реестр контейнеров), в моем примере Я помечаю изображение после сборки, но учебник объединяет 2 вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...