Первый опыт непрерывной разработки вместе с phpci

Тема непрерывной разработки крутилась у меня в голове очень давно, только до перехода на git как-то не было повода все это настроить, да и не очень то и получилось бы, только представьте процесс непрерывной интеграции через фтп 😀

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

К решительным действиям меня подтолкнуло участие в одном немалом проекте переезда с drupal 6 на 7. Так как часть функционала была успешно переписана нужно было мигрировать весь контент и для проверки правильности миграции был настроен jenkins. Ежедневные билды с автозаливкой последнего успешного била, ммм, просто прекрасно. Но использовать такую массивную махину как дженкинс не очень то и хочется, к тому же ставить ради него java тоже. У меня уже есть опыт с redmine, gitlab и настройкой ruby на сервере, ну уж нет, еще и java туда, не не не! Так что нужно было найти что-то еще, более родное…

Во времена когда мы в компании еще не перешли свой git сервер сначала смотрели на внешние сервисы, но т.к. цены на bitbucket и github хоть и низкие но не на столько то пришлось искать альтернативы. И альтернатива быстро нашлась в лице gitlab. С сервером интеграции то же самое, подходящий нашелся быстро и, в отличии от остальных, написан на php (они даже так на своем сайте и написали, в разделе чем он лучше других). И имя ему PHPCI. Конечно проект только развивается, но уже кое-что умеет, хоть и некоторые ошибки приходится исправлять ручками, но ничего страшного, все же на родном пэхапэ.

Система довольно простая, ставиться легко, настраивается тоже, использует composer для установки плагинов из админки, умеет ставить плагины из админки, В общем имеет уйму достоинств. И выглядит уютно. Вот скрин для затравки:

phpci screenshot

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

Ох, забыл сказать, система сейчас проверят только код стандарты через phpcs, phpmd и phpcpd. Большего нам пока и не нужно. Дальше планирую запускать автотесты, ну, как только наши два с половиной тестировщика их научаться писать.

Недавно побывав на друпал кемпе и послушав доклад подарка о том как они поднимали общий уровень в команде. Да, по их опыту если я правильно помню ушло где-то пол года, у нас пока не все так плохо, еще они использовали более жесткие вещи, такие как pull-request, а у нас пока на добровольной основе. Ну в целом результат вышел неплохой. Если сравнить проект без сниферов и с ними то в первом случае на 5.5 тысяч строк кода (учитываются только кастомные модули и тема) в среднем >200 ошибок код стандартов,  и говно-кода, сейчас же стремится к нолю. Но пока только пару проектов было и один в процессе. Такое радужное чувство когда понимаешь что вот-вот и начнешь гордится проектами, а там смотри и проекты пойдут такие что даже начнешь на свои сайты заходить.

По правде говоря это только первый шаг, дальше автоматизация. Судя по списку issue в phpci многие хотят deploy, и скорее всего получат (сам попытаюсь помочь). Хотя сейчас из коробки есть плагин которые копирует удачный билд в папку на сервере, что уже неплохо, ну и можно указать bash команды которые запускаются при удачном или неудачном исходе билда. Так я, например, настроил оповещение в hangout и отправку письма тому кто сломал билд и копию ПМу.

Вот в принципе и все чем хотел порадовать, очень советую настроить и себе. Сейчас расскажу как.

Первый опыт непрерывной разработки вместе с phpci: 4 комментария

  1. Евгений

    Есть один не ясный момент. Когда делается миграция Yii через shell, в этой миграции большое количество inserts. Так вот — запросы прошли на вставку, а в самом phpci идет очень долгое отображение сообщений о каждом проделанном insert. То есть делается так:

    — «ls console/migrations/»
    — «php yii migrate —interactive=0»

    В БД уже все запросы прошли на вставку, а PHPCI все еще по 2-3 строчки отрисовывает.

    (1136510,1,’Иннокентьевка’,’Партизанский район’,’Красноярский край’,0),
    (1136511,1,’Иннокентьевский’,’Партизанский район’,’Красноярский край’,0),
    (1152876,1,’Иннокентьевка’,’Лесозаводский район’,’Приморский край’,0),
    (1153525,1,’Иннялы’,’Ленский улус’,’Саха /Якутия/’,0),

    Как это можно ускорить, чтобы быстрее отрисовывалась информация?

    1. zviryatko Автор записи

      Ну если у тебя там лог который тебе не нужен, то можешь спрятать с помощью > /dev/null 2>&1, или написать патч который бы пофиксил это 😉

      1. Евгений

        Ну он не прячется вроде как, со стороны Yii делается вывод без настройки
        public function execute($sql, $params = [])
        {
        echo » > execute SQL: $sql …»;
        $time = microtime(true);
        $this->db->createCommand($sql)->bindValues($params)->execute();
        echo ‘ done (time: ‘ . sprintf(‘%.3f’, microtime(true) — $time) . «s)\n»;
        }

        Патч писать для PHPCI?

        Сейчас только как вариант это использовать вроде

        public function batchInsert($table, $columns, $rows)
        {
        echo » > insert into $table …»;
        $time = microtime(true);
        $this->db->createCommand()->batchInsert($table, $columns, $rows)->execute();
        echo ‘ done (time: ‘ . sprintf(‘%.3f’, microtime(true) — $time) . «s)\n»;
        }
        Но это требует в моем случае парсинг и перевод строчной SQL в массив.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *