我在gitlab上托管了项目存储库。我正在使用gitlab-ci从我的项目构建docker容器。我想要实现的是将该容器部署到heroku。
我试图按照这个问题解决问题:How to build, test and deploy using Jhipster, Docker, Gitlab and Heroku
以下是我.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_KEY
我想要实现的是,有三个阶段:
jar
我遇到了最后一个阶段的问题(deploy
)。说实话,我不太确定,应该在这里做些什么。
我尝试使用dpl,关于本教程:https://docs.gitlab.com/ce/ci/examples/test-and-deploy-ruby-application-to-heroku.html
Unfornatelly我在尝试运行docker image时遇到了问题
$ docker run registry.gitlab.com/maciejsobala/myApp:latest
/bin/bash: line 49: docker: command not found
我在这里完全失明。我真的很感激任何解决方案,链接到文章/教程等。
答案 0 :(得分:8)
您出于某种原因(使用docker run
)启动了应用,但您可能并不需要。 dpl
工具旨在用于代码库,而不是用于映像部署。如你所说
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
正在运行,这意味着你的跑步者能够在码头工具中运行码头并成功推送图像。对于heroku部署,您必须根据the official heroku documentation将该图像推送到heroku docker注册表。总之,你做了一个
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
使用您的heroku身份验证令牌,您可以通过heroku auth:token
如文档中所述,推送到herokus注册表会触发应用程序的发布过程。
答案 1 :(得分:2)
原因
“没有这样的图片:registry.gitlab.com/username/image:tag”
错误是标签源应事先拉出。脚本块应包含docker pull
语句。总体脚本块应如下所示:
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:latest
但这还不够。 Heroku更改了其发布策略,因此推送到Heroku Container Registry不再触发发布。这是完成丢失的发布任务的额外命令:
- docker run --rm -e HEROKU_API_KEY=<YOUR-HEROKU-AUTH-TOKEN> wingrunr21/alpine-heroku-cli container:release web --app myApp