Рабочие процессы

Рабочие процессы

Файл рабочего процесса (workflow) - это файл .yaml, определяющий конфигурацию, последовательность заданий (jobs) и шагов (steps), которые должны быть выполнены в рамках GitVerse CI/CD.

Конфигурационные файлы рабочих процессов GitVerse Actions должны быть написаны в синтаксисе YAML и располагаться в .gitverse/workflows/ вашего репозитория:

  • сохраните файл с расширением .yaml;
  • поместите его в .gitverse/workflows/ в вашем репозитории (например, .gitverse/workflows/demo.yaml).
⚠️

Раннер так же обработает .yaml файлы в директории .github/workflows.

В разделе Настройка CI/CD подробно рассмотрены примеры с:

Составной рабочий процесс

Составной рабочий процесс в GitVerse CI/CD — это механизм, позволяющий подключать в целевой рабочий процесс .yaml-файлы, хранящиеся в других репозиториях.

Основные характеристики составного рабочего процесса:

  1. Переиспользование. Позволяет переиспользовать код, тем самым избавляясь от лишнего дублирования.
  2. Модульность. Разбивает сложные рабочие процессы на более мелкие, управляемые части.
  3. Централизованное управление. Изменения автоматически применяются ко всем рабочим процессам, которые его используют.

Требования к подключаемому .yaml-файлу:

  1. Должен находиться в корне репозитория и называться action.yaml.
  2. Для коммита ним требуется создать тег.
  3. Должен в своем составе конструкцию using: "composite".

Требования к проекту с целевым yaml-файлом, он должен:

  1. Находиться в директории .gitverse/workflows/ вашего проекта;
  2. Содержать конструкции uses: <username пользователя GitVerse>/<название репозитория>@<тег коммита>.

Подробнее см. раздел Составной рабочий процесс, пример.

Матричная конфигурация и выполнение

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

Для задания матрицы в GitVerse, вы должны использовать ключевое слово matrix внутри блока strategy и runs-on: ${{ matrix.os }}. Внутри matrix вы можете указать параметры, которые будут использоваться для создания различных комбинаций.

В данном случае, матрица используется для запуска задач с разными версиями Node.js и операционными системами. Каждая комбинация параметров создает отдельную задачу, что позволяет проверить работоспособность проекта в различных окружениях.

Пример:

jobs:
  build:
    strategy:
      matrix:
        node-version: [12, 14, 16] # Разные версии Node.js
        os: [ubuntu-latest, windows-latest] # Разные операционные системы
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v2
      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm install
      - run: npm test

Поддерживаемые события

  1. create: создание нового репозитория, ветки, тега.
  2. delete: удаление репозитория, ветки, тега.
  3. fork: создание форка репозитория.
  4. push: пуш в репозиторий.
  5. pull_request: создание или обновление запроса.
  6. pull_request_assign: назначение запроса.
  7. pull_request_comment: комментарий к запросу.
  8. pull_request_review_approved: утверждение рецензии запроса.
  9. pull_request_review_rejected: отклонение рецензии запроса.
  10. pull_request_review_comment: комментарий к рецензии запроса.
  11. pull_request_sync: синхронизация запроса.

Пример записи события pull_request в CICD_branch_protection_demo.yaml:

name: Демонстрация защиты ветки
on:
  pull_request:  # job'ы будет запущены при создании и обновлении запроса
jobs:
  build-test:
    name: CICD branch protection
    runs-on: ubuntu-latest
    steps:
      - name: Display pull request title

Типы раннеров

Кроме уровней в GitVerse раннеры различаются по типам:

  • организация;
  • облачный;
  • локальный.

Пример:

Запуск локального раннера с ограничениями на ресурсы

Для того чтобы ограничить потребление ресурсов для контейнера с выполняемой задачей, необходимо добавить блок container.options с обязательным параметром --net=bridge. В блоке можно прописать любые опции, с которыми запускается обычный контейнер, например:

    container:
      options: --cpus=0.5 --memory=2G --net=bridge ## Ограничения по CPU (50%) и RAM, --net=bridge - обязательный параметр

В данном примере на контейнер с задачей наложены дополнительные ограничения: --cpus=0.5 ограничивает на 50 % использование CPU, --memory=2G накладывает ограничение на RAM, --net=bridge является обязательным параметром.

Статусы выполнения задания CI/CD

Существуют следующие статусы выполнения задания CI/CD:

  1. Успех:

  2. Неудача:

  3. Заблокирован:

  4. Отменен:

  5. Пропущен:

  6. Попробуйте перезапустить

  7. В ожидании:

Связанные разделы

  1. Включение/выключение CI/CD.
  2. Настройка CI/CD, примеры.