chaosblade
/
Makefile
296 строк · 12.7 Кб
1.PHONY: build clean
2
3export BLADE_VERSION=1.7.3
4
5ALLOWGITVERSION=1.8.5
6GITVERSION:=$(shell git --version | grep ^git | sed 's/^.* //g')
7
8ifneq ($(strip $(firstword $(sort $(GITVERSION), $(ALLOWGITVERSION)))),$(ALLOWGITVERSION))
9ALERTMSG="please update git to >= $(ALLOWGITVERSION)"
10endif
11
12BLADE_BIN=blade
13BLADE_EXPORT=chaosblade-$(BLADE_VERSION).tgz
14BLADE_SRC_ROOT=$(shell pwd)
15
16GO_ENV=CGO_ENABLED=1
17GO_MODULE=GO111MODULE=on
18VERSION_PKG=github.com/chaosblade-io/chaosblade/version
19# Specify chaosblade version in docker experiments
20CRI_BLADE_VERSION=github.com/chaosblade-io/chaosblade-exec-cri/version
21OS_BLADE_VERSION=github.com/chaosblade-io/chaosblade-exec-os/version
22JVM_BLADE_VERSION=github.com/chaosblade-io/chaosblade-exec-jvm/version
23K8S_BLADE_VERSION=github.com/chaosblade-io/chaosblade-operator/version
24
25GO_X_FLAGS=-X ${VERSION_PKG}.Ver=$(BLADE_VERSION) -X '${VERSION_PKG}.Env=`uname -mv`' -X '${VERSION_PKG}.BuildTime=`date`' -X ${CRI_BLADE_VERSION}.BladeVersion=$(BLADE_VERSION) -X ${OS_BLADE_VERSION}.BladeVersion=$(BLADE_VERSION) -X ${JVM_BLADE_VERSION}.BladeVersion=$(BLADE_VERSION) -X ${K8S_BLADE_VERSION}.BladeVersion=$(BLADE_VERSION)
26GO_FLAGS=-ldflags="$(GO_X_FLAGS) -s -w"
27GO=env $(GO_ENV) $(GO_MODULE) go
28
29UNAME := $(shell uname)
30
31BUILD_TARGET=target
32BUILD_TARGET_FOR_JAVA_CPLUS=build-target
33BUILD_TARGET_DIR_NAME=chaosblade-$(BLADE_VERSION)
34BUILD_TARGET_PKG_DIR=$(BUILD_TARGET)/chaosblade-$(BLADE_VERSION)
35BUILD_TARGET_PKG_NAME=$(BUILD_TARGET)/chaosblade-$(BLADE_VERSION).tar.gz
36
37BUILD_TARGET_LIB=$(BUILD_TARGET_PKG_DIR)/lib
38BUILD_TARGET_BIN=$(BUILD_TARGET_PKG_DIR)/bin
39BUILD_TARGET_YAML=$(BUILD_TARGET_PKG_DIR)/yaml
40BUILD_TARGET_TAR_NAME=$(BUILD_TARGET_DIR_NAME).tar.gz
41BUILD_TARGET_PKG_FILE_PATH=$(BUILD_TARGET)/$(BUILD_TARGET_TAR_NAME)
42BUILD_IMAGE_PATH=build/image/blade
43BUILD_ARM_IMAGE_PATH=build/image/blade_arm
44# cache downloaded file
45BUILD_TARGET_CACHE=$(BUILD_TARGET)/cache
46
47# chaosblade-exec-os
48BLADE_EXEC_OS_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-os.git
49BLADE_EXEC_OS_BRANCH=master
50
51# chaosblade-exec-middleware
52BLADE_EXEC_MIDDLEWARE_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-middleware.git
53BLADE_EXEC_MIDDLEWARE_BRANCH=main
54
55# chaosblade-exec-cloud
56BLADE_EXEC_CLOUD_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-cloud.git
57BLADE_EXEC_CLOUD_BRANCH=main
58
59# chaosblade-exec-cri
60BLADE_EXEC_CRI_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-cri.git
61BLADE_EXEC_CRI_BRANCH=main
62
63# chaosblade-exec-kubernetes
64BLADE_OPERATOR_PROJECT=https://github.com/chaosblade-io/chaosblade-operator.git
65BLADE_OPERATOR_BRANCH=master
66
67# chaosblade-exec-jvm
68BLADE_EXEC_JVM_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-jvm.git
69BLADE_EXEC_JVM_BRANCH=master
70
71# chaosblade-exec-cplus
72BLADE_EXEC_CPLUS_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-cplus.git
73BLADE_EXEC_CPLUS_BRANCH=master
74
75# cri yaml
76CRI_YAML_FILE_NAME=chaosblade-cri-spec-$(BLADE_VERSION).yaml
77CRI_YAML_FILE_PATH=$(BUILD_TARGET_BIN)/$(CRI_YAML_FILE_NAME)
78
79# check yaml
80CHECK_YAML_FILE_NAME=chaosblade-check-spec-$(BLADE_VERSION).yaml
81CHECK_YANL_FILE_OSS=https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/chaosblade-check-spec.yaml
82CHECK_YAML_FILE_PATH=$(BUILD_TARGET_YAML)/$(CHECK_YAML_FILE_NAME)
83
84ifeq ($(GOOS), linux)
85GO_FLAGS=-ldflags="-linkmode external -extldflags -static $(GO_X_FLAGS) -s -w"
86endif
87
88help:
89@echo ''
90@echo 'You can compile each project of ChaosBlade on Mac or Linux platform,'
91@echo 'You can use docker to compile cross-platform,compile the package running on Linux platform.'
92@echo 'For details refer to https://github.com/chaosblade-io/chaosblade/wiki/ChaosBlade-Projects-Compilation'
93@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>...\033[0m\n"} /^[a-zA-Z0-9_-]+:.*?##/ { printf " \033[36m%-20s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
94
95##@ Build
96build: pre_build cli nsexec os cloud middleware cri cplus java kubernetes package check_yaml ## Build all scenarios
97#build: pre_build cli nsexec os cloud middleware cri cplus java kubernetes upx package check_yaml ## Build all scenarios
98
99# for example: make build_with cli
100build_with: pre_build ## Select scenario build, for example `make build_with cli os cloud docker cri kubernetes java cplus`
101
102# for example: make build_with_linux cli os
103build_with_linux: pre_build build_linux_with_arg ## Select scenario build linux version by docker cri image, for example `make build_with_linux ARGS="cli os"`
104
105build_with_linux_arm: pre_build build_linux_arm_with_arg ## Select scenario build linux version by docker cri image, for example `make build_with_linux_arm ARGS="cli os"`
106
107# build chaosblade linux version by docker image
108build_linux: ## Build linux version of all scenarios by docker image
109make build_with_linux ARGS="cli os cloud middleware cri nsexec kubernetes java cplus check_yaml" upx package
110
111build_linux_arm: ## Build linux arm version of all scenarios by docker image
112make build_with_linux_arm ARGS="cli os cloud middleware cri nsexec kubernetes java cplus check_yaml" upx package
113
114build_darwin: pre_build cli os cloud middleware cri cplus java kubernetes upx package check_yaml ## Build all scenarios darwin version
115
116##@ Build sub
117
118# create dir or download necessary file
119pre_build: mkdir_build_target ## Mkdir build target
120rm -rf $(BUILD_TARGET_PKG_DIR) $(BUILD_TARGET_PKG_FILE_PATH)
121mkdir -p $(BUILD_TARGET_BIN) $(BUILD_TARGET_LIB) $(BUILD_TARGET_YAML)
122
123# build chaosblade cli: blade
124.PHONY:cli
125cli: ## Build blade cli
126$(GO) build $(GO_FLAGS) -o $(BUILD_TARGET_PKG_DIR)/blade ./cli
127
128nsexec: ## Build nsexecgo
129/usr/local/musl/bin/musl-gcc -static nsexec.c -o $(BUILD_TARGET_PKG_DIR)/bin/nsexec
130
131os: ## Build basic resource experimental scenarios.
132ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-os, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-os))
133git clone -b $(BLADE_EXEC_OS_BRANCH) $(BLADE_EXEC_OS_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-os
134else
135ifdef ALERTMSG
136$(error $(ALERTMSG))
137endif
138git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-os pull origin $(BLADE_EXEC_OS_BRANCH)
139endif
140make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-os
141cp $(BUILD_TARGET_CACHE)/chaosblade-exec-os/$(BUILD_TARGET_BIN)/* $(BUILD_TARGET_BIN)
142cp $(BUILD_TARGET_CACHE)/chaosblade-exec-os/$(BUILD_TARGET_YAML)/* $(BUILD_TARGET_YAML)
143
144middleware: ## Build middleware experimental scenarios.
145ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-middleware, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware))
146git clone -b $(BLADE_EXEC_MIDDLEWARE_BRANCH) $(BLADE_EXEC_MIDDLEWARE_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware
147else
148ifdef ALERTMSG
149$(error $(ALERTMSG))
150endif
151git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware pull origin $(BLADE_EXEC_MIDDLEWARE_BRANCH)
152endif
153make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware
154cp $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware/$(BUILD_TARGET_BIN)/* $(BUILD_TARGET_BIN)
155cp $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware/$(BUILD_TARGET_YAML)/* $(BUILD_TARGET_YAML)
156
157cloud: ## Build cloud experimental scenarios.
158ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-cloud, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-cloud))
159git clone -b $(BLADE_EXEC_CLOUD_BRANCH) $(BLADE_EXEC_CLOUD_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-cloud
160else
161ifdef ALERTMSG
162$(error $(ALERTMSG))
163endif
164git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-cloud pull origin $(BLADE_EXEC_CLOUD_BRANCH)
165endif
166make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-cloud
167cp $(BUILD_TARGET_CACHE)/chaosblade-exec-cloud/$(BUILD_TARGET_BIN)/* $(BUILD_TARGET_BIN)
168cp $(BUILD_TARGET_CACHE)/chaosblade-exec-cloud/$(BUILD_TARGET_YAML)/* $(BUILD_TARGET_YAML)
169
170
171kubernetes: ## Build kubernetes experimental scenarios.
172ifneq ($(BUILD_TARGET_CACHE)/chaosblade-operator, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-operator))
173git clone -b $(BLADE_OPERATOR_BRANCH) $(BLADE_OPERATOR_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-operator
174else
175git -C $(BUILD_TARGET_CACHE)/chaosblade-operator pull origin $(BLADE_OPERATOR_BRANCH)
176endif
177make -C $(BUILD_TARGET_CACHE)/chaosblade-operator
178cp $(BUILD_TARGET_CACHE)/chaosblade-operator/$(BUILD_TARGET_BIN)/* $(BUILD_TARGET_BIN)
179cp $(BUILD_TARGET_CACHE)/chaosblade-operator/$(BUILD_TARGET_YAML)/* $(BUILD_TARGET_YAML)
180
181cri: ## Build cri experimental scenarios.
182ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-cri, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-cri))
183git clone -b $(BLADE_EXEC_CRI_BRANCH) $(BLADE_EXEC_CRI_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-cri
184else
185git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-cri pull origin $(BLADE_EXEC_CRI_BRANCH)
186endif
187make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-cri
188cp $(BUILD_TARGET_CACHE)/chaosblade-exec-cri/$(BUILD_TARGET_YAML)/* $(BUILD_TARGET_YAML)
189
190
191java: ## Build java experimental scenarios.
192ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-jvm, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-jvm))
193git clone -b $(BLADE_EXEC_JVM_BRANCH) $(BLADE_EXEC_JVM_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-jvm
194else
195ifdef ALERTMSG
196$(error $(ALERTMSG))
197endif
198git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-jvm pull origin $(BLADE_EXEC_JVM_BRANCH)
199endif
200make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-jvm
201cp -R $(BUILD_TARGET_CACHE)/chaosblade-exec-jvm/$(BUILD_TARGET_FOR_JAVA_CPLUS)/$(BUILD_TARGET_DIR_NAME)/* $(BUILD_TARGET_PKG_DIR)
202
203cplus: ## Build c/c++ experimental scenarios.
204ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-cplus, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-cplus))
205git clone -b $(BLADE_EXEC_CPLUS_BRANCH) $(BLADE_EXEC_CPLUS_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-cplus
206else
207ifdef ALERTMSG
208$(error $(ALERTMSG))
209endif
210git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-cplus pull origin $(BLADE_EXEC_CPLUS_BRANCH)
211endif
212make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-cplus
213cp -R $(BUILD_TARGET_CACHE)/chaosblade-exec-cplus/$(BUILD_TARGET_FOR_JAVA_CPLUS)/$(BUILD_TARGET_DIR_NAME)/* $(BUILD_TARGET_PKG_DIR)
214
215##@ Build image
216# build chaosblade image for chaos
217build_image: ## Build chaosblade-tool image
218rm -rf $(BUILD_IMAGE_PATH)/$(BUILD_TARGET_DIR_NAME)
219cp -R $(BUILD_TARGET_PKG_NAME) $(BUILD_IMAGE_PATH)
220tar zxvf $(BUILD_TARGET_PKG_NAME) -C $(BUILD_IMAGE_PATH)
221docker build -f $(BUILD_IMAGE_PATH)/Dockerfile \
222--build-arg BLADE_VERSION=$(BLADE_VERSION) \
223-t chaosbladeio/chaosblade-tool:$(BLADE_VERSION) \
224$(BUILD_IMAGE_PATH)
225rm -rf $(BUILD_IMAGE_PATH)/$(BUILD_TARGET_DIR_NAME)
226
227build_image_arm: ## Build chaosblade-tool-arm image
228rm -rf $(BUILD_ARM_IMAGE_PATH)/$(BUILD_TARGET_DIR_NAME)
229cp -R $(BUILD_TARGET_PKG_NAME) $(BUILD_ARM_IMAGE_PATH)
230tar zxvf $(BUILD_TARGET_PKG_NAME) -C $(BUILD_ARM_IMAGE_PATH)
231docker buildx build -f $(BUILD_ARM_IMAGE_PATH)/Dockerfile \
232--platform=linux/arm64 \
233--build-arg BLADE_VERSION=$(BLADE_VERSION) \
234-t chaosbladeio/chaosblade-tool-arm64:$(BLADE_VERSION) \
235$(BUILD_ARM_IMAGE_PATH)
236rm -rf $(BUILD_ARM_IMAGE_PATH)/$(BUILD_TARGET_DIR_NAME)
237
238# build docker image with multi-stage builds
239docker_image: clean ## Build chaosblade image
240docker build -f ./Dockerfile \
241--build-arg BLADE_VERSION=$(BLADE_VERSION) \
242-t chaosblade:$(BLADE_VERSION) $(BLADE_SRC_ROOT)
243
244build_upx_image:
245docker build --rm \
246-f build/image/upx/Dockerfile \
247-t chaosblade-upx:3.96 build/image/upx
248
249##@ Other
250upx: ## Upx compression by docker image
251docker run --rm \
252-w $(shell pwd)/$(BUILD_TARGET_PKG_DIR) \
253-v $(shell pwd)/$(BUILD_TARGET_PKG_DIR):$(shell pwd)/$(BUILD_TARGET_PKG_DIR) \
254chaosbladeio/chaosblade-upx:3.96 \
255--best \
256blade $(shell pwd)/$(BUILD_TARGET_PKG_DIR)/bin/*
257
258test: ## Test
259$(GO) test -race -coverprofile=coverage.txt -covermode=atomic ./...
260
261# clean all build result
262clean: ## Clean
263$(GO) clean ./...
264rm -rf $(BUILD_TARGET)
265rm -rf $(BUILD_IMAGE_PATH)/$(BUILD_TARGET_DIR_NAME)
266
267package: ## Generate the tar packages
268tar zcvf $(BUILD_TARGET_PKG_FILE_PATH) -C $(BUILD_TARGET) $(BUILD_TARGET_DIR_NAME)
269
270check_yaml:
271wget "$(CHECK_YANL_FILE_OSS)" -O $(CHECK_YAML_FILE_PATH)
272
273## Select scenario build linux version by docker image
274build_linux_with_arg:
275docker run --rm \
276-v $(shell echo -n ${GOPATH}):/go \
277-w /go/src/github.com/chaosblade-io/chaosblade \
278-v ~/.m2/repository:/root/.m2/repository \
279-v $(shell pwd):/go/src/github.com/chaosblade-io/chaosblade \
280chaosbladeio/chaosblade-build-musl:latest build_with $$ARGS
281
282## Select scenario build linux arm version by docker image
283build_linux_arm_with_arg:
284docker run --rm --privileged multiarch/qemu-user-static:register --reset
285docker run --rm \
286-v $(shell echo -n ${GOPATH}):/go \
287-w /go/src/github.com/chaosblade-io/chaosblade \
288-v ~/.m2/repository:/root/.m2/repository \
289-v $(shell pwd):/go/src/github.com/chaosblade-io/chaosblade \
290chaosbladeio/chaosblade-build-arm:latest build_with $$ARGS
291
292# create cache dir
293mkdir_build_target:
294ifneq ($(BUILD_TARGET_CACHE), $(wildcard $(BUILD_TARGET_CACHE)))
295mkdir -p $(BUILD_TARGET_CACHE)
296endif
297