Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
- 6. Проблемы?
● Пришел новый человек и ему нужно объяснить как собирается проект
● Надо обновить библиотеку т.к. старая версия небезопасна
● Билд сервер упал со скалы
● За билд сервером со скалы прыгнул единственный человек который
знает как это собирать для продакшена
- 9. Package manager conan find cmake api
Conanfile
Описание
зависимостей
findsomething.cmake
findboost.cmake
Информация где находятся
зависимости
Cmakelists
find_package
Уже собранные зависимости
- 11. Проблемы? Решены только две
● Пришел новый человек и ему нужно объяснить как собирается проект
● Надо обновить библиотеку т.к. старая версия небезопасна
● Билд сервер упал со скалы
● За билд сервером со скалы прыгнул единственный человек который
знает как это собирать для продакшена
● Версия GCC, Conan, Cmake
- 12. Docker
Что такое докер?
● Это не виртуальная машина.
● Это песочница
● способ описывать окружение в виде файлов
● возможность иметь везде одинаковое окружение
● способ изолировать ваше приложение от неявных зависимостей
- 14. Docker
Dockerfile для сборки
FROM centos:7.6.1810
COPY yum_packages.txt /tmp/yum_packages.txt
RUN xargs -a /tmp/yum_packages.txt yum install -y
ENV BOOST_ROOT=/home/devel/boost_1_60_0
USER=devel
- 15. Docker
Для работы с контейнером нужно 2 простых команды
docker build -t pcf_docker ./docker
docker run --rm -v $(pwd):/home/devel/build_dir -v /tmp:/tmp pcf_docker
./buildscript.sh
- 16. Docker
Но иногда приходится писать так
docker run --privileged --dns=1.1.1.1 --rm -v $(pwd):/home/devel/build_dir -v
/tmp:/tmp pcf_docker bash -c "snmpd; rsyslogd; ./docker/copy_mibs.sh; cd
/home/devel/build_dir/pcf; (su devel -c './buildscript.sh $command;')"
- 18. Можно:
Присоединяться к запущенному контейнеру и выполнять параллельно gdb
через docker exec
Запускать GDB в контейнере и открывать порт
Главное дать нужные параметры при запуске контейн��ра
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined
Дебаг
- 19. CLion: удаленное подключение к контейнеру по ssh, закачивание исходников,
скачивание хедеров для быстрого локального резолва
VSCode: запуск серверной части внутри контейнера
Подсветка
- 20. Пример из VSCode: devcontainer.json
{
name": "kam",
"dockerFile": "../docker/dockerfile",
"runArgs":
["-u","1000","--cap-add=SYS_PTRACE","--security-opt","seccomp=unconfined"],
"extensions": ["ms-vscode.cpptools"]
}
Docker
- 27. Как это выглядит
build:
stage: build
script: - ./buildscript.sh docker make
test:
stage: test
script: - bash ./buildscript.sh docker run_tests
only: - merge_requests
- 28. Второе решение - Гит хуки
В них обычно проверяют:
● Валидность коммита (jira task)
● Форматирование
- 30. Евенты
В них обычно используют:
● Статический анализ
● Форматирование
● Деплой
● Прогон тестов если это занимает много времени
- 38. Теперь ошибки не влияют на систему, но мы слишком поздно понимаем что
все плохо
Проблемы?
- 43. Пишем письмо человеку который сломал билд
Последнему автору мерж реквеста
Дублируем письмо команде
Метрики
- 46. Docker контейнер для приложения
Dockerfile
Установи Cmake
Собери Boost
Скачай libxml
Docker image
Собранный образ готовый к
запуску сторонних приложений
Общая папка
Исходники
Кеш сборки
Docker image и есть
артефакт сборки
- 47. Отличия от контейнера для сборки:
● Минимальный размер
весь tmp остается за бортом контейнера
● Отсутствие лишнего
нет не используемых инструментов
● Простота использования
снаружи передается только несколько конфигурационных параметров
Docker контейнер для приложения
- 50. Kubernetes
kubectl create -f podtemplate.yml
POD template yaml
metadata:
name
labels: пары ключ значение
container: название контейнера
POD
Контейнер управляемый kubernetes
- 68. Вася
Вася ошибся в коде, за него это нашел статический анализатор и отправил
ему письмо. Почини вот тут.
Прошел месяц, он быстро фиксил баг и не запустил все тесты, а тесты
сломались… все
Через месяц он изменил систему конфигурации приложения и опечатался.
Проблема локализована во время замены одного тестового сервера и ни
один клиент не был затронут.
Потом всю команду уволили, ведь они теперь не обладают тайными
знаниями как все должно работать, знания документированы рядом с кодом.