373 lines
12 KiB
Markdown
373 lines
12 KiB
Markdown
# ⚙️ Makefile
|
||
|
||
## Основные команды
|
||
|
||
### Docker команды
|
||
|
||
| Команда | Описание | Пример |
|
||
|---------|----------|--------|
|
||
| `make docker build` | Собрать Docker-образ (двойные теги) | `make docker build IMAGE=myapp TAG1=latest TAG2=v1.0` |
|
||
| `make docker check` | Проверить образ | `make docker check RUN_CMD="java -version"` |
|
||
| `make docker push` | Собрать + проверить + отправить (оба тега) | `make docker push IMAGE=myapp TAG1=latest TAG2=v1.0` |
|
||
| `make docker rebuild` | Пересобрать без кэша (оба тега) | `make docker rebuild IMAGE=myapp TAG1=latest TAG2=v1.0` |
|
||
| `make docker pull` | Скачать/обновить образы по тегам | `make docker pull IMAGE=myapp TAG1=latest TAG2=v1.0` |
|
||
| `make docker save` | Сохранить образ в архив | `make docker save SRC_IMAGE=myapp:latest` |
|
||
| `make docker load` | Загрузить из архива | `make docker load ARCHIVE=images/myapp.tar` |
|
||
| `make docker login` | Авторизация в registry | `make docker login REGISTRY=hub.cism-ms.ru` |
|
||
| `make docker retag` | Перетегировать образ | `make docker retag NEW_TAG=v2.0` |
|
||
| `make docker inspect` | Просмотреть метаданные | `make docker inspect` |
|
||
| `make docker clean` | Очистить временные файлы | `make docker clean` |
|
||
|
||
### Git команды
|
||
|
||
| Команда | Описание | Пример |
|
||
|---------|----------|--------|
|
||
| `make git status` | Показать статус репозитория | `make git status` |
|
||
| `make git pull` | Получить изменения | `make git pull` |
|
||
| `make git commit` | Создать коммит | `make git commit GIT_MSG="Обновление"` |
|
||
| `make git push` | Коммит + push | `make git push GIT_MSG="Новая версия"` |
|
||
| `make git sync` | Pull + commit + push | `make git sync` |
|
||
|
||
## Подробное описание переменных
|
||
|
||
### Основные Docker переменные
|
||
|
||
#### REGISTRY
|
||
**Описание:** Адрес Docker Registry без протокола
|
||
**По умолчанию:** `hub.cism-ms.ru/library`
|
||
**Примеры:**
|
||
```bash
|
||
REGISTRY=hub.cism-ms.ru/library
|
||
REGISTRY=registry.gitlab.com/myproject
|
||
REGISTRY=localhost:5000
|
||
```
|
||
|
||
#### IMAGE
|
||
**Описание:** Имя Docker-образа (обязательное поле при сборке)
|
||
**По умолчанию:** пустое
|
||
**Примеры:**
|
||
```bash
|
||
IMAGE=myapp
|
||
IMAGE=web-frontend
|
||
IMAGE=api-backend
|
||
```
|
||
|
||
#### TAG1 / TAG2
|
||
**Описание:** Основной и дополнительный тег образа (двойное тегирование)
|
||
**По умолчанию:** `TAG1=latest`, `TAG2=v.0.0.1`
|
||
**Примеры:**
|
||
```bash
|
||
TAG1=latest TAG2=v1.0.0
|
||
TAG1=stable TAG2=v1.0.1
|
||
TAG1=dev # без второго тега
|
||
```
|
||
|
||
#### CONTEXT
|
||
**Описание:** Папка контекста сборки Docker
|
||
**По умолчанию:** `.` (текущая директория)
|
||
**Примеры:**
|
||
```bash
|
||
CONTEXT=.
|
||
CONTEXT=./app
|
||
CONTEXT=/path/to/build/context
|
||
```
|
||
|
||
#### DOCKERFILE
|
||
**Описание:** Имя Dockerfile, используемого при сборке
|
||
**По умолчанию:** `Dockerfile`
|
||
**Примеры:**
|
||
```bash
|
||
DOCKERFILE=Dockerfile
|
||
DOCKERFILE=Dockerfile.prod
|
||
DOCKERFILE=./docker/Dockerfile
|
||
```
|
||
|
||
### Режимы сборки
|
||
|
||
#### USE_BUILDX
|
||
**Описание:** Использовать Docker Buildx для мультиплатформенной сборки
|
||
**По умолчанию:** `0`
|
||
**Значения:**
|
||
- `0` - обычный `docker build`
|
||
- `1` - использовать `docker buildx build`
|
||
|
||
**Примеры:**
|
||
```bash
|
||
# Обычная сборка
|
||
USE_BUILDX=0
|
||
|
||
# Мультиплатформенная сборка
|
||
USE_BUILDX=1 PLATFORMS="linux/amd64,linux/arm64"
|
||
```
|
||
|
||
#### PLATFORMS
|
||
**Описание:** Целевые платформы для buildx (через запятую)
|
||
**По умолчанию:** `linux/amd64`
|
||
**Примеры:**
|
||
```bash
|
||
PLATFORMS=linux/amd64
|
||
PLATFORMS=linux/amd64,linux/arm64
|
||
PLATFORMS=linux/amd64,linux/arm64,linux/arm/v7
|
||
```
|
||
|
||
#### PUSH
|
||
**Описание:** Выполнить docker push после buildx
|
||
**По умолчанию:** `0`
|
||
**Значения:**
|
||
- `0` - не выполнять push
|
||
- `1` - выполнить push после сборки
|
||
|
||
**Примечание:** Работает только с `USE_BUILDX=1`
|
||
|
||
#### LOAD
|
||
**Описание:** Загрузить образ в локальный docker после сборки
|
||
**По умолчанию:** `1`
|
||
**Значения:**
|
||
- `0` - не загружать (актуально для CI/CD)
|
||
- `1` - загрузить в локальный docker
|
||
|
||
#### NO_CACHE
|
||
**Описание:** Сборка без использования кэша
|
||
**По умолчанию:** `0`
|
||
**Значения:**
|
||
- `0` - использовать кэш Docker
|
||
- `1` - сборка без кэша
|
||
|
||
**Примеры:**
|
||
```bash
|
||
# Сборка с кэшем (быстрее)
|
||
NO_CACHE=0
|
||
|
||
# Сборка без кэша (медленнее, но чище)
|
||
NO_CACHE=1
|
||
```
|
||
|
||
#### PULL
|
||
**Описание:** Принудительно обновить базовые образы
|
||
**По умолчанию:** `0`
|
||
**Значения:**
|
||
- `0` - использовать локальные образы
|
||
- `1` - принудительно скачать последние версии
|
||
|
||
#### QUIET
|
||
**Описание:** Минимальный вывод в консоль
|
||
**По умолчанию:** `0`
|
||
**Значения:**
|
||
- `0` - стандартный вывод
|
||
- `1` - минимальный вывод (для CI/CD)
|
||
|
||
### Аргументы сборки
|
||
|
||
#### BUILD_ARGS
|
||
**Описание:** Дополнительные аргументы для docker build
|
||
**По умолчанию:** пустое
|
||
**Формат:** `--build-arg KEY=VALUE --build-arg KEY2=VALUE2`
|
||
|
||
**Примеры:**
|
||
```bash
|
||
BUILD_ARGS="--build-arg VERSION=1.0.0 --build-arg DEBUG=1"
|
||
BUILD_ARGS="--build-arg NODE_ENV=production"
|
||
BUILD_ARGS="--build-arg USER_ID=1000 --build-arg GROUP_ID=1000"
|
||
```
|
||
|
||
#### ARG_FILE
|
||
**Описание:** Путь к файлу с переменными KEY=VALUE
|
||
**По умолчанию:** пустое
|
||
**Формат файла:** Каждая строка содержит `KEY=VALUE`
|
||
|
||
**Пример файла `build.args`:**
|
||
```
|
||
VERSION=1.0.0
|
||
BUILD_DATE=2024-01-15
|
||
GIT_COMMIT=abc123def
|
||
NODE_ENV=production
|
||
USER_ID=1000
|
||
GROUP_ID=1000
|
||
```
|
||
|
||
**Использование:**
|
||
```bash
|
||
make docker build ARG_FILE=build.args
|
||
```
|
||
|
||
### Проверка и логирование
|
||
|
||
#### RUN_CMD
|
||
**Описание:** Команда для проверки контейнера после сборки
|
||
**По умолчанию:** `lsb_release -a`
|
||
**Примеры:**
|
||
```bash
|
||
RUN_CMD="java -version"
|
||
RUN_CMD="node --version"
|
||
RUN_CMD="python3 --version"
|
||
RUN_CMD="curl -f http://localhost:8080/health"
|
||
```
|
||
|
||
#### BUILDER
|
||
**Описание:** Имя buildx builder'а
|
||
**По умолчанию:** `universal-builder`
|
||
**Примеры:**
|
||
```bash
|
||
BUILDER=universal-builder
|
||
BUILDER=my-custom-builder
|
||
BUILDER=ci-builder
|
||
```
|
||
|
||
#### LOG_DIR
|
||
**Описание:** Каталог для логов сборок
|
||
**По умолчанию:** `logs`
|
||
**Примеры:**
|
||
```bash
|
||
LOG_DIR=logs
|
||
LOG_DIR=./build-logs
|
||
LOG_DIR=/var/log/docker-builds
|
||
```
|
||
|
||
#### LOG_FILE
|
||
**Описание:** Файл лога (формируется автоматически)
|
||
**По умолчанию:** `$(LOG_DIR)/build_$(shell date +%Y%m%d_%H%M%S).log`
|
||
**Пример:** `logs/build_20240115_143022.log`
|
||
|
||
### Оффлайн переменные (SAVE/LOAD)
|
||
|
||
#### ARCHIVE
|
||
**Описание:** Путь к архиву образа (tar или gz)
|
||
**По умолчанию:** `image.tar`
|
||
**Примеры:**
|
||
```bash
|
||
ARCHIVE=image.tar
|
||
ARCHIVE=images/myapp_v1.0.0.tar.gz
|
||
ARCHIVE=/backup/containers/myapp.tar
|
||
```
|
||
|
||
#### IMAGES_DIR
|
||
**Описание:** Каталог для сохранения архивов Docker-образов
|
||
**По умолчанию:** `images`
|
||
**Примеры:**
|
||
```bash
|
||
IMAGES_DIR=images
|
||
IMAGES_DIR=./docker-images
|
||
IMAGES_DIR=/backup/containers
|
||
```
|
||
|
||
#### SRC_IMAGE
|
||
**Описание:** Имя исходного образа для сохранения
|
||
**По умолчанию:** `$(FULL_IMAGE)` если IMAGE задан
|
||
**Примеры:**
|
||
```bash
|
||
SRC_IMAGE=myapp:latest
|
||
SRC_IMAGE=ubuntu:22.04
|
||
SRC_IMAGE=registry.local/myapp:v1.0
|
||
```
|
||
|
||
#### COMPRESS
|
||
**Описание:** Сжать архив gzip
|
||
**По умолчанию:** `0`
|
||
**Значения:**
|
||
- `0` - оставить tar
|
||
- `1` - сжать gzip
|
||
|
||
**Примеры:**
|
||
```bash
|
||
# Сохранить как tar
|
||
make docker save SRC_IMAGE=myapp:latest COMPRESS=0
|
||
|
||
# Сохранить как tar.gz
|
||
make docker save SRC_IMAGE=myapp:latest COMPRESS=1
|
||
```
|
||
|
||
#### SPLIT_SIZE
|
||
**Описание:** Размер чанка для разбиения архива
|
||
**По умолчанию:** пустое (не разбивать)
|
||
**Примеры:**
|
||
```bash
|
||
SPLIT_SIZE=2G # Разбить на части по 2GB
|
||
SPLIT_SIZE=1G # Разбить на части по 1GB
|
||
SPLIT_SIZE=500M # Разбить на части по 500MB
|
||
```
|
||
|
||
#### LOGIN
|
||
**Описание:** Выполнить docker login перед push
|
||
**По умолчанию:** `1`
|
||
**Значения:**
|
||
- `0` - пропустить авторизацию
|
||
- `1` - выполнить docker login
|
||
|
||
#### PUSH_OFFLINE
|
||
**Описание:** Выполнить docker push после загрузки архива
|
||
**По умолчанию:** `1`
|
||
**Значения:**
|
||
- `0` - только загрузить
|
||
- `1` - загрузить и запушить
|
||
|
||
#### KEEP_SRC_TAG
|
||
**Описание:** Использовать тег из архива
|
||
**По умолчанию:** `1`
|
||
**Значения:**
|
||
- `0` - использовать TAG из Makefile
|
||
- `1` - использовать тег из загруженного архива
|
||
|
||
#### OFFLINE_DIR
|
||
**Описание:** Временная служебная папка для оффлайн операций
|
||
**По умолчанию:** `.offline`
|
||
**Содержит:** `load.log`, `src_image.txt`, `dst_image.txt`, `last_save.txt`
|
||
|
||
#### LAST_SAVE
|
||
**Описание:** Путь к последнему сохранённому архиву
|
||
**По умолчанию:** `$(OFFLINE_DIR)/last_save.txt`
|
||
|
||
### Git переменные
|
||
|
||
#### GIT_REMOTE
|
||
**Описание:** Имя удалённого репозитория
|
||
**По умолчанию:** `origin`
|
||
**Примеры:**
|
||
```bash
|
||
GIT_REMOTE=origin
|
||
GIT_REMOTE=upstream
|
||
GIT_REMOTE=backup
|
||
```
|
||
|
||
#### GIT_BRANCH
|
||
**Описание:** Текущая ветка (определяется автоматически)
|
||
**По умолчанию:** `$(shell git rev-parse --abbrev-ref HEAD)`
|
||
**Примеры:** `main`, `develop`, `feature/new-feature`
|
||
|
||
#### GIT_MSG
|
||
**Описание:** Сообщение коммита
|
||
**По умолчанию:** запрашивается вручную
|
||
**Примеры:**
|
||
```bash
|
||
GIT_MSG="Добавлена поддержка Docker"
|
||
GIT_MSG="Исправлена ошибка в сборке"
|
||
GIT_MSG="Обновлены зависимости"
|
||
```
|
||
|
||
### Служебные переменные
|
||
|
||
#### FULL_IMAGE / FULL_IMAGE_1 / FULL_IMAGE_2
|
||
**Описание:** Полные имена образов
|
||
**Формируется автоматически:**
|
||
- `FULL_IMAGE` = `$(REGISTRY)/$(IMAGE):$(TAG1)`
|
||
- `FULL_IMAGE_1` = `$(REGISTRY)/$(IMAGE):$(TAG1)`
|
||
- `FULL_IMAGE_2` = `$(REGISTRY)/$(IMAGE):$(TAG2)`
|
||
**Примеры:**
|
||
```bash
|
||
FULL_IMAGE_1=hub.cism-ms.ru/library/myapp:latest
|
||
FULL_IMAGE_2=hub.cism-ms.ru/library/myapp:v1.0.0
|
||
```
|
||
|
||
#### Цвета вывода
|
||
**Описание:** ANSI-коды для форматирования вывода
|
||
**Переменные:**
|
||
- `COLOR_RESET` - сброс цвета
|
||
- `COLOR_INFO` - синий цвет для информации
|
||
- `COLOR_OK` - зелёный цвет для успеха
|
||
- `COLOR_ERR` - красный цвет для ошибок
|
||
- `COLOR_WARN` - жёлтый цвет для предупреждений
|
||
|
||
**Отключение цветов (для CI):**
|
||
```bash
|
||
COLOR_RESET= COLOR_INFO= COLOR_OK= COLOR_ERR= COLOR_WARN=
|
||
```
|