2017-03-05 160 views
4

我得到了托管在gitlab上的项目存储库。我正在使用gitlab-ci从我的项目中构建docker容器。我想实现的是将该容器部署到heroku。从外部注册表部署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 

我所试图实现的是,有3个阶段:

  • 构建:此时,只编译npm项目(今后我想在这里添加一些jar
  • 包:创建并推送到注册表泊坞镜像。
  • 部署:在heroku上安装docker镜像。

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

我试图DPL使用,关于本教程:试图运行搬运工图像

$ docker run registry.gitlab.com/maciejsobala/myApp:latest 
/bin/bash: line 49: docker: command not found 

我完全看不清这里的时候https://docs.gitlab.com/ce/ci/examples/test-and-deploy-ruby-application-to-heroku.html

Unfornatelly我遇到的问题。我真的很感激任何解决方案,指向文章/教程的链接等。

+0

为您完成“build_image”工作,并在您的Gitlab注册表中创建一个全新的图像? –

+0

@DavidSteiman:是的。 –

回答

5

由于某种原因(使用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 

是工作,什么手段你的亚军是能够运行在码头工人码头工人,并成功推动图像。根据the official heroku documentation,对于heroku部署,您只能将该映像推送到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注册表触发应用的释放过程。

+0

嗨我试过这个,但我不断收到以下错误: 来自守护进程的错误响应:没有这样的图像:registry.gitlab.com/username/image:tag 有关如何解决此问题的任何想法? –

+0

您应该将您的配置指向您的实际容器注册表。目前您使用默认值,明显指向不存在的图像 –