Как развернуть приложение rails на героку от travis-ci?

Есть ли способ развернуть приложение heroku rails после успешной сборки travis-ci?

4 ответа

Решение

Travis CI теперь имеет встроенную поддержку для развертывания в Heroku: http://about.travis-ci.org/blog/2013-07-09-introducing-continuous-deployment-to-heroku/

Я только что реализовал этот случай с моим приложением. Это на самом деле не так сложно сделать, но требует некоторых шагов:

  1. Тебе нужен твой герой API ключ
  2. Посмотрите эту суть для примера .travis.yml и получить travis_deployer.rb скрипт
  3. Затем установите гем travis, посмотрите ответ на другой вопрос о том, как защитить ваш ключ API.
    • Если вас это не волнует, просто используйте пример из приведенного выше.
    • Бежать travis encrypt your_username/your_repo HEROKU_API_KEY=<your key here>
    • Скопируйте результат в свой .travis.yml в разделе env -> global

travis_deployer.rb файл заботится о ключах ssh и удаленной ветке для героку.

Если вы выполнили все эти шаги, вы .travis.yml может выглядеть так:

env:
  global:
    - secure: "1u21hjnmHjkghduUIJhhs76saljlkajdlfhGhgdJgfaVtgasfLLmNBnb87dad="

after_success:
  - gem install heroku
  - yes | ruby travis_deployer.rb
  - heroku keys:clear
  - yes | heroku keys:add
  - git push heroku master

Вот версия, которую я нашел в блоге Марка Бейтса. Это похоже на Оди, просто это зависит от after_script в вашем .travis.yml файл один.

  1. Прежде всего, используйте функцию Travis для шифрования переменных среды, чтобы ваши секретные ключи API оставались защищенными:

    gem install travis
    travis encrypt username/repository HEROKU_API_KEY=YOUR_HEROKU_API_KEY
    
  2. Затем добавьте следующее к вашему .travis.yml файл:

    env:
      global:
        - secure: YOUR_SECURED_HEROKU_API_KEY
    after_script:
      # Install the Heroku gem (or the Heroku toolbelt)
      - gem install heroku
      # Add your Heroku git repo:
      - git remote add heroku git@heroku.com:YOUR_HEROKU_APP.git
      # Turn off warnings about SSH keys:
      - echo "Host heroku.com" >> ~/.ssh/config
      - echo "   StrictHostKeyChecking no" >> ~/.ssh/config
      - echo "   CheckHostIP no" >> ~/.ssh/config
      - echo "   UserKnownHostsFile=/dev/null" >> ~/.ssh/config
      # Clear your current Heroku SSH keys:
      - heroku keys:clear
      # Add a new SSH key to Heroku
      - yes | heroku keys:add
      # Push to Heroku!
      - yes | git push heroku master
    
  3. И все готово: внесите свои новые изменения и наслаждайтесь развертыванием в Heroku через TravisCI.


Изменить: Если вы получаете какие-либо ошибки на travis encrypt, это может быть вашим решением.

Я только думал о таком сценарии, хотя я не рассматривал Heroku как платформу выбора. Во всяком случае, это то, что я придумал:

  1. Запросы на извлечение идут в ветку "разработка"
  2. Трэвис протестирует запрос на извлечение для вас
  3. Если мы собираемся развернуть то, что в данный момент находится в стадии "разработки" - люди извлекают запрос, просматривают и объединяют его в ветку "релиз / кандидат"
  4. Тесты Трэвиса снова объединены
  5. После того, как тест по этой ветке пройден - заставьте Travis создать запрос на извлечение, ориентированный на "выпуск / производство" (возможно, написать оболочку для GitHub API для создания фактической формы запроса на извлечение Travis).
  6. В зависимости от того, хотим ли мы на самом деле развернуть или нет, человек сливается (в "выпуск / производство") или закрывает запрос на извлечение, созданный из Travis
  7. У вас должен быть хост развертывания или каждый из хостов приложения (если у вас их много и вы не хотите иметь SPF) для отслеживания ветви "выпуск / производство".

Я уверен, что вы могли бы реализовать приложение Heroku, которое будет выполнять роль хоста развертывания или что-то еще более сумасшедшее.

Кроме того, вы можете попробовать, чтобы Travis уведомлял вас через IRC и имел на стороне клиента другого бота IRC, который будет иметь доступ к вашему личному SSH-ключу и отправит Heroku, вы также можете реализовать интерфейс подтверждения с помощью частный разговор с вашим собственным ботом или интерфейсом GUI со скриптом с надписью "Вперед!" кнопка. Если вы не такой старый, вы можете использовать Hubot для этой цели.

Кстати, вы можете также ввести какую-то промежуточную ветку или что-то еще, что вам нравится, между некоторыми из вышеперечисленных шагов. Вам, вероятно, также следует использовать теги, и при откате нужно просто вставить известный рабочий тег в "выпуск / производство", откуда он будет выбран вашим сценарием развертывания.

Другие вопросы по тегам