feat: add build_script
This commit is contained in:
@@ -0,0 +1,250 @@
|
||||
# Scripts 使用说明
|
||||
|
||||
这个目录包含项目的构建和版本管理脚本。
|
||||
|
||||
## 文件说明
|
||||
|
||||
- `Makefile`: 构建、推送 Docker 镜像和版本管理的自动化脚本
|
||||
- `version.sh`: 版本号管理脚本
|
||||
|
||||
## Makefile 使用
|
||||
|
||||
### 可配置的环境变量
|
||||
|
||||
- `IMAGE_NAME`: Docker 镜像名称
|
||||
|
||||
### 独立使用
|
||||
|
||||
#### 1. 使用默认镜像名
|
||||
|
||||
```bash
|
||||
cd scripts
|
||||
make image
|
||||
```
|
||||
|
||||
#### 2. 使用自定义镜像名
|
||||
|
||||
```bash
|
||||
cd scripts
|
||||
IMAGE_NAME=myregistry/myimage make image
|
||||
```
|
||||
|
||||
或者:
|
||||
|
||||
```bash
|
||||
export IMAGE_NAME=myregistry/myimage
|
||||
cd scripts
|
||||
make image
|
||||
```
|
||||
|
||||
### 在其他 Makefile 中引用
|
||||
|
||||
有多种方式可以在其他 Makefile 中引用这个 Makefile:
|
||||
|
||||
#### 方式一:使用 `$(MAKE) -C` 调用子目录(推荐)
|
||||
|
||||
在项目根目录创建主 Makefile:
|
||||
|
||||
```makefile
|
||||
.PHONY: build-image
|
||||
|
||||
# 定义镜像名称
|
||||
IMAGE_NAME = myregistry/myproject
|
||||
|
||||
# 调用 scripts 目录下的 Makefile
|
||||
build-image:
|
||||
IMAGE_NAME=$(IMAGE_NAME) $(MAKE) -C scripts image
|
||||
|
||||
# 或者使用 export 导出环境变量
|
||||
build-image-export:
|
||||
export IMAGE_NAME=$(IMAGE_NAME) && $(MAKE) -C scripts image
|
||||
```
|
||||
|
||||
使用:
|
||||
|
||||
```bash
|
||||
make build-image
|
||||
```
|
||||
|
||||
#### 方式二:使用 `include` 包含
|
||||
|
||||
在项目根目录的 Makefile 中:
|
||||
|
||||
```makefile
|
||||
# 设置变量(会覆盖被包含文件中的默认值)
|
||||
IMAGE_NAME = myregistry/myproject
|
||||
|
||||
# 包含 scripts 目录的 Makefile
|
||||
include scripts/Makefile
|
||||
|
||||
# 现在可以直接调用 image 目标
|
||||
.PHONY: build
|
||||
build: image
|
||||
```
|
||||
|
||||
使用:
|
||||
|
||||
```bash
|
||||
make build
|
||||
```
|
||||
|
||||
**注意**: 使用 `include` 时,相对路径会基于主 Makefile 的位置,可能需要调整路径。
|
||||
|
||||
#### 方式三:环境变量传递(跨多层 Makefile)
|
||||
|
||||
根目录 `Makefile`:
|
||||
|
||||
```makefile
|
||||
.PHONY: all
|
||||
|
||||
# 设置并导出环境变量,使所有子 make 都能访问
|
||||
export IMAGE_NAME = myregistry/myproject
|
||||
export VERSION = v1.0.0
|
||||
|
||||
all:
|
||||
@echo "Building with IMAGE_NAME=$(IMAGE_NAME)"
|
||||
$(MAKE) -C scripts image
|
||||
```
|
||||
|
||||
#### 方式四:通过命令行传递多个变量
|
||||
|
||||
```bash
|
||||
IMAGE_NAME=myregistry/myimage VERSION=v2.0.0 make -C scripts image
|
||||
```
|
||||
|
||||
### 完整示例
|
||||
|
||||
假设项目结构:
|
||||
|
||||
```
|
||||
/project-root
|
||||
├── Makefile # 主 Makefile
|
||||
├── scripts/
|
||||
│ ├── Makefile # 本文件
|
||||
│ └── version.sh
|
||||
└── ...
|
||||
```
|
||||
|
||||
主 `Makefile` 内容示例:
|
||||
|
||||
```makefile
|
||||
.PHONY: help build-backend build-frontend build-all
|
||||
|
||||
# 项目配置
|
||||
PROJECT_NAME = myproject
|
||||
REGISTRY = docker.io/myorg
|
||||
BACKEND_IMAGE = $(REGISTRY)/$(PROJECT_NAME)-backend
|
||||
FRONTEND_IMAGE = $(REGISTRY)/$(PROJECT_NAME)-frontend
|
||||
|
||||
help:
|
||||
@echo "Available targets:"
|
||||
@echo " build-backend - Build and push backend image"
|
||||
@echo " build-frontend - Build and push frontend image"
|
||||
@echo " build-all - Build and push all images"
|
||||
|
||||
build-backend:
|
||||
@echo "Building backend image..."
|
||||
IMAGE_NAME=$(BACKEND_IMAGE) $(MAKE) -C scripts image
|
||||
|
||||
build-frontend:
|
||||
@echo "Building frontend image..."
|
||||
IMAGE_NAME=$(FRONTEND_IMAGE) $(MAKE) -C scripts image
|
||||
|
||||
build-all: build-backend build-frontend
|
||||
@echo "All images built successfully!"
|
||||
|
||||
# 也可以创建版本管理的快捷方式
|
||||
version:
|
||||
$(MAKE) -C scripts version $(filter-out $@,$(MAKECMDGOALS))
|
||||
|
||||
# 允许传递额外参数
|
||||
%:
|
||||
@:
|
||||
```
|
||||
|
||||
使用示例:
|
||||
|
||||
```bash
|
||||
# 构建后端镜像
|
||||
make build-backend
|
||||
|
||||
# 构建前端镜像
|
||||
make build-frontend
|
||||
|
||||
# 构建所有镜像
|
||||
make build-all
|
||||
|
||||
# 版本管理
|
||||
make version patch
|
||||
make version v1.2.3
|
||||
```
|
||||
|
||||
## 版本管理
|
||||
|
||||
### 基本用法
|
||||
|
||||
```bash
|
||||
# 查看当前版本和帮助
|
||||
make version
|
||||
|
||||
# 设置特定版本
|
||||
make version v1.0.0
|
||||
|
||||
# 或者
|
||||
make version VERSION=v1.0.0
|
||||
|
||||
# 递增版本
|
||||
make version patch # v1.0.0 -> v1.0.1
|
||||
make version minor # v1.0.0 -> v1.1.0
|
||||
make version major # v1.0.0 -> v2.0.0
|
||||
|
||||
# 预发布版本
|
||||
make version pre # v1.0.0 -> v1.0.0-rc.1
|
||||
make version pre alpha # v1.0.0 -> v1.0.0-alpha.1
|
||||
make version pre beta # v1.0.0 -> v1.0.0-beta.1
|
||||
make version pre rc 2 # v1.0.0 -> v1.0.0-rc.2
|
||||
```
|
||||
|
||||
## 创建标签
|
||||
|
||||
```bash
|
||||
# 基于 VERSION 文件创建并推送 Git 标签
|
||||
make tag
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **环境变量优先级**:
|
||||
- 命令行传递 > 父 Makefile export > 本 Makefile 默认值
|
||||
|
||||
2. **工作目录**:
|
||||
- 使用 `$(MAKE) -C scripts` 会切换到 scripts 目录执行
|
||||
- 注意脚本中的相对路径问题
|
||||
|
||||
3. **变量传递**:
|
||||
- `IMAGE_NAME=xxx $(MAKE)`: 只对当前 make 有效
|
||||
- `export IMAGE_NAME=xxx; $(MAKE)`: 对所有子 make 有效
|
||||
- `export IMAGE_NAME=xxx` 后再调用: 对整个 shell 会话有效
|
||||
|
||||
4. **调试技巧**:
|
||||
```bash
|
||||
# 查看实际使用的变量值
|
||||
make -C scripts image -n # 干运行,只显示命令不执行
|
||||
```
|
||||
|
||||
## 扩展建议
|
||||
|
||||
如果需要更复杂的配置,可以创建配置文件:
|
||||
|
||||
```makefile
|
||||
# config.mk
|
||||
PROJECT_NAME = myproject
|
||||
REGISTRY = docker.io/myorg
|
||||
VERSION = v1.0.0
|
||||
|
||||
# 在主 Makefile 中
|
||||
include config.mk
|
||||
export IMAGE_NAME = $(REGISTRY)/$(PROJECT_NAME)
|
||||
```
|
||||
|
||||
这样可以将配置集中管理,便于维护。
|
||||
Reference in New Issue
Block a user