Files
DataMate/scripts/offline/Makefile.offline
Jerry Yan 9da187d2c6 feat(build): 添加离线构建支持
- 新增 build-offline.sh 脚本实现无网环境构建
- 添加离线版 Dockerfiles 使用本地资源替代网络下载
- 创建 export-cache.sh 脚本在有网环境预下载依赖
- 集成 Makefile.offline.mk 提供便捷的离线构建命令
- 添加详细的离线构建文档和故障排查指南
- 实现基础镜像、BuildKit 缓存和外部资源的一键打包
2026-02-02 21:44:44 +08:00

77 lines
2.3 KiB
Makefile

# Makefile 离线构建扩展
# 将此内容追加到主 Makefile 或单独使用
# 使用方法: make -f Makefile.offline <target>
# 离线构建配置
CACHE_DIR ?= ./build-cache
VERSION ?= latest
# ========== 离线构建目标 ==========
.PHONY: offline-export
offline-export:
@echo "导出离线构建缓存..."
@bash scripts/offline/export-cache.sh $(CACHE_DIR)
.PHONY: offline-build
offline-build:
@echo "使用缓存进行离线构建..."
@bash scripts/offline/build-offline.sh $(CACHE_DIR) $(VERSION)
.PHONY: offline-setup
offline-setup:
@echo "解压并设置离线缓存..."
@if [ ! -d "$(CACHE_DIR)" ]; then \
echo "查找缓存压缩包..."; \
cache_file=$$(ls -t build-cache-*.tar.gz 2>/dev/null | head -1); \
if [ -z "$$cache_file" ]; then \
echo "错误: 未找到缓存压缩包 (build-cache-*.tar.gz)"; \
exit 1; \
fi; \
echo "解压 $$cache_file..."; \
tar -xzf "$$cache_file"; \
fi
@echo "✓ 离线缓存准备完成"
# 单个服务的离线构建
.PHONY: %-offline-build
%-offline-build:
@echo "离线构建 $*..."
@$(eval CACHE_FILE := $(CACHE_DIR)/buildkit/$*-cache)
@$(eval IMAGE_NAME := $(if $(filter deer-flow%,$*),$*,datamate-$*))
@if [ ! -d "$(CACHE_FILE)" ]; then \
echo "错误: $* 的缓存不存在于 $(CACHE_FILE)"; \
exit 1; \
fi
@docker buildx build \
--cache-from type=local,src=$(CACHE_FILE) \
--network=none \
-f scripts/images/$*/Dockerfile \
-t $(IMAGE_NAME):$(VERSION) \
--load \
. || echo "警告: $* 离线构建失败"
# 兼容原 Makefile 的构建目标(离线模式)
.PHONY: build-offline
build-offline: offline-setup
@$(MAKE) offline-build
.PHONY: help-offline
help-offline:
@echo "离线构建命令:"
@echo " make offline-export - 在有网环境导出构建缓存"
@echo " make offline-setup - 解压并准备离线缓存"
@echo " make offline-build - 在无网环境使用缓存构建"
@echo " make <service>-offline-build - 离线构建单个服务"
@echo ""
@echo "示例:"
@echo " # 有网环境导出缓存"
@echo " make offline-export"
@echo ""
@echo " # 传输 build-cache-*.tar.gz 到无网环境"
@echo " scp build-cache-20250202.tar.gz user@offline-server:/path/"
@echo ""
@echo " # 无网环境构建"
@echo " make offline-setup"
@echo " make offline-build"