Tengo un repositorio de proyectos alojado en gitlab. Estoy usando gitlab-ci para construir un contenedor docker desde mi proyecto. Lo que me gustaría lograr es implementar ese contenedor en heroku.
Estaba tratando de seguir la solución de esta pregunta: Cómo construir, probar e implementar usando Jhipster, Docker, Gitlab y Heroku
Así es como se ve mi .gitlab-ci.yaml :
stages: - build - package - deploy build_npm: image: node:latest stage: build script: - npm install - npm run build:prod artifacts: paths: - dist/ build_image: image: docker:latest services: - docker:dind stage: package script: - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com - docker build -t registry.gitlab.com/maciejsobala/myApp . - docker push registry.gitlab.com/maciejsobala/myApp:latest deploy_to_heroku: stage: deploy services: - docker:dind script: - gem install dpl - docker run registry.gitlab.com/maciejsobala/myApp:latest - dpl --provider=heroku --app= myApp --api-key=$HEROKU_API_KEYLo que estoy tratando de lograr es tener 3 etapas:
jar aquí) Tengo problemas con la última etapa ( deploy ). Para ser honesto, no estoy muy seguro de lo que se debe hacer aquí.
Traté de usar dpl, con respecto a este tutorial: https://docs.gitlab.com/ce/ci/examples/test-and-deploy-ruby-application-to-heroku.html
Desafortunadamente, tengo problemas al intentar ejecutar la imagen de la ventana acoplable
$ docker run registry.gitlab.com/maciejsobala/myApp:latest /bin/bash: line 49: docker: command not foundEstoy completamente ciego aquí. Realmente agradecería cualquier solución, enlaces a artículos/tutoriales, etc.
Está iniciando la aplicación por alguna razón (usando docker run ) que quizás no necesite. La herramienta dpl está diseñada para usarse dentro de una base de código, en lugar de para la implementación de imágenes. Como dijiste
build_image: image: docker:latest services: - docker:dind stage: package script: - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com - docker build -t registry.gitlab.com/maciejsobala/myApp . - docker push registry.gitlab.com/maciejsobala/myApp:latestestá funcionando, lo que significa que su corredor puede ejecutar la ventana acoplable en la ventana acoplable y empujar imágenes con éxito. Para la implementación de heroku, solo debe insertar esa imagen en el registro docker de heroku, de acuerdo con la documentación oficial de heroku . En resumen, haces un
deploy_to_heroku: stage: deploy services: - docker:dind script: - docker login --email=_ --username=_ --password=<YOUR-HEROKU-AUTH-TOKEN> registry.heroku.com - docker tag registry.gitlab.com/maciejsobala/myApp:latest registry.heroku.com/maciejsobala/myApp:latest - docker push registry.heroku.com/maciejsobala/myApp:latest con su token de autenticación de heroku, que puede obtener con heroku auth:token
Como se dice en la documentación, presionar el registro de herokus desencadena un proceso de lanzamiento de la aplicación.
La razón por
"No existe tal imagen: registration.gitlab.com/username/image:tag"
el error es que la fuente de la etiqueta debe extraerse de antemano. El bloque de secuencias de comandos debe incluir una declaración de extracción de la docker pull . El bloque de script general debe ser el siguiente:
script: - docker login --email=_ --username=_ --password=<YOUR-HEROKU-AUTH-TOKEN> registry.heroku.com - docker pull registry.gitlab.com/maciejsobala/myApp:latest - docker tag registry.gitlab.com/maciejsobala/myApp:latest registry.heroku.com/maciejsobala/myApp:latest - docker push registry.heroku.com/maciejsobala/myApp:latestTodavía esto no es suficiente. Heroku cambió su política de lanzamiento para que la inserción en Heroku Container Registry ya no active un lanzamiento. Aquí está el comando adicional para cumplir con la tarea de liberación faltante:
- docker run --rm -e HEROKU_API_KEY=<YOUR-HEROKU-AUTH-TOKEN> wingrunr21/alpine-heroku-cli container:release web --app myApp