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

Transcript

16 slides
  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 Материалы

More Decks by Sobolev Nikita

Other Decks in Programming