# CICD # Как реализовать запуск задач в .gitlab-ci.yml с различной периодичностью выполнения 1. Создать 2 планировщика (sheduler) 1. Меню: **Build** - **Pipeline Schedules** или **CI/CD** - **Schedules** (в зависимости от версии gitlab) [](https://lavelin.ru/uploads/images/gallery/2024-04/image.png) 2. Нажать на кнопку "**New schedule**" [](https://lavelin.ru/uploads/images/gallery/2024-04/Skbimage.png) 3. Указать в разделе перменных переменную для одного расписания [](https://lavelin.ru/uploads/images/gallery/2024-04/4CIimage.png) 4. Аналогично добавить второй планировщик и указать для него свою переменную 2. В файле .gitlab-ci.yml добавить правила выполнения для каждой переменной [](https://lavelin.ru/uploads/images/gallery/2024-04/687image.png) 3. Пример файла .gitlab-ci.yml ```yaml stages: - test .template_short: stage: test rules: - if: '$CI_PIPELINE_SOURCE == "schedule" && $interval == "short"' before_script: - echo "This is the before_script of the .template_short job" .template_long: stage: test rules: - if: '$CI_PIPELINE_SOURCE == "schedule" && $interval == "long"' before_script: - echo "This is the before_script of the .template_long job" test:daily: tags: - my_tag extends: .template_short script: - echo "Run on $interval schedule" test:weekly: tags: - my_tag extends: .template_long script: - echo "Run on $interval schedule" test:any: tags: - my_tag script: - echo "Run on push and schedule" ``` # Основные шаблоны для работы с файлами и каталогами GitLab CI/CD GitLab CI/CD позво043bяет отслеживать изменения файлов и каталогов с помощью **glob patterns**. Они используются в `changes`, `artifacts`, `cache` и других разделах `.gitlab-ci.yml`. Эта статья разберет основные шаблоны и их поведение. ## 🔹 Основные glob patterns
Шаблон | Описание |
---|---|
`path/*` | Отслеживает **только файлы и каталоги первого уровня** в `path`, **без вложенных файлов**. |
`path/**/*` | Отслеживает **все файлы и папки** внутри `path`, включая **вложенные файлы на всех уровнях**. |
`path/*/*` | Отслеживает файлы и папки **только второго уровня** внутри `path`. |
`path/*/**` | Отслеживает **файлы на первом уровне** + **все вложенные файлы** во втором уровне и глубже. |
`path/**` | Аналог `path/**/*`, отслеживает всё, включая подпапки и файлы. |
`path/**/file.txt` | Отслеживает **конкретный файл**, независимо от его глубины. |
**Секция** | **Описание** |
---|---|
`extends:` | Наследование от шаблонного `job` (если есть). |
`stage:` | Назначение `job` к определенному этапу. |
`tags:` | Указывает, на каких раннерах будет выполняться `job`. |
`needs:` | Указывает зависимости от других `job` (если надо запустить `job` только после выполнения других). |
`variables:` | Определяет переменные, видимые только внутри `job`. |
`before_script:` | Выполняется **один раз перед `script:`** (установка окружения, логирование, авторизация и т. д.). |
`script:` | Основной код `job`, выполняется **после `before_script:`**. |
`after_script:` | Выполняется **после `script:`**, даже если `script:` упал. Подходит для логов, очистки файлов. |
`artifacts:` | Определяет файлы, которые сохраняются после завершения `job`. |
`rules:` | Условия выполнения `job` (например, только в `main`, только при изменениях в `src/`). |
`allow_failure:` | Разрешает `job` завершаться с ошибкой (`true` → ошибки не остановят pipeline). |
`retry:` | Число повторных попыток при падении `job`. |
`timeout:` | Лимит времени выполнения `job` (например, `30m`). |