При автоматическом развертывании вашей системы, где несколько служб используют одну и ту же ветвь (branch) в системе контроля версий, вы можете столкнуться с проблемой того, что изменения одной службы могут случайно запустить процесс развертывания другой службы. Чтобы решить эту проблему, можно использовать различные стратегии:
Используйте условные операторы: В скриптах CI/CD можно добавить проверку, чтобы убедиться, что изменения затрагивают именно ту службу, которую требуется развернуть.
Пример:
stages:
- build
build_A_сервис:
stage: build
script:
- if [[ $(git diff --name-only HEAD~1 | grep A_сервис) ]]; then echo "Building A сервис"; fi
Разделите конфигурацию CI/CD: Создайте отдельные конфигурационные файлы для каждого сервиса, чтобы каждый сервис мог иметь свои собственные правила развертывания.
Пример:
# .gitlab-ci.yml для Сервиса A
build_A_сервис:
script:
- echo "Building A сервис"
# .gitlab-ci.yml для Сервиса B
build_B_сервис:
script:
- echo "Building B сервис"
Используйте метаданные коммита: Вы можете добавлять метаданные в сообщение коммита или использовать специальные маркеры, чтобы указывать, какие службы должны быть развернуты.
Пример:
git commit -m "Обновление A сервиса [ci skip B]"
В этом случае можно использовать if
условия в .gitlab-ci.yml
, чтобы игнорировать развертывание других служб.4. Создайте отдельные ветви для каждой службы: Это может быть наиболее надёжным способом избежать нежелательных триггеров развертываний. Каждый сервис будет иметь свою собственную ветвь, и изменения будут применяться только к конкретной службе.
Пример использования метаданных коммита:
stages:
- build
build_A_service:
stage: build
script:
- if [[ $CI_COMMIT_MESSAGE =~ \[ci skip B\] ]]; then echo "Пропуск B сервиса"; else echo "Компиляция A сервиса"; fi
build_B_service:
stage: build
script:
- if [[ $CI_COMMIT_MESSAGE =~ \[ci skip A\] ]]; then echo "Пропуск A сервиса"; else echo "Компиляция B сервиса"; fi
Эти методы помогут вам контролировать, какие службы будут развернуты при каждом коммите, минимизируя риск нежелательных триггеров.