Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: danielgatisОтветов: 4

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

  • Я только что посмотрел, и кажется, вы можете написать скрипт для установки драгоценного камня heroku, а затем иметь другой скрипт для входа в систему on_sucess и выполнить git push heroku master. Подробности об этом понятия не имеют, и я просто предполагаю, что это возможно Ismael 19.04.2012
  • Ага! но как обращаться с ключами ssh на travis-ci? danielgatis 20.04.2012
  • Я думаю, что один из ответов ниже заслуживает принятия, @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. Я просто надеюсь, что. Paul Fioravanti 23.12.2012
  • Кроме того, для справки другим, если вы запускаете набор тестов и хотите развернуть его на Heroku только в том случае, если набор тестов пройден (а не в случае сбоя), измените after_script выше на after_success в ответах ниже. Paul Fioravanti 24.12.2012

continuous-integrationruby-on-railsherokutravis-ci

Ответы

Ответ 1 · рейтинг 9 · Konstantin Haase

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

Ответ 2 · рейтинг 5 · Odi

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

  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

Ответ 3 · рейтинг 2 · Marius Butuc

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

Ответ 4 · errordeveloper

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

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

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы