4.9 KiB
4.9 KiB
Scripts 使用说明
这个目录包含项目的构建和版本管理脚本。
文件说明
Makefile: 构建、推送 Docker 镜像和版本管理的自动化脚本version.sh: 版本号管理脚本
Makefile 使用
可配置的环境变量
IMAGE_NAME: Docker 镜像名称
独立使用
1. 使用默认镜像名
cd scripts
make image
2. 使用自定义镜像名
cd scripts
IMAGE_NAME=myregistry/myimage make image
或者:
export IMAGE_NAME=myregistry/myimage
cd scripts
make image
在其他 Makefile 中引用
有多种方式可以在其他 Makefile 中引用这个 Makefile:
方式一:使用 $(MAKE) -C 调用子目录(推荐)
在项目根目录创建主 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
使用:
make build-image
方式二:使用 include 包含
在项目根目录的 Makefile 中:
# 设置变量(会覆盖被包含文件中的默认值)
IMAGE_NAME = myregistry/myproject
# 包含 scripts 目录的 Makefile
include scripts/Makefile
# 现在可以直接调用 image 目标
.PHONY: build
build: image
使用:
make build
注意: 使用 include 时,相对路径会基于主 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
方式四:通过命令行传递多个变量
IMAGE_NAME=myregistry/myimage VERSION=v2.0.0 make -C scripts image
完整示例
假设项目结构:
/project-root
├── Makefile # 主 Makefile
├── scripts/
│ ├── Makefile # 本文件
│ └── version.sh
└── ...
主 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))
# 允许传递额外参数
%:
@:
使用示例:
# 构建后端镜像
make build-backend
# 构建前端镜像
make build-frontend
# 构建所有镜像
make build-all
# 版本管理
make version patch
make version v1.2.3
版本管理
基本用法
# 查看当前版本和帮助
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
创建标签
# 基于 VERSION 文件创建并推送 Git 标签
make tag
注意事项
-
环境变量优先级:
- 命令行传递 > 父 Makefile export > 本 Makefile 默认值
-
工作目录:
- 使用
$(MAKE) -C scripts会切换到 scripts 目录执行 - 注意脚本中的相对路径问题
- 使用
-
变量传递:
IMAGE_NAME=xxx $(MAKE): 只对当前 make 有效export IMAGE_NAME=xxx; $(MAKE): 对所有子 make 有效export IMAGE_NAME=xxx后再调用: 对整个 shell 会话有效
-
调试技巧:
# 查看实际使用的变量值 make -C scripts image -n # 干运行,只显示命令不执行
扩展建议
如果需要更复杂的配置,可以创建配置文件:
# config.mk
PROJECT_NAME = myproject
REGISTRY = docker.io/myorg
VERSION = v1.0.0
# 在主 Makefile 中
include config.mk
export IMAGE_NAME = $(REGISTRY)/$(PROJECT_NAME)
这样可以将配置集中管理,便于维护。