# Job и Pipeline

В контексте CI/CD (например, GitLab CI/CD или GitHub Actions) **Pipeline** и **Job** — это ключевые элементы организации автоматизации, но они находятся на разных уровнях.

***

#### **1. Pipeline**

* **Что это:** это **полный процесс автоматизации**, который запускается при событии (push, pull request, merge request).
* **Состав:** один pipeline может включать **несколько этапов (stages)**, а в каждом этапе — несколько **jobs**.
* **Пример событий запуска pipeline:** коммит в ветку, открытие Pull Request, расписание (cron).
* **Цель:** объединить все задачи CI/CD в **логическую цепочку**, которая описывает весь процесс сборки, тестирования и деплоя.

***

#### **2. Job**

* **Что это:** отдельная **единица работы** в pipeline.
* **Содержит:** конкретную задачу, например:
  * сборка приложения,
  * запуск юнит-тестов,
  * деплой на staging,
  * линтинг кода.
* **Выполнение:** job выполняется на агенте CI/CD и может запускаться параллельно с другими job или последовательно, в зависимости от stage.

***

#### **Пример структуры (GitLab CI/CD)**

```yaml
stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - make build

test_job:
  stage: test
  script:
    - pytest tests/

deploy_job:
  stage: deploy
  script:
    - ./deploy.sh
```

* **Pipeline** — вся структура с тремя стадиями.
* **Job** — `build_job`, `test_job`, `deploy_job`.
* Этапы (`stages`) определяют порядок выполнения jobs.

***

#### **Итог**

* **Pipeline** — весь процесс CI/CD от коммита до деплоя.
* **Job** — отдельная задача внутри pipeline.
* Один pipeline может содержать много stages и десятки job.
