Использовал ли ты правила (rules) в GitLab CI/CD для организации логики работы пайплайна?

«Использовал ли ты правила (rules) в GitLab CI/CD для организации логики работы пайплайна?» — вопрос из категории DevOps, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, активно использовал. Правила rules — это основной инструмент для условного выполнения джобов в GitLab CI/CD. Они заменили устаревшие only/except и предоставляют гораздо более гибкую и читаемую логику.

Основные сценарии использования:

  • Запуск по событию или ветке: Например, запускать сборку только для merge request или для ветки main.
  • Запуск по изменению файлов: Использование ключа changes для запуска джобов только при модификации определённых файлов (например, Dockerfile или package.json).
  • Ручное подтверждение: Установка when: manual для критичных операций, таких как деплой в production.

Пример из реального пайплайна:

integration_test:
  stage: test
  script: ./run_integration_tests.sh
  rules:
    # Всегда запускать для merge request
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      when: always
    # Запускать для main, но требовать ручного подтверждения
    - if: '$CI_COMMIT_BRANCH == "main"'
      when: manual
    # Не запускать ни при каких других условиях
    - when: never

docker_build:
  stage: build
  script: docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
  rules:
    # Собирать образ только если изменился Dockerfile и мы в main
    - if: '$CI_COMMIT_BRANCH == "main"'
      changes:
        - Dockerfile
        - docker/scripts/*
      when: on_success

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