Рано или поздно MLE задумываются о запуске задач по расписанию (раз в час/день/…). В голову начинают лезть мысли, чтобы раскатать и запустить на сервере scheduled таски в cron/celery/airflow и поддерживать этот yet another pipeline на yet another framework (берем за условие, что сельдерей и airflow не раскатаны на команду в силу специфики работы, чисто самому и для себя).
Получаем ряд минусов:
❌ Разбираемся с граблями еще одного фреймворка
❌ Хостим его
❌ Смотрим в еще один ui
Сидим ворчим от этой идеи, ведь хочется делать модельки и пить кофе, пока они обучаются, а не вот это вот всё инженерное 🥹
На дейлике подсказали интересную вещь, оказывается GitLab CI/CD умеет в scheduled pipelines. Для меня было не очевидно, всегда представлял пайплайны гитлаба только после триггеров типа "новый коммит", "новый MR" или более специфичные, но привязанные к gitflow. Время развивать нейронные связи и ломать собственные стереотипы:
1️⃣ В дефолтных переменных гитлаба есть переменная
$CI_PIPELINE_SOURCE, в которой нас интересует значение "schedule". Заходим в текущий .gitlab-ci.yml проекта и добавляем в классические джобы следующее условие:
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- when: always
2️⃣ Делаем джобу, которую хотим выполнять регулярно и стейдж под нее, в джобе не забываем прописать:
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
3️⃣ Через ui гитлаба заходим и настраиваем регулярность выполнения sheduled джобы4️⃣ Готово 🎉
Чем этот подход хорош:
✅ У нас не добавляется еще одна система, которую надо поддерживать, в то время как корпоративные гитлабы, как правило, отказоустойчивы на уровне компании
✅ Знакомый ui, приятный интерфейс, прозрачная привязка к конкретному проекту
✅ Scheduled пайплайны связаны к веткам проекта, поэтому мы получаем версионирование из коробки
✅ Scheduled пайплайны обладают всеми преимуществами обычных пайплайнов (цепочки джоб, гибкие условия выполнения через настройку rules, множество дефолтных переменных окружения и гибкость настройки кастомных)
✅ Простота настройки
#routine #job

