首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将码头容器从外部注册表部署到Heroku

将码头容器从外部注册表部署到Heroku
EN

Stack Overflow用户
提问于 2017-03-05 17:30:44
回答 2查看 5.8K关注 0票数 11

我在gitlab上托管了项目存储库。我正在使用gitlab从我的项目构建码头容器。我想要实现的是将这个容器部署到heroku。

我试图从这个问题中找到解决方案:如何使用Jhipster、Docker、Gitlab和Heroku构建、测试和部署

下面是我的.gitlab-ci.yaml的样子:

代码语言:javascript
复制
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

我想要达到的目标有三个阶段:

  • 构建:此时,只编译npm项目(在未来,我想在这里添加一些jar )
  • 包:创建并推送到注册表码头形象。
  • 部署:在heroku上安装docker映像。

我遇到了最后阶段(deploy)的问题。老实说,我不太确定这里该做些什么。

对于本教程:https://docs.gitlab.com/ce/ci/examples/test-and-deploy-ruby-application-to-heroku.html,我尝试使用dpl。

我在试图运行码头形象时遇到了一些问题

代码语言:javascript
复制
$ docker run registry.gitlab.com/maciejsobala/myApp:latest
/bin/bash: line 49: docker: command not found

我在这里完全瞎了。我会非常感谢任何解决方案,链接到文章/教程等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-05 22:42:10

您启动应用程序的原因(使用docker run),您可能不需要。dpl工具用于代码库内部,而不是用于映像部署。就像你说的

代码语言:javascript
复制
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坞注册中心。简而言之,你做的是

代码语言:javascript
复制
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注册表会触发应用程序的发布过程。

票数 13
EN

Stack Overflow用户

发布于 2018-11-02 23:14:49

其原因

“没有这样的图像:Regiy.gitlab.com/username/ image: tag”

错误是标记源应该被提前提取。脚本块应该包括一个docker pull语句。整个脚本块应该如下:

代码语言:javascript
复制
  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容器注册中心就不会再触发发布了。下面是完成缺少的发布任务的额外命令:

代码语言:javascript
复制
    - docker run --rm -e HEROKU_API_KEY=<YOUR-HEROKU-AUTH-TOKEN> wingrunr21/alpine-heroku-cli container:release web --app myApp
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42611622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档