# 应用配置 APP_NAME := golang-demo VERSION := 1.0.0 BUILD_TIME := $(shell date -u +"%Y-%m-%dT%H:%M:%SZ") GIT_COMMIT := $(shell git rev-parse --short HEAD) # Go配置 GOCMD := go GOBUILD := $(GOCMD) build GOCLEAN := $(GOCMD) clean GOTEST := $(GOCMD) test GOGET := $(GOCMD) get GOMOD := $(GOCMD) mod # Docker配置 DOCKER_IMAGE := $(APP_NAME):$(VERSION) DOCKER_LATEST := $(APP_NAME):latest # 构建标志 LDFLAGS := -ldflags="-w -s -X main.buildTime=$(BUILD_TIME) -X main.gitCommit=$(GIT_COMMIT)" .PHONY: help build test clean run deps docker-build docker-run docker-stop docker-clean all # 默认目标 all: deps test build # 显示帮助信息 help: @echo "Available commands:" @echo " deps - Download dependencies" @echo " test - Run tests" @echo " build - Build the application" @echo " run - Run the application" @echo " clean - Clean build artifacts" @echo " docker-build - Build Docker image" @echo " docker-run - Run Docker container" @echo " docker-stop - Stop Docker container" @echo " docker-clean - Clean Docker images" @echo " dev - Run in development mode" @echo " prod - Run in production mode" # 下载依赖 deps: @echo "Downloading dependencies..." $(GOMOD) download $(GOMOD) verify $(GOMOD) tidy # 运行测试 test: @echo "Running tests..." $(GOTEST) -v ./... $(GOCMD) vet ./... # 构建应用 build: @echo "Building $(APP_NAME)..." CGO_ENABLED=0 GOOS=linux $(GOBUILD) $(LDFLAGS) -o $(APP_NAME) . # 运行应用 run: build @echo "Running $(APP_NAME)..." ./$(APP_NAME) # 开发模式运行 dev: @echo "Running in development mode..." GIN_MODE=debug $(GOCMD) run . # 生产模式运行 prod: @echo "Running in production mode..." GIN_MODE=release ./$(APP_NAME) # 清理构建产物 clean: @echo "Cleaning..." $(GOCLEAN) rm -f $(APP_NAME) # 构建Docker镜像 docker-build: @echo "Building Docker image..." docker build \ --build-arg BUILD_TIME="$(BUILD_TIME)" \ --build-arg GIT_COMMIT="$(GIT_COMMIT)" \ -t $(DOCKER_IMAGE) \ -t $(DOCKER_LATEST) . # 运行Docker容器 docker-run: docker-build @echo "Running Docker container..." docker run -d \ --name $(APP_NAME) \ -p 8080:8080 \ -e GIN_MODE=release \ $(DOCKER_LATEST) # 停止Docker容器 docker-stop: @echo "Stopping Docker container..." docker stop $(APP_NAME) || true docker rm $(APP_NAME) || true # 清理Docker镜像 docker-clean: @echo "Cleaning Docker images..." docker rmi $(DOCKER_IMAGE) || true docker rmi $(DOCKER_LATEST) || true docker image prune -f # 重新部署 redeploy: docker-stop docker-run # 查看日志 logs: docker logs -f $(APP_NAME) # 健康检查 health: @echo "Checking application health..." curl -f http://localhost:8080/health || echo "Health check failed" # 显示版本信息 version: @echo "App: $(APP_NAME)" @echo "Version: $(VERSION)" @echo "Build Time: $(BUILD_TIME)" @echo "Git Commit: $(GIT_COMMIT)"