Ответ
В контексте 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), что делает пайплайн более гибким, отказоустойчивым и позволяет легко перезапускать только упавшие задачи.