Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

How to build solid CI-CD pipeline / Илья Беда (beda.software)

232 views

Published on

РИТ++ 2017, Root Conf
Зал Конгресс-холл, 6 июня, 15:00

Тезисы:
http://rootconf.ru/2017/abstracts/2551.html

На основе своего опыта работы в консалтинге я расскажу, как избавить разработчиков от рутинных задач и как сэкономить на ресурсах команды с помощью правильно настроенного CI-CD pipeline.

Единствено верный способ упаковки приложений - это Docker-контейнеры, благодаря этому способу вы сможете унифицировать процесс деплоя. Нужно деплоить приложения с помощью Ansible-плейбука, запакованного в Docker-контейнер, это снижает требования к окружению CI-ранера. Вам нужен только Docker.
...

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

How to build solid CI-CD pipeline / Илья Беда (beda.software)

  1. 1. Беда Илья
  2. 2. Кто я • лет коммерческого программирования • лет разработки • года работаю в своей компании • года занимаюсь
  3. 3. Начнем с истории
  4. 4. Путь от хаоса к упорядоченности Админские корни
  5. 5. Путь от хаоса к упорядоченности Админские корни Ручное управление инфраструктурой
  6. 6. Путь от хаоса к упорядоченности Админские корни Ручное управление инфраструктурой Разработка веб приложений
  7. 7. Путь от хаоса к упорядоченности Админские корни Ручное управление инфраструктурой Разработка веб приложений Попытки автоматизации
  8. 8. Знакомство со злобным монстром
  9. 9. Рутина изматывает
  10. 10. Как решить эту проблему
  11. 11. Решение номер раз делегируй
  12. 12. Кто знает анекдот про двух сантехников
  13. 13. Учись а то так и будешь ключи подавать
  14. 14. Всего лишь человек
  15. 15. Я тебе два титановых шарика давал
  16. 16. Давал
  17. 17. Где они
  18. 18. Всего лишь человек
  19. 19. Решение номер два автоматизируй
  20. 20. Позабыты хлопоты остановлен бег Вкалывают роботы а не человек
  21. 21. Автодеплои
  22. 22. Залог успешной автоматизации унификация
  23. 23. проблем создают нестандартных фич
  24. 24. проблем создают нестандартных фич
  25. 25. Все хотят делать нестандартных фич
  26. 26. Нужен компромисс
  27. 27. Без Винни Пуха торжественно произнес Кролик все предприятие будет невозможным
  28. 28. Без Винни Пуха торжественно произнес Кролик все предприятие будет невозможным
  29. 29. — СУЙ В ДОКЕРА ЕГО, СЫН МОЙ, КОНТЕЙНЕР ВСЁ СТЕРПИТ! @orthocoding
  30. 30. позволяет абстрагироваться от содержимого контейнера
  31. 31. Важные замечания
  32. 32. Важное замечание № Нужно и разрабатывать и деплоить с помощью докера
  33. 33. Важное замечание № Нужно доставлять образы на сервера через
  34. 34. Приложение мы упаковали а что дальше то
  35. 35. Что такое я вам конечно же рассказывать не буду
  36. 36. - name: run {{ application }} web container docker_container: name: "{{ application }}" image: "{{ image }}" env: "{{ env }}" log_driver: syslog networks: - { name: production_network } restart_policy: on-failure
  37. 37. - name: run {{ application }} web container docker_container: name: "{{ application }}" image: "{{ image }}" env: "{{ env }}" log_driver: syslog networks: - { name: production_network } restart_policy: on-failure
  38. 38. - name: run {{ application }} web container docker_container: name: "{{ application }}" image: "{{ image }}" env: "{{ env }}" log_driver: syslog networks: - { name: production_network } restart_policy: on-failure
  39. 39. - name: run {{ application }} web container docker_container: name: "{{ application }}" image: "{{ image }}" env: "{{ env }}" log_driver: syslog networks: - { name: production_network } restart_policy: on-failure
  40. 40. - name: run {{ application }} web container docker_container: name: "{{ application }}" image: "{{ image }}" env: "{{ env }}" log_driver: syslog networks: - { name: production_network } restart_policy: on-failure
  41. 41. - name: run {{ application }} web container docker_container: name: "{{ application }}" image: "{{ image }}" env: "{{ env }}" log_driver: syslog networks: - { name: production_network } restart_policy: on-failure
  42. 42. - name: run {{ application }} web container docker_container: name: "{{ application }}" image: "{{ image }}" env: "{{ env }}" log_driver: syslog networks: - { name: production_network } restart_policy: on-failure
  43. 43. - name: run {{ application }} web container docker_container: name: "{{ application }}" image: "{{ image }}" env: "{{ env }}" log_driver: syslog networks: - { name: production_network } restart_policy: on-failure
  44. 44. Как передать в параметры {{ application }} {{ image }} {{ env }}
  45. 45. Как передать в параметры vars: application: "{{ lookup('env', 'APPLICATION') }}" image: "{{ lookup('env', 'IMAGE') }}" env: "{{ lookup('env', 'APP_ENV')|as_dict }}"
  46. 46. Как запустить в
  47. 47. Запускаем из
  48. 48. Запускаем из docker run --rm --env SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY" --env AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID" --env AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY" --env APPLICATION="$APPLICATION" --env IMAGE="$IMAGE" --env APP_ENV="$APP_ENV" ansible_container
  49. 49. Запускаем из docker run --rm --env SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY" --env AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID" --env AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY" --env APPLICATION="$APPLICATION" --env IMAGE="$IMAGE" --env APP_ENV="$APP_ENV" ansible_container
  50. 50. Запускаем из docker run --rm --env SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY" --env AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID" --env AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY" --env APPLICATION="$APPLICATION" --env IMAGE="$IMAGE" --env APP_ENV="$APP_ENV" ansible_container
  51. 51. Запускаем из docker run --rm --env SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY" --env AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID" --env AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY" --env APPLICATION="$APPLICATION" --env IMAGE="$IMAGE" --env APP_ENV="$APP_ENV" ansible_container
  52. 52. Мы умеем деплоить но кто запустит этот процесс
  53. 53. Семь бед один ответ
  54. 54. пакет Семь бед один ответ
  55. 55. Весь процесс разработки собран вместе Начиная от создания таски до выкладки её на сервер видно что и как было сделано
  56. 56. Полный контроль
  57. 57. Полный контроль Каждому проекту можно выделить свой ранер
  58. 58. Полный контроль Каждому проекту можно выделить свой ранер Каждому шагу сборки можно выделить отдельный ранер
  59. 59. Полный контроль Каждому проекту можно выделить свой ранер Каждому шагу сборки можно выделить отдельный ранер Конфиг в разработчик управляет логикой сборки и деплоя
  60. 60. Разработчику лог билда Менеджеру красивая диаграммка
  61. 61. Ну давай давай подтолкнул его кролик прикрывая рот лапкой
  62. 62. Структура проекта
  63. 63. А где собственно
  64. 64. Интеграционные тесты
  65. 65. Интеграционные тесты Проекты подключены подмодулями
  66. 66. Ручной запуск деплоя или запуск по триггеру
  67. 67. Ручной запуск деплоя или запуск по триггеру Решать вам
  68. 68. Что же ещё осталось
  69. 69. Политика версионирования релизов
  70. 70. Версионирование веб проектов переоценено
  71. 71. Плавающих релизов вполне достаточно
  72. 72. Не нужно откатываться назад если ты можешь быстро выкатить релиз с фиксом
  73. 73. В исключительном случае всегда можно сделать ветку и выкатить ее в ручном режиме
  74. 74. Теперь мы готовы к бою со злобным монстром ЗАДЕПЛОЙ
  75. 75. Ваши вопросы

×