2016-05-29 21 views
6

Ho un'app per Rails ospitata su gitlab.com e la sto configurando per la distribuzione in heroku seguendo questa guida: http://docs.gitlab.com/ce/ci/examples/test-and-deploy-ruby-application-to-heroku.html. Funziona bene.Gitlab CI - distribuire a Heroku ed eseguire migrazioni

La mia domanda è, come posso eseguire le migrazioni ogni volta che eseguo la distribuzione su heroku? Quando si distribuisce via CLI Io di solito faccio:

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

ma utilizzando gitlab-ci.yml Non ho nessuna idea su come fare questo ...

+0

Puoi condividere ciò che gitlab-ci.yml hai fatto a finire con? – geoboy

+1

Ho finito per usare l'esempio della risposta accettata. –

risposta

10

Se si vuole essere in grado di utilizzare Tutta la potenza della CLI di Heroku nel tuo processo GitLab CI (incluso il fallimento della build se una migrazione fallisce per qualsiasi ragione), puoi anche provare questo approccio che installerà la CLI di Heroku e fornirà i codici di stato dei comandi di Heroku a GitLab , oltre naturalmente all'output della riga di comando. L'utilizzo di heroku run senza credenziali sulla riga di comando richiede che la variabile di ambiente HEROKU_API_KEY sia impostata su una chiave che ha accesso all'app in questione.

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 

realtà ho eseguito i miei test su un'istanza Heroku per essere sicuri, l'ambiente è esattamente lo stesso. Questo è dove questo è davvero utile.

+0

Questo mi ha salvato la sanità mentale, non mi sento a mio agio con la risposta accettata poiché la vecchia API è EOL presto. –

+0

Le cose cambiano velocemente su internet. :-) –

7

Le informazioni contenute in questa risposta potrebbe non essere aggiornato . Si prega di vedere entrambe le risposte di seguito, e ricordarsi di revocare le risposte aggiornate per aiutare i futuri visitatori.

Ecco un esempio .yml ho che corre i miei test poi spinto a Heroku stadio (per spinte filiali master) o la produzione (per i tag spinge)

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

Il comando in 'bundle exec rails db: migrate' dovrebbe essere' rake' invece di 'rails'. A parte questo sembra essere ok. Grazie! –

+0

oh mi dispiace per quello. Sono in esecuzione Rails 5 che ha spostato tutti i comandi di rastrello in binari. :-) –

+0

forse non tutto rake ma compiti e test. http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#use-bin-rails-for-running-tasks-and-tests –

5

Per aggiornare la risposta di @ huesforalice, questo sarebbe anche lavorare per il nuovo Heroku CLI, che ha sostituito Heroku Toolbelt nel mese di novembre 2016:

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 
Problemi correlati