Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Непрерывное развёртывание Phoenix-приложений

Непрерывное развёртывание Phoenix-приложений

Евгений Куртов: Доставка и развёртывание являются неотъемлемой частью разработки ПО, мы рассмотрим создание автоматизированного конвейера внедрения Phoenix приложения покрытого интеграционными и Unit-тестами с помощью Docker и Jenkins CI: http://elixir-lang.moscow/events/2/talks/nepreryvnoe-razvertyvanie-phoenix-prilozhenij

Sobolev Nikita

October 25, 2016
Tweet

More Decks by Sobolev Nikita

Other Decks in Programming

Transcript

  1. Определение терминов Continuous Integration - "Практика разработки ПО когда каждая

    интеграция проверяется автоматической сборкой(включая тестирование)" Acceptance testing - Высокоуровневое поведение системы выраженное в пользовательских сценариях Continuous Delivery - "Возможность выкатить изменения в эксплуатацию быстро, безопасно и в рачительной манере" Deployment pipeline - "Автоматизированное выражение процесса доставки ПО от исходного кода до момента получения пользователем" [2] [3] [1] Feature testing - Совместное тестирование связанных компонентов
  2. Тестирование В независимости от выбранной библиотеки взаимодействие с сервером происходит

    через узел Selenium. Он может либо запускаться вместе со сборкой либо работать постоянно
  3. Контейнеризация Доставка вспомогательных сервисов на этапе тестирования Собственный Docker Hub

    Подсказка: используйте "Docker inside Docker" или задавайте уникальные имена сети и портов для избегания конфликта ресурсов
  4. Pipeline as Code node { try { stage 'Checkout' deleteDir()

    checkout scm bitbucketStatusNotify(buildState: 'INPROGRESS') stage 'Start docker' // ... stage 'Setup' // ... stage 'Tests' parallel unit: { wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) { sh 'mix test' } }, acceptance: { wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) { sh """ # ... """ } }, failFast: false } catch { bitbucketStatusNotify (buildState: 'FAILED') } finally { Stage 'Cleanup' //... bitbucketStatusNotify (buildState: 'SUCCESSFUL') } }
  5. Советы 1. Установите BASH интепретатором по умолчанию 2. Переносите артефакты

    сборки и зависимости 3. Используйте ${EXECUTOR_NUMBER} для уникальных значений 4. Используйте генератор фрагментов Pipeline-as-Code 5. Держите BASH-скрипты внутри VCS
  6. Неперерывное развёртывание Инициирование запуска последующей задачи в случае успешного выполнения

    текущей Запуск Предзборочные задачи Сборка Послесборочные задачи
  7. Сборка выпуска Автоматическая передача Git commit в вызываемую задачу Кэширование

    по желанию Сборка OTP релиза / создание контейнера Доставка Миграции / Обновления кода
  8. Ссылки 1. Continuous Delivery: Anatomy of the Deployment Pipeline 2.

    http://martinfowler.com/articles/continuousIntegration.html 3. https://continuousdelivery.com/ 1. 2. http://blog.terranillius.com/post/docker_testing/ 3. Docker inside Docker - https://www.dockerbook.com/ 4. https://bitbucket.org/lessless/jerm/overview 5. 6. 7. 8. "Elixir in Action", Manning Publications, авт. Saša Jurić Integrate with BitBucket: build after each commit Release Management with Exrm and Conform Real World Elixir Deployment Fast Continuous Deployment of an Elixir Gameserver Материалы