作者:博艺 | 来源:互联网 | 2023-02-09 20:40
我在gitlab上托管了项目存储库.我正在使用gitlab-ci从我的项目构建docker容器.我想要实现的是将该容器部署到heroku.
我试图遵循这个问题的解决方案:如何使用Jhipster,Docker,Gitlab和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
我想要实现的是,有3个阶段:
build:此时,只编译npm项目(以后我想在jar
这里添加一些)
package:创建并推送到注册表docker镜像.
部署:在heroku上安装docker镜像.
我遇到了最后阶段的问题(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
我在这里完全失明了.我真的很感激任何解决方案,链接到文章/教程等.
1> David Steima..:
您出于某种原因启动应用程序(使用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文档,对于heroku部署,您只能将该图像推送到heroku docker注册表.总之,你做了一个
deploy_to_heroku:
stage: deploy
services:
- docker:dind
script:
- docker login --email=_ --username=_ --password= 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注册表会触发应用程序的发布过程.