2017-03-05 157 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

您應該將您的配置指向您的實際容器註冊表。目前您使用默認值,明顯指向不存在的圖像 –