2016-05-29 24 views
6

私はgitlab.comでホストされているRails Appを持っています。このガイドに従ってherokuに展開するように設定しています:http://docs.gitlab.com/ce/ci/examples/test-and-deploy-ruby-application-to-heroku.html。それはうまく動作します。Gitlab CI - Herokuへの展開と移行の実行

私は英雄に配備するたびにどのように移行を実行できますか? CLI経由で展開する場合、私は通常どうなる:

git push heroku master && heroku run rake db:migrate 

が、私はこれを行う方法のか見当もつかないgitlab-ci.ymlを使用して...

+0

あなたがで終わるんでした何gitlab-ci.yml共有できますか? – geoboy

+1

私は受け入れられた答えの例を使って終わりました。 –

答えて

10

(タグのプッシュ)Herokuの段階(マスターブランチをプッシュするために)、または生産にプッシュ走る持つサンプル.ymlですあなたのGitLab CIプロセスのHeroku CLIのフルパワー(何らかの理由で移行が失敗した場合にビルドに失敗するなど)、Heroku CLIをインストールしてHerokuコマンドのステータスコードをGitLabに送り返すこともできますもちろん、コマンドライン出力も含まれます。コマンドラインで資格情報なしでheroku runを使用する場合は、環境変数HEROKU_API_KEYを問題のアプリにアクセスできるキーに設定する必要があります。

before_script: 
    - echo "deb http://toolbelt.heroku.com/ubuntu ./" > /etc/apt/sources.list.d/heroku.list 
    - wget -O- https://toolbelt.heroku.com/apt/release.key | apt-key add - 
    - apt-get update 
    - apt-get install -y heroku-toolbelt 
    - gem install dpl 

stages: 
    - deploy 

test_on_heroku: 
    type: deploy 
    script: 
    - dpl --provider=heroku --app=my_heroku_app --api-key=$HEROKU_API_KEY 
    - heroku run <your command here> --exit-code --app my_heroku_app 

実際に私のテストはHerokuのインスタンスで実行されていますが、環境はまったく同じです。これが本当に便利な場所です。 huesforaliceの答え@更新する

+0

これは私の正気を保存しました。古いAPIはEOLであるため、私は受け入れられた答えに満足できませんすぐに。 –

+0

インターネット上で物事が急速に変化します。 :-) –

7

この回答に記載されている情報は古くなっている可能性があり。下記の両方の回答を参照し、将来の訪問者を支援するために最新の回答をupvoteすることを忘れないでください。ここ

は、私はそれはあなたが使用できるようにしたい場合は、私のテストは、その後

image: "ruby:2.3" 

test: 
    script: 
    - apt-get update -qy 
    - apt-get install -y nodejs 
    - gem install bundler 
    - bundle install -j $(nproc) --without production 
    - bundle exec rails db:create RAILS_ENV=test 
    - bundle exec rails db:migrate RAILS_ENV=test 
    - bundle exec rails RAILS_ENV=test 

staging: 
    type: deploy 
    environment: staging 
    script: 
    - gem install dpl 
    - dpl --provider=heroku --app=$HEROKU_STAGING_APP_NAME --api-key=$HEROKU_API_KEY 
    - "curl -n -X POST https://api.heroku.com/apps/$HEROKU_STAGING_APP_NAME/ps -H \"Accept: application/json\" -H \"Authorization: Bearer ${HEROKU_API_KEY}\" -d \"command=bundle exec rails db:migrate\"" 
    only: 
    - master 

production: 
    type: deploy 
    environment: production 
    script: 
    - gem install dpl 
    - dpl --provider=heroku --app=$HEROKU_PRODUCTION_APP_NAME --api-key=$HEROKU_API_KEY 
    - "curl -n -X POST https://api.heroku.com/apps/$HEROKU_PRODUCTION_APP_NAME/ps -H \"Accept: application/json\" -H \"Authorization: Bearer ${HEROKU_API_KEY}\" -d \"command=bundle exec rails db:migrate\"" 
    only: 
    - tags 
+0

'bundle exec rails db:migrate'のコマンドは、' rails'ではなく 'rake'でなければなりません。それ以外は大丈夫と思われる。ありがとう! –

+0

ああ申し訳ありません。私はすべてのレーキコマンドをレールに移動したRails 5を実行しています。 :-) –

+0

多分レーキではなく、タスクとテスト。 http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#use-bin-rails-for-running-tasks-and-tests –

5

、これはまた、2016年11月にHerokuのツールベルトを交換し、新たなHerokuのCLI、のために働くだろう:

before_script: 
    - apt-get update 
    - apt-get install apt-transport-https 
    - echo "deb https://cli-assets.heroku.com/branches/stable/apt ./" > /etc/apt/sources.list.d/heroku.list 
    - wget -O- https://cli-assets.heroku.com/apt/release.key | apt-key add - 
    - apt-get update 
    - apt-get install -y heroku 
    - gem install dpl 

staging: 
    type: deploy 
    variables: 
    HEROKU_API_KEY: $HEROKU_STAGING_API_KEY 
    script: 
    - dpl --provider=heroku --app=$HEROKU_STAGING_APP --api-key=$HEROKU_STAGING_API_KEY 
    - heroku run rails db:migrate --exit-code --app $HEROKU_STAGING_APP 
    only: 
    - master 

production: 
    type: deploy 
    variables: 
    HEROKU_API_KEY: $HEROKU_PRODUCTION_API_KEY 
    script: 
    - dpl --provider=heroku --app=$HEROKU_PRODUCTION_APP --api-key=$HEROKU_PRODUCTION_API_KEY 
    - heroku run rails db:migrate --exit-code --app $HEROKU_PRODUCTION_APP 
    only: 
    - tags