Continuous integration для C++ разработчика

  • Поток 4
  • Очно
  • 10:00
  • RU

А мы построим свой CI с conan и travis
Вводная
В головах разработчиков бытует мнение, что их работа заканчивается после того, как они закомитили код, а весь остальной процесс их вовсе не касается. В ответ на этот тезис хорошо подходит цитата Роберта Хайнлайна:
Любой человек должен уметь менять пеленки, планировать вторжения, резать свиней, конструировать здания, управлять кораблями, писать сонеты, вести бухгалтерию, возводить стены, вправлять кости, облегчать смерть, исполнять приказы, отдавать приказы, сотрудничать, действовать самостоятельно, решать уравнения, анализировать новые проблемы, побросать навоз, программировать компьютеры, вкусно готовить, хорошо сражаться, достойно умирать.
Специализация — это удел насекомых.
И взамен упомянутого выше устаревшего мнения мы выдвинем свой тезис - тот факт, что код сбирается на машине разработчика не интересует никого! Наша цель - сделать следующий шаг навстречу непрерывной интеграции (CI, англ. Continuous integration) и автоматизировать разрешение зависимостей, сборку и модульное тестирование под все целевые платформы.
Непрерывная интеграция
Непрерывной интеграцией называют практику, по которой разработчики периодически (читай: ежедневно) вливают результаты своей работы в основную ветку кода. Впервые данная практика была предложена в методе Буча. Позднее в методологии экстремального программирования она обросла автоматическим прогоном модульных тестов. Своё дальнейшее развитие данная практика получила в виде непрерывной доставки (CD, англ. Continuous delivery) — процесса, в ходе которого после прохождения приёмочных тестов автоматически собирается дистрибутив, готовый к отгрузке заказчику. И уже в самом конце можно говорить об непрерывном развертывании (CD, англ. Continuous deployment), в ходе которого все изменения, прошедшие тестирование, автоматически отправляются в продакшн. Если вы уже запутались, то можете представить себе следующую последовательность:
1. Continuous integration
2. Continuous delivery
3. Continuous deployment
В рамках данного мастер-класса мы будет говорить об CI применительно к разработке на C++.
Предварительные требования
От Вас нужно:
- умение программировать на C++ (спасибо, Кэп!);
- laptop c любой ОС;
- один из компиляторов: Visual Studio >= 2015, g++ >= 5.4, clang++ >= 3.9, Xcode >= 8.0;
- CMake >= 3.6 (нужно понимать синтаксис CMakeLists.txt);
- Git >= 2.10;
- Python >= 3.5;
- pip3 >= 9.0;
- учетная запись на github.com;
- учетная запись на travis-ci.org (привязанная к github);
- учетная запись на appveyor.com (привязанная к github);
- учетная запись на conan.io;
- учетная запись на sprintbox.ru
Часть первая - github
В первой части будем предполагать, что вы пишете домашний проект, работаете над open source или можете хранить исходные коды на стороннем ресурсе и готовы за это заплатить.
Какие задачи Вы научитесь решать:
- как автоматизировать сборку под Linux и macOS с помощью Travis CI;
- как автоматизировать сборку под Windows с помощью AppVeyor;
- как управлять зависимостями с помощью Conan;
- как автоматизировать запуск модульных тестов под все платформы;
- как автоматически собирать с разными конфигурациями и версиями компиляторов;
- как создавать собственные пакеты для Conan (первый шаг к CD).
Часть вторая - self hosted gitlab
Во второй части мы рассмотрим ситуацию, когда у Вас рабочий проект с закрытым исходным кодом и вы не хотите сильно зависеть от неподконтрольной инфраструктуры (vendor lock).
Какие задачи Вы научитесь решать:
- как быстро развернуть GitLab на Sprintbox;
- как настроить GitLab CI для вашего проекта;
- как настроить хранение conan пакетов.
Заключение

Павел Филонов

Research Development Team Lead, Kaspersky Lab, Москва, Россия

Участвовал в разработке систем Max Patrol SIEM в роли С++ разработчика и Kaspersky MLAD в роли Data Scientist'а. Член программного комитете конференции C++ Russia. Специализируется на темах CI/ML/performance.