Расскажи про опыт работы с CI/CD

«Расскажи про опыт работы с CI/CD» — вопрос из категории DevOps, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я настраивал CI/CD пайплайны для проектов на C++ с использованием GitLab CI/CD и GitHub Actions. Основная цель — автоматизация сборки, тестирования и анализа кода для каждого коммита или пулл-реквеста.

Типичный стек для C++ проекта:

  • Система сборки: CMake.
  • Компиляторы: GCC, Clang (сборка под разные платформы и стандарты).
  • Тестирование: Google Test (GTest) или Catch2.
  • Статический анализ: Clang-Tidy, Cppcheck.
  • Форматирование: Clang-Format.
  • Артефакты: Загрузка собранных бинарников или создание Docker-образов.

Пример конфигурации .gitlab-ci.yml:

stages:
  - build
  - test
  - analyze

variables:
  GIT_SUBMODULE_STRATEGY: recursive

.build-template: &build-template
  stage: build
  script:
    - mkdir -p build && cd build
    - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-Werror" ..
    - cmake --build . --parallel

build-gcc:
  <<: *build-template
  image: gcc:12

build-clang:
  <<: *build-template
  image: clang:15

unit-tests:
  stage: test
  image: gcc:12
  script:
    - mkdir -p build && cd build
    - cmake -DBUILD_TESTS=ON ..
    - cmake --build . --parallel
    - ./bin/runUnitTests

clang-tidy:
  stage: analyze
  image: silkeh/clang:15
  script:
    - mkdir -p build && cd build
    - cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
    - run-clang-tidy -checks='*' -warnings-as-errors='*'

На проекте это позволило быстро выявлять ошибки компиляции, регрессии в тестах и проблемы со стилем кода, значительно повысив надежность процесса разработки.

Видео-ответы