Build artifact — файл или набор файлов, являющийся результатом процесса CI/CD-сборки. Артефакт создаётся один раз на этапе build и используется в последующих этапах (test, staging, production). Это гарантирует: то, что деплоится в production, прошло все проверки.
Типы артефактов
- Скомпилированный код — JAR/WAR (Java), .exe/.dll (C#), бинарник (Go, Rust).
- Архив — ZIP/TAR с кодом и зависимостями для PHP/Python/Node.js.
- Docker-образ — тегированный образ в Container Registry.
- npm/pip-пакет — опубликованный пакет в реестре.
- Helm chart — пакет для Kubernetes-деплоя.
Хранение артефактов
- GitHub Actions — actions/upload-artifact, хранение до 90 дней.
- GitLab CI — artifacts: keyword, хранение и передача между jobs.
- JFrog Artifactory — enterprise artifact repository.
- Nexus Repository — open-source artifact manager.
- Docker Hub / GitHub Container Registry — для Docker-образов.
GitHub Actions: работа с артефактами
jobs:
build:
steps:
- run: npm run build
- uses: actions/upload-artifact@v4
with:
name: dist
path: ./dist/
deploy:
needs: build
steps:
- uses: actions/download-artifact@v4
with:
name: dist
path: ./dist/
- run: rsync -avz ./dist/ user@server:/var/www/
История
Концепция build artifacts появилась с первыми системами автоматизации сборки: make (1976), ANT (2000), Maven (2004). JFrog Artifactory — 2008. Docker Hub как artifact registry — 2013. GitHub Packages (включая Container Registry) — 2019.
Связь с хостингом
При деплое на VDS артефакт (например, Docker-образ из GitHub Actions) скачивается с Container Registry и запускается на сервере. Это исключает пересборку на production. Хранение артефактов в реестре позволяет быстро откатиться: просто запустить предыдущий тег образа.
История управления артефактами сборки
Концепция артефактов сборки появилась с промышленными системами CI: CruiseControl (2001), Jenkins (2011). Maven Repository (Nexus, 2005; Artifactory, 2006) — первые специализированные хранилища артефактов Java. npm Registry (2010) — первый публичный реестр для Node.js-пакетов. Docker Hub (2013) — реестр Docker-образов. GitHub Packages (2019) объединил несколько типов реестров. Артефакт — неизменяемый результат сборки, привязанный к конкретному коммиту и версии.
Типы артефактов сборки
| Тип | Формат | Реестр |
|---|---|---|
| JAR/WAR | .jar, .war | Nexus, Artifactory |
| npm-пакет | .tgz | npm Registry, Verdaccio |
| Docker-образ | OCI/Docker | Docker Hub, GHCR, Harbor |
| Python-пакет | .whl, .tar.gz | PyPI, Artifactory |
| deb/rpm-пакет | .deb, .rpm | Aptly, Pulp |
Хранение артефактов на хостинге
Для VPS-проектов артефакты хранятся в GitHub Packages, GitLab Container Registry или S3-бакете. Версионирование артефактов — SemVer (MAJOR.MINOR.PATCH) или git-хеш. Иммутабельность: раз загруженный артефакт нельзя изменить без смены версии — гарантия воспроизводимости деплоя. Retention policies очищают старые артефакты автоматически.
Версионирование артефактов: Docker-образы тегируются по git-хешу (myapp:abc1234) для воспроизводимости. Nginx может раздавать артефакты (статику) напрямую из S3-бакета через proxy_pass. Cleanup старых артефактов автоматизируется через GitHub Actions (actions/delete-package-versions).