В чем разница между Pipeline и Job в контексте CI/CD (GitLab CI, Jenkins)?

«В чем разница между Pipeline и Job в контексте CI/CD (GitLab CI, Jenkins)?» — вопрос из категории CI/CD и DevOps, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В CI/CD-системах (GitLab CI, Jenkins, GitHub Actions) Pipeline и Job — это иерархические понятия.

  • Pipeline (пайплайн) — это полный автоматизированный процесс доставки кода, состоящий из последовательных или параллельных стадий (stages). Он определяет что и в каком порядке должно быть выполнено.
  • Job (задача) — это минимальная исполняемая единица внутри пайплайна. Job определяет как выполнить конкретную работу (какие команды запустить, в каком окружении).

Аналогия: Строительство дома.

  • Pipeline = весь план строительства (фундамент → стены → крыша → отделка).
  • Stage = крупный этап (например, "отделка").
  • Job = конкретная работа на этаже (например, "укладка плитки в ванной").

Пример .gitlab-ci.yml:

stages:           # Определение стадий пайплайна
  - build
  - test
  - deploy

build_job:        # Это Job (задача) на стадии 'build'
  stage: build
  script:
    - echo "Running build..."
    - mvn compile

unit_test_job:    # Это Job на стадии 'test'
  stage: test
  script:
    - echo "Running unit tests..."
    - mvn test

integration_test_job: # Еще один Job на той же стадии 'test' (выполнится параллельно с unit_test_job)
  stage: test
  script:
    - echo "Running integration tests..."
    - mvn verify -Pintegration

deploy_staging_job: # Это Job на стадии 'deploy'
  stage: deploy
  script:
    - echo "Deploying to staging..."
    - ./deploy.sh staging

Итог: Один Pipeline содержит несколько Stages, а каждая Stage содержит один или несколько Jobs.