Что такое джобы (jobs) в CI/CD?

«Что такое джобы (jobs) в CI/CD?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В контексте CI/CD (например, в GitLab CI, GitHub Actions, Jenkins) джоб — это атомарная задача, которая выполняется на раннере (агенте). Джоб описывает, что сделать (сборка, тест, деплой) и в каком окружении это выполнить. В моих пайплайнах джобы организуются в стадии (stages), которые выполняются последовательно или параллельно.

Пример джоба из GitLab CI .gitlab-ci.yml для сборки Docker-образа:

build_image:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  variables:
    DOCKER_TLS_CERTDIR: ""
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  only:
    - main

Ключевые характеристики джобов в моей работе:

  • Изоляция: Каждый джоб запускается в чистом окружении (контейнере или виртуальной машине).
  • Зависимости: Джоб может зависеть от успеха других джобов (needs в GitLab, depends_on в GitHub Actions).
  • Артефакты: Джоб может создавать выходные данные (бинарники, отчеты тестов), которые передаются следующим джобам.
  • Политика повторения: Можно настроить автоматический ретрай при неудаче, что полезно для прерывистых интеграционных тестов.

На практике я разбиваю процесс на мелкие джобы (lint, unit-test, build, integration-test, deploy), что делает пайплайн более гибким, отказоустойчивым и позволяет легко перезапускать только упавшие задачи.