2016-05-29 34 views
6

Mam aplikację Railsową hostowaną na gitlab.com i konfiguruję ją do wdrożenia w heroku zgodnie z tym przewodnikiem: http://docs.gitlab.com/ce/ci/examples/test-and-deploy-ruby-application-to-heroku.html. To działa dobrze.Gitlab CI - wdrażanie w Heroku i uruchamianie migracji

Moje pytanie brzmi, w jaki sposób mogę uruchomić migracje za każdym razem, gdy wdrażam system w heroku? Podczas wdrażania poprzez CLI będzie zwykle zrobić:

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

ale stosując gitlab-ci.yml nie mam pojęcia, jak to zrobić ...

+0

można udostępnić co gitlab-ci.yml nie skończy się? – geoboy

+1

Skończyło się na przykładzie zaakceptowanej odpowiedzi. –

Odpowiedz

10

Jeśli chcesz mieć możliwość korzystania z pełną moc interfejsu CLI Heroku w procesie GitLab CI (włączając w to awarię kompilacji, jeśli migracja nie powiedzie się z dowolnego powodu), możesz także wypróbować to podejście, które zainstaluje interfejs CLI Heroku i dostarczy kody statusu poleceń Heroku z powrotem do GitLab , a także, oczywiście, wyjście wiersza poleceń. Korzystanie z heroku run bez poświadczeń w wierszu poleceń wymaga ustawienia zmiennej środowiskowej HEROKU_API_KEY na klucz, który ma dostęp do aplikacji, o której mowa.

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 

Właściwie uruchamiam moje testy na instancji Heroku, aby mieć pewność, że środowisko jest dokładnie takie samo. To tutaj naprawdę się przydaje.

+0

To uratowało moje zdrowie psychiczne, nie jestem zadowolony z zaakceptowanej odpowiedzi, ponieważ stare API to EOL wkrótce. –

+0

Wszystko zmienia się szybko w Internecie. :-) –

7

Informacje zawarte w tej odpowiedzi może być nieaktualny . Poniżej znajdują się odpowiedzi na oba pytania i pamiętaj, aby zaktualizować odpowiedzi, które są aktualne, aby pomóc przyszłym odwiedzającym.

oto próbka .yml Mam który biegnie moich testów następnie przekazywane do etapu Heroku (dla pchnięć mistrz oddziału) lub produkcji (dla znaczników popycha)

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

Poleceniem w 'bundle exec rails db: migrate' powinno być' rake' zamiast 'rails'. Poza tym wydaje się, że jest w porządku. Dzięki! –

+0

oh przepraszam za to. Używam Rails 5, który przeniósł wszystkie polecenia rake na tory. :-) –

+0

może nie wszystkie rake ale zadania i testy. http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#use-bin-rails-for-running-tasks-and-tests –

5

Aby zaktualizować odpowiedź @ huesforalice, ten będzie również pracować dla nowego Heroku CLI, która zastąpiła Heroku Toolbelt w listopadzie 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