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

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


person danielgatis    schedule 19.04.2012    source источник
comment
Я только что посмотрел, и кажется, вы можете написать скрипт для установки драгоценного камня heroku, а затем иметь другой скрипт для входа в систему on_sucess и выполнить git push heroku master. Подробности об этом понятия не имеют, и я просто предполагаю, что это возможно   -  person Ismael    schedule 19.04.2012
comment
Ага! но как обращаться с ключами ssh на travis-ci?   -  person danielgatis    schedule 20.04.2012
comment
Я думаю, что один из ответов ниже заслуживает принятия, @danielgatis. Я использовал информацию из ответов @Odi и @Marius Butuc, чтобы запустить непрерывное развертывание. Я добавлю здесь для справки, что, поскольку я использую гемы, которые требуют от меня установки config.assets.initialize_on_precompile = true в application.rb, мне обычно приходилось предварительно компилировать свои активы перед ручным развертыванием в Heroku. После запуска $ heroku labs:enable user-env-compile -a YOUR_HEROKU_APP мне не нужно было запускать rake assets:precompile в моем .travis.yml. Я просто надеюсь, что Heroku сохранит эту функциональность.   -  person Paul Fioravanti    schedule 23.12.2012
comment
Кроме того, для справки другим, если вы запускаете набор тестов и хотите развернуть его на Heroku только в том случае, если набор тестов пройден (а не в случае сбоя), измените after_script выше на after_success в ответах ниже.   -  person Paul Fioravanti    schedule 24.12.2012


Ответы (4)


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

person Konstantin Haase    schedule 09.07.2013

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

  1. Вам нужен ваш ключ API heroku
  2. Посмотрите эту суть для примера .travis.yml и получите скрипт travis_deployer.rb
  3. Then install the travis gem, see the answer to another question on how to secure your API key.
    • If you don't care about it, just use the example from gist above.
    • Беги travis encrypt your_username/your_repo HEROKU_API_KEY=<your key here>
    • Скопируйте результат в свой .travis.yml в разделе env -> global

Файл travis_deployer.rb отвечает за ключи ssh и удаленную ветку для heroku.

Если вы выполнили все эти шаги, ваш .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
person Odi    schedule 11.10.2012
comment
Вам следует изменить after_script на after_success, иначе вы рискуете развернуть неработающий код. - person Ivan; 23.04.2013
comment
В итоге я использовал это, за исключением того, что вместо того, чтобы делать keys:clear, я добавил это в конце: - for i in $(grep '[^\ ]*$' ~/.ssh/id_rsa.pub -o); do heroku keys:remove $i;done Который должен просто удалить только что добавленный ключ и ничего больше. Это означает, что если вы используете эту учетную запись для локальной разработки, вам не нужно постоянно добавлять свой ключ для каждого развертывания. - person Ryan; 11.06.2013

Вот версия, которую я нашел в блоге Марка Бейтса. Он похож на Odi, только опирается на 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 [email protected]: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, это может быть вашим решением.

person Marius Butuc    schedule 15.12.2012
comment
что я могу сделать со своей сборкой, чтобы предоставить то, что она просит? когда Трэвис проанализирует мой .travis.yml и доберется до ключей heroku: ясно, я вижу следующий код, и я не знаю, как указать адрес электронной почты heroku-cli: Installing CLI... 22.44MB/22.44MB Enter your Heroku credentials. Email: - person Afolabi Olaoluwa Akinwumi; 08.10.2016

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

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

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

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

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

person errordeveloper    schedule 24.05.2012