背景
- 以前学的一些东西需要记录下
Makefile 编写
- 以自己实际项目来阐述每个的用法
-
目录结构
15324023686513.jpg
- 代码
PROJECT_ROOT?=$(shell pwd)
//项目名称
PROJECT_PKG?=ai-exam
//可执行文件名称
TARGET=exam
TARGET_PKG=$(PROJECT_PKG)/cmd
IMAGE_PREFIX_PRD= 线上环境仓库名称
IMAGE_PREFIX?=测试环境仓库名称
TARGET_IMAGE=$(IMAGE_PREFIX)/$(TARGET):0.1.0
TARGET_IMAGE_PRD=$(IMAGE_PREFIX_PRD)/$(TARGET):0.1.0
// make 执行image-tst
all:image-tst
// 编译项目
binary:
CGO_ENABLED=0 go build -ldflags "-X main.version=$(GITVERSION)" \
-o /go/src/$(PROJECT_PKG)/dist/$(TARGET) $(TARGET_PKG)
// 进入容器编译项目、并将项目的可执行文件移出
target:
mkdir -p $(PROJECT_ROOT)/dist
docker run --rm -i -v $(PROJECT_ROOT):/go/src/$(PROJECT_PKG) \
-w /go/src/$(PROJECT_PKG) golang:1.10.2 \
make binary GITVERSION=`git describe --tags --always --dirty`
//测试环境打包成docker镜像
image-tst:target
temp=`mktemp -d` && \
cp $(PROJECT_ROOT)/dist/$(TARGET) $$temp && cp Dockerfile $$temp && \
docker build -t $(TARGET_IMAGE) $$temp && \
rm -rf $$temp
push-tst:
docker push $(TARGET_IMAGE)
//线上环境打包成docker镜像
image-prd:target
temp=`mktemp -d` && \
cp $(PROJECT_ROOT)/dist/$(TARGET) $$temp && cp Dockerfile $$temp && \
docker build -t $(IMAGE_PREFIX_PRD) $$temp && \
rm -rf $$temp
push-prd:
docker push $(TARGET_IMAGE_PRD)
// make clean
clean:
rm -rf dist
.PHONY: image target clean push binary
网友评论