Назад к вопросам
Middle
249
questionbank

Как создать повторяющиеся задания в GitLab CI?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Существует несколько подходов для создания повторяющихся заданий в GitLab CI:

  1. Расписания конвейеров (Pipeline Schedules): Это наиболее распространенный и предназначенный для этого способ. Вы настраиваете расписание в интерфейсе GitLab, указывая ветку/тег, переменные (при необходимости) и частоту выполнения (cron-синтаксис).
  2. Триггеры API: Вы можете использовать API GitLab для запуска конвейеров из внешней системы или скрипта. Это полезно, если расписание более сложное или зависит от внешних событий.
  3. CI/CD-переменные для условного выполнения: Внутри файла .gitlab-ci.yml можно использовать предопределенные или пользовательские переменные для определения условий выполнения задания. Хотя это не создает расписание как таковое, можно запускать конвейер по расписанию (через Pipeline Schedules) и уже внутри него решать, какие задания выполнять, основываясь на переменных расписания.

Пример использования Pipeline Schedules:

В интерфейсе GitLab перейдите в репозиторий -> Build -> Pipeline schedules. Создайте новое расписание, указав:

  • Описание
  • Ветка/тег
  • Интервал (cron синтаксис, например, 0 0 * * * для ежедневного запуска в полночь)
  • Переменные (опционально)

Пример триггера API (используя curl):

# Замените Private-Token на ваш личный токен доступа с правами API
# Замените <your_project_id> на ID вашего проекта
# Замените <your_ref_name> на имя ветки или тега

curl --request POST \
     --header 'Content-Type: application/json' \
     --header 'Private-Token: <your_private_token>' \
     --data '{
       "ref": "<your_ref_name>",
       "variables": {
         "MY_VARIABLE": "some_value"
       }
     }' \
     'https://gitlab.com/api/v4/projects/<your_project_id>/trigger/pipeline'

Пример использования переменной в .gitlab-ci.yml для условного выполнения:

stages:
  - build
  - deploy

scheduled_job:
  stage: build
  script:
    - echo "This job runs only when triggered by a schedule"
  only:
    variables:
      - $CI_PIPELINE_SOURCE == "schedule"

other_job:
  stage: deploy
  script:
    - echo "This job runs for all pipeline sources"
  # Нет условия `only: variables:`

Выбор метода зависит от конкретных требований. Для простых повторяющихся задач Pipeline Schedules - оптимальный выбор. Для более сложных сценариев или интеграции с внешними системами подходят триггеры API. Условное выполнение с переменными полезно для контроля потока внутри уже запущенного конвейера.