# Рекомендуемый порядок расположения блоков внутри job в .gitlab-ci.yml? В GitLab CI/CD **есть рекомендованный порядок**, который улучшает **читаемость и поддержку pipeline**. --- ## **📌 Стандартный порядок блоков внутри `job`** ```yaml job_name: extends: .some_template # 1️⃣ Наследование (если есть) stage: build # 2️⃣ Определение этапа tags: # 3️⃣ Теги для раннера (если нужны) - docker needs: # 4️⃣ Зависимости от других job'ов - previous_job variables: # 5️⃣ Локальные переменные для job SOME_VAR: "value" before_script: # 6️⃣ Подготовка окружения перед `script` - echo "Setting up environment..." script: # 7️⃣ Основной код - echo "Executing job..." after_script: # 8️⃣ Завершающие действия (если нужны) - echo "Cleanup after job" artifacts: # 9️⃣ Артефакты (если нужны) paths: - my_output/ expire_in: 1 hour rules: # 🔟 Условия выполнения job - if: '$CI_COMMIT_BRANCH == "main"' allow_failure: false # 1️⃣1️⃣ Позволять ли падение job retry: 2 # 1️⃣2️⃣ Число повторных попыток timeout: 30m # 1️⃣3️⃣ Лимит времени выполнения ``` --- ## **📌 Разбор структуры**
**Секция** | **Описание** |
---|---|
`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`). |