0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · Урок

Фильтрация по путям и выборочные сборки

Запускайте только те рабочие процессы и задания, на которые повлияли изменения, используя фильтры путей, обнаружение изменений и условные матрицы в монорепозиториях и конфигурациях с несколькими репозиториями

«Фильтрация по путям и выборочные сборки» — бесплатный урок CI/CD with GitHub Actions & DevOps Pipelines на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CI/CD with GitHub Actions & DevOps Pipelines, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CI/CD with GitHub Actions & DevOps Pipelines содержит 4 уроков всего.

Проблема напрасных сборок

В монорепозитории изменение документации не должно приводить к повторной сборке и повторному развёртыванию серверной части, клиентской части и мобильного приложения.

Выборочные сборки запускают только затронутые изменением части конвейера, экономя время и минуты работы исполнителей.

Фильтры путей для триггеров

Самый простой подход — фильтр paths у триггера. Рабочий процесс запускается только при изменении файлов, соответствующих шаблону.

on:
  push:
    paths:
      - 'services/api/**'

Игнорирование путей

Можно сделать и наоборот с помощью paths-ignore: запускать рабочий процесс для всех путей, кроме перечисленных.

Это удобно, чтобы не запускать CI при изменениях только в документации.

on:
  push:
    paths-ignore:
      - 'docs/**'
      - '**.md'

Ограничения фильтров триггеров

Фильтры на уровне триггера определяют, будет ли запущен весь рабочий процесс. Но в монорепозитории часто нужен один рабочий процесс, который решает, какие задания запускать.

Для этого изменения обнаруживают внутри рабочего процесса и выбирают ветвь выполнения по результату.

Действие для обнаружения изменений

Действие dorny/paths-filter анализирует различия и выдаёт логические значения для каждой именованной группы путей.

Последующие задания считывают эти результаты и решают, нужно ли им запускаться.

  - uses: dorny/paths-filter@v3
    id: changes
    with:
      filters: |
        api:
          - 'services/api/**'
        web:
          - 'services/web/**'

Условный запуск заданий по обнаруженным изменениям

Задание обнаружения предоставляет результаты; последующие задания используют if с контекстом needs, чтобы запускаться условно.

  build-api:
    needs: detect
    if: needs.detect.outputs.api == 'true'
    runs-on: ubuntu-latest
    steps:
      - run: ./build-api.sh

Подключение результатов

Задание обнаружения должно объявить outputs, передающие результаты фильтра, чтобы другие задания могли их считывать.

  detect:
    runs-on: ubuntu-latest
    outputs:
      api: ${{ steps.changes.outputs.api }}
      web: ${{ steps.changes.outputs.web }}

Динамические матрицы

Для множества служб можно динамически сформировать матрицу из изменённых путей, чтобы в неё попадали только изменённые службы.

Сформируйте список JSON в одном задании и передайте его в матрицу следующего.

    strategy:
      matrix:
        service: ${{ fromJSON(needs.detect.outputs.list) }}

Git Diff для обнаружения изменений

Изменения также можно обнаруживать с помощью обычного git. Сравните текущий коммит с базовым, чтобы получить список изменённых каталогов.

git diff --name-only origin/main...HEAD | cut -d/ -f1-2 | sort -u

Обязательные проверки и пропуски

Будьте внимательны: если обязательная проверка статуса пропущена из-за отсутствия изменений, защита ветки может заблокировать слияние в ожидании этой проверки.

Решение — добавить финальное задание-шлюз, которое всегда завершается успешно и является единственной обязательной проверкой, суммируя результаты условных заданий.

  gate:
    needs: [build-api, build-web]
    if: always()
    runs-on: ubuntu-latest
    steps:
      - run: echo 'all required jobs resolved'

Кэширование для каждого пакета

Выборочные сборки хорошо сочетаются с кэшами для отдельных пакетов. Создавайте ключ кэша на основе файла блокировок каждой службы, чтобы изменения, не связанные с ней, не делали кэш недействительным.

Вместе эти подходы сохраняют высокую скорость конвейеров монорепозитория даже при его росте.

Быстрая проверка

Проверьте, насколько хорошо Вы поняли выборочные сборки.

Повторение

Вы научились собирать только то, что изменилось.

  • paths и paths-ignore управляют запуском целых рабочих процессов
  • Действия для обнаружения изменений выдают логические значения для отдельных путей
  • Задания используют if + needs для условного запуска, а матрицы можно формировать динамически
  • Добавляйте задание-шлюз с always() для совместимости с обязательными проверками

Выборочные сборки делают CI/CD монорепозитория быстрым и экономичным.

Часто задаваемые вопросы

Урок «Фильтрация по путям и выборочные сборки» бесплатный?

Да — полный текст урока «Фильтрация по путям и выборочные сборки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CI/CD with GitHub Actions & DevOps Pipelines, подпишись на CoddyKit PRO. Курс CI/CD with GitHub Actions & DevOps Pipelines содержит 4 уроков всего.

Чему я научусь в уроке «Фильтрация по путям и выборочные сборки»?

Запускайте только те рабочие процессы и задания, на которые повлияли изменения, используя фильтры путей, обнаружение изменений и условные матрицы в монорепозиториях и конфигурациях с несколькими репо… Ты практикуешь CI/CD with GitHub Actions & DevOps Pipelines с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать CI/CD with GitHub Actions & DevOps Pipelines?

Предыдущий опыт не требуется. CI/CD with GitHub Actions & DevOps Pipelines на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Фильтрация по путям и выборочные сборки»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке CI/CD with GitHub Actions & DevOps Pipelines?

Да. Каждый урок CI/CD with GitHub Actions & DevOps Pipelines включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. CI/CD для монорепозиториев
  2. Рабочие процессы между репозиториями
  3. Централизованное управление рабочими процессами
  4. Фильтрация по путям и выборочные сборки
← Назад к CI/CD with GitHub Actions & DevOps Pipelines