$30 off During Our Annual Pro Sale. View Details »

Izhevsk PHP Meetup #2. На пути в continuous delivery. Автодеплой

Izhevsk PHP Meetup #2. На пути в continuous delivery. Автодеплой

Александр Лёвин, разработчик, Пиком
Расскажу об истории моих непростых отношений с деплоем. Об эволюции от ручного деплоя к автоматическому. И, конечно, не забуду рассказать моём текущем варианте деплоя и планах его развития.

Izhevsk PHP Meetup

April 27, 2017
Tweet

More Decks by Izhevsk PHP Meetup

Other Decks in Technology

Transcript

  1. На пути к continuous delivery.
    Автодеплой

    View Slide

  2. Алекснадр Лёвин
    email: [email protected]
    skype: alzasr
    языки: PHP, JS, C, C++ etc

    View Slide

  3. Варианты деплоя:
    ● Ручной
    ● git pull + composer install
    ● deploy.sh (баш скрипт)
    ● Самописный инструмент
    ● Готовый инструмент
    ● ...

    View Slide

  4. Ручной деплой
    Минусы
    ● Долго
    ● Можно что-то забыть
    ● Лень делать бэкап
    Плюсы
    ● Пока не обнаружил

    View Slide

  5. Git pull + composer install
    Плюсы
    ● Меньше ручной работы
    ● Какая-никакая возможность откатиться
    Минусы
    ● Бэкапы не полноценны
    ● Не обновляет файлы вне версионного контроля
    ● Возможен длительный даунтайм

    View Slide

  6. Deploy.sh
    Плюсы
    ● Все автоматически
    ● Мало зависимостей
    Минусы
    ● Платформозависимость
    ● Много кода

    View Slide

  7. Самописный инструмент
    Плюсы
    ● Можно заточить под собственные нужды
    ● Можно использовать любимый PHP/Python/etc
    Минусы
    ● Вместо 1 проекта 2
    ● Теперь еще и инструмент надо деплоить

    View Slide

  8. Готовый инструмент
    Плюсы
    ● Зависит от инструмента, но в основном одни
    плюсы
    Минусы
    ● Чужой код - чужие баги.

    View Slide

  9. Надо использовать готовый
    инструмент.
    Что делать? Как выбрать?

    View Slide

  10. Мои критерии хорошего деплоя
    ● Автоматизация (человек лишь наблюдатель)
    ● Бэкапы
    ● Без даунтайма
    ● Декларативный вид скрипта деплоя
    ● Кросплатформенность
    ● Обновление скрипта деплоя через деплой
    ● Работа с git
    ● ...

    View Slide

  11. Что хранить в хранилище git
    ВСЕ НЕОБХОДИМОЕ ДЛЯ РАЗВЕРТЫВАНИЯ
    ● Конфигурации и настройки
    ● composer.json + composer.lock
    ● cron.tab
    ● настройки для других сервисов (Monit/Munin/
    etc)
    ● Сам скрипт деплоя
    ● etc...

    View Slide

  12. Деплой инструменты
    ● Phing
    ● Capistrano

    View Slide

  13. PHING
    PHING - PHing Is Not GNU make
    PHING это Apache Ant на PHP
    сайт - https://www.phing.info/
    github - https://github.com/phingofficial/

    View Slide

  14. Варианты установки
    Composer
    {"require-dev": {"phing/phing": "2.*"}}
    PEAR
    pear channel-discover pear.phing.info

    pear install [--alldeps] phing/phing
    PHAR
    http://www.phing.info/get/phing-latest.phar

    View Slide

  15. Features
    ● скрипт деплоя - простой XML файл
    ● богатый набор задач из коробки
    ● легкая расширяемость через классы PHP
    ● кроссплатформенность
    ● не требует внешних зависимостей
    ● работает на PHP7

    View Slide




  16. task list for target "devel"


    task list for target "prod"


    task list for target "qa"


    Структура скрипта деплоя

    View Slide

  17. Файловая организация
    /var/deploy/phing.phar - phing
    /var/deploy/phing.xml - скрипт деплоя
    /var/deploy/gitsource/ - папка git хранилища
    /var/project/- папка проекта
    /var/backups/ - папка для бэкапов

    View Slide































  18. #получение даты и времени
    #блок инициализации переменных
    #резервное копирование
    #работа с git
    #сборка проекта во временную
    папку
    #Настройка
    #Обновление скрипта деплоя
    #миграции
    #выкат новой вресии

    View Slide

  19. Переменные цели







    View Slide

  20. Резервное копирование





    View Slide

  21. Работа с GIT
    branchname="${git_branch}" />
    source="origin" refspec="${git_branch}" />

    View Slide

  22. Сборка проекта во временную папку








    View Slide

  23. Настройка

    mode="0777" />

    View Slide

  24. Обновление скрипта деплоя

    View Slide

  25. Миграции

    View Slide

  26. Выкат



    View Slide

  27. Запуск
    >cd /var/deploy
    >php phar.php -f phing.xml prod
    Buildfile: /var/deploy/project.xml
    project > prod:
    [echo] enjoy
    BUILD FINISHED
    Total time: 0.0699 seconds

    View Slide

  28. Автоматизация
    На целевом сервере:
    deploy.sh из котором запускается
    php phing.phar /var/deploy/phing.xml
    пользователь deployer с правами запуска deploy.sh
    в /home/deploy/.ssh/authorized_keys ключ
    пользователя который будет запускать деплой
    удаленно

    View Slide

  29. /var/git/project/hooks/post-receive
    #/usr/bin/php
    $remoteHost = 'xxx.xxx.xxx.xxx';
    $resData = '';
    while(($data = fgets(STDIN)) !== false) {
    $resData .= $data;
    }
    $params = explode(' ', $resData);
    $branch = trim(array_pop($params));
    if ($branch === 'refs/heads/prod') {
    echo 'start deploy devel' . "\n";
    exec('ssh deployer@' . $remoteHost .
    ' "deploy.sh"',$res);
    echo implode("\n", $res);
    } else {
    echo 'not deploy';
    }
    На сервере хранилища (origin)

    View Slide

  30. Планы
    ● Автодеплой для Битрикс
    ● Авторолбэк (откат до последней рабочей версии)
    ● Автодеплой через FTP (наверно надо capistrano)

    View Slide

  31. ВОПРОСЫ

    View Slide