chaosblade

Форк
0
/
Makefile 
296 строк · 12.7 Кб
1
.PHONY: build clean
2

3
export BLADE_VERSION=1.7.3
4

5
ALLOWGITVERSION=1.8.5
6
GITVERSION:=$(shell git --version | grep ^git | sed 's/^.* //g')
7

8
ifneq ($(strip $(firstword $(sort $(GITVERSION), $(ALLOWGITVERSION)))),$(ALLOWGITVERSION))
9
	ALERTMSG="please update git to >= $(ALLOWGITVERSION)"
10
endif
11

12
BLADE_BIN=blade
13
BLADE_EXPORT=chaosblade-$(BLADE_VERSION).tgz
14
BLADE_SRC_ROOT=$(shell pwd)
15

16
GO_ENV=CGO_ENABLED=1
17
GO_MODULE=GO111MODULE=on
18
VERSION_PKG=github.com/chaosblade-io/chaosblade/version
19
# Specify chaosblade version in docker experiments
20
CRI_BLADE_VERSION=github.com/chaosblade-io/chaosblade-exec-cri/version
21
OS_BLADE_VERSION=github.com/chaosblade-io/chaosblade-exec-os/version
22
JVM_BLADE_VERSION=github.com/chaosblade-io/chaosblade-exec-jvm/version
23
K8S_BLADE_VERSION=github.com/chaosblade-io/chaosblade-operator/version
24

25
GO_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)
26
GO_FLAGS=-ldflags="$(GO_X_FLAGS) -s -w"
27
GO=env $(GO_ENV) $(GO_MODULE) go
28

29
UNAME := $(shell uname)
30

31
BUILD_TARGET=target
32
BUILD_TARGET_FOR_JAVA_CPLUS=build-target
33
BUILD_TARGET_DIR_NAME=chaosblade-$(BLADE_VERSION)
34
BUILD_TARGET_PKG_DIR=$(BUILD_TARGET)/chaosblade-$(BLADE_VERSION)
35
BUILD_TARGET_PKG_NAME=$(BUILD_TARGET)/chaosblade-$(BLADE_VERSION).tar.gz
36

37
BUILD_TARGET_LIB=$(BUILD_TARGET_PKG_DIR)/lib
38
BUILD_TARGET_BIN=$(BUILD_TARGET_PKG_DIR)/bin
39
BUILD_TARGET_YAML=$(BUILD_TARGET_PKG_DIR)/yaml
40
BUILD_TARGET_TAR_NAME=$(BUILD_TARGET_DIR_NAME).tar.gz
41
BUILD_TARGET_PKG_FILE_PATH=$(BUILD_TARGET)/$(BUILD_TARGET_TAR_NAME)
42
BUILD_IMAGE_PATH=build/image/blade
43
BUILD_ARM_IMAGE_PATH=build/image/blade_arm
44
# cache downloaded file
45
BUILD_TARGET_CACHE=$(BUILD_TARGET)/cache
46

47
# chaosblade-exec-os
48
BLADE_EXEC_OS_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-os.git
49
BLADE_EXEC_OS_BRANCH=master
50

51
# chaosblade-exec-middleware
52
BLADE_EXEC_MIDDLEWARE_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-middleware.git
53
BLADE_EXEC_MIDDLEWARE_BRANCH=main
54

55
# chaosblade-exec-cloud
56
BLADE_EXEC_CLOUD_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-cloud.git
57
BLADE_EXEC_CLOUD_BRANCH=main
58

59
# chaosblade-exec-cri
60
BLADE_EXEC_CRI_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-cri.git
61
BLADE_EXEC_CRI_BRANCH=main
62

63
# chaosblade-exec-kubernetes
64
BLADE_OPERATOR_PROJECT=https://github.com/chaosblade-io/chaosblade-operator.git
65
BLADE_OPERATOR_BRANCH=master
66

67
# chaosblade-exec-jvm
68
BLADE_EXEC_JVM_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-jvm.git
69
BLADE_EXEC_JVM_BRANCH=master
70

71
# chaosblade-exec-cplus
72
BLADE_EXEC_CPLUS_PROJECT=https://github.com/chaosblade-io/chaosblade-exec-cplus.git
73
BLADE_EXEC_CPLUS_BRANCH=master
74

75
# cri yaml
76
CRI_YAML_FILE_NAME=chaosblade-cri-spec-$(BLADE_VERSION).yaml
77
CRI_YAML_FILE_PATH=$(BUILD_TARGET_BIN)/$(CRI_YAML_FILE_NAME)
78

79
# check yaml
80
CHECK_YAML_FILE_NAME=chaosblade-check-spec-$(BLADE_VERSION).yaml
81
CHECK_YANL_FILE_OSS=https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/chaosblade-check-spec.yaml
82
CHECK_YAML_FILE_PATH=$(BUILD_TARGET_YAML)/$(CHECK_YAML_FILE_NAME)
83

84
ifeq ($(GOOS), linux)
85
	GO_FLAGS=-ldflags="-linkmode external -extldflags -static $(GO_X_FLAGS) -s -w"
86
endif
87

88
help:
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
96
build: 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
100
build_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
103
build_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

105
build_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
108
build_linux:  ## Build linux version of all scenarios by docker image
109
	make build_with_linux ARGS="cli os cloud middleware cri nsexec kubernetes java cplus check_yaml" upx package
110

111
build_linux_arm:  ## Build linux arm version of all scenarios by docker image
112
	make build_with_linux_arm ARGS="cli os cloud middleware cri nsexec kubernetes java cplus check_yaml" upx package
113

114
build_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
119
pre_build: mkdir_build_target ## Mkdir build target
120
	rm -rf $(BUILD_TARGET_PKG_DIR) $(BUILD_TARGET_PKG_FILE_PATH)
121
	mkdir -p $(BUILD_TARGET_BIN) $(BUILD_TARGET_LIB) $(BUILD_TARGET_YAML)
122

123
# build chaosblade cli: blade
124
.PHONY:cli
125
cli: ## Build blade cli
126
	$(GO) build $(GO_FLAGS) -o $(BUILD_TARGET_PKG_DIR)/blade ./cli
127

128
nsexec: ## Build nsexecgo
129
	/usr/local/musl/bin/musl-gcc -static nsexec.c -o $(BUILD_TARGET_PKG_DIR)/bin/nsexec
130

131
os: ## Build basic resource experimental scenarios.
132
ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-os, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-os))
133
	git clone -b $(BLADE_EXEC_OS_BRANCH) $(BLADE_EXEC_OS_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-os
134
else
135
ifdef ALERTMSG
136
	$(error $(ALERTMSG))
137
endif
138
	git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-os pull origin $(BLADE_EXEC_OS_BRANCH)
139
endif
140
	make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-os
141
	cp $(BUILD_TARGET_CACHE)/chaosblade-exec-os/$(BUILD_TARGET_BIN)/* $(BUILD_TARGET_BIN)
142
	cp $(BUILD_TARGET_CACHE)/chaosblade-exec-os/$(BUILD_TARGET_YAML)/* $(BUILD_TARGET_YAML)
143

144
middleware: ## Build middleware experimental scenarios.
145
ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-middleware, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware))
146
	git clone -b $(BLADE_EXEC_MIDDLEWARE_BRANCH) $(BLADE_EXEC_MIDDLEWARE_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware
147
else
148
ifdef ALERTMSG
149
	$(error $(ALERTMSG))
150
endif
151
	git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware pull origin $(BLADE_EXEC_MIDDLEWARE_BRANCH)
152
endif
153
	make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware
154
	cp $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware/$(BUILD_TARGET_BIN)/* $(BUILD_TARGET_BIN)
155
	cp $(BUILD_TARGET_CACHE)/chaosblade-exec-middleware/$(BUILD_TARGET_YAML)/* $(BUILD_TARGET_YAML)
156

157
cloud: ## Build cloud experimental scenarios.
158
ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-cloud, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-cloud))
159
	git clone -b $(BLADE_EXEC_CLOUD_BRANCH) $(BLADE_EXEC_CLOUD_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-cloud
160
else
161
ifdef ALERTMSG
162
	$(error $(ALERTMSG))
163
endif
164
	git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-cloud pull origin $(BLADE_EXEC_CLOUD_BRANCH)
165
endif
166
	make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-cloud
167
	cp $(BUILD_TARGET_CACHE)/chaosblade-exec-cloud/$(BUILD_TARGET_BIN)/* $(BUILD_TARGET_BIN)
168
	cp $(BUILD_TARGET_CACHE)/chaosblade-exec-cloud/$(BUILD_TARGET_YAML)/* $(BUILD_TARGET_YAML)
169

170

171
kubernetes: ## Build kubernetes experimental scenarios.
172
ifneq ($(BUILD_TARGET_CACHE)/chaosblade-operator, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-operator))
173
	git clone -b $(BLADE_OPERATOR_BRANCH) $(BLADE_OPERATOR_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-operator
174
else
175
	git -C $(BUILD_TARGET_CACHE)/chaosblade-operator pull origin $(BLADE_OPERATOR_BRANCH)
176
endif
177
	make -C $(BUILD_TARGET_CACHE)/chaosblade-operator
178
	cp $(BUILD_TARGET_CACHE)/chaosblade-operator/$(BUILD_TARGET_BIN)/* $(BUILD_TARGET_BIN)
179
	cp $(BUILD_TARGET_CACHE)/chaosblade-operator/$(BUILD_TARGET_YAML)/* $(BUILD_TARGET_YAML)
180

181
cri: ## Build cri experimental scenarios.
182
ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-cri, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-cri))
183
	git clone -b $(BLADE_EXEC_CRI_BRANCH) $(BLADE_EXEC_CRI_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-cri
184
else
185
	git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-cri pull origin $(BLADE_EXEC_CRI_BRANCH)
186
endif
187
	make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-cri
188
	cp $(BUILD_TARGET_CACHE)/chaosblade-exec-cri/$(BUILD_TARGET_YAML)/* $(BUILD_TARGET_YAML)
189

190

191
java: ## Build java experimental scenarios.
192
ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-jvm, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-jvm))
193
	git clone -b $(BLADE_EXEC_JVM_BRANCH) $(BLADE_EXEC_JVM_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-jvm
194
else
195
ifdef ALERTMSG
196
	$(error $(ALERTMSG))
197
endif
198
	git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-jvm pull origin $(BLADE_EXEC_JVM_BRANCH)
199
endif
200
	make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-jvm
201
	cp -R $(BUILD_TARGET_CACHE)/chaosblade-exec-jvm/$(BUILD_TARGET_FOR_JAVA_CPLUS)/$(BUILD_TARGET_DIR_NAME)/* $(BUILD_TARGET_PKG_DIR)
202

203
cplus: ## Build c/c++ experimental scenarios.
204
ifneq ($(BUILD_TARGET_CACHE)/chaosblade-exec-cplus, $(wildcard $(BUILD_TARGET_CACHE)/chaosblade-exec-cplus))
205
	git clone -b $(BLADE_EXEC_CPLUS_BRANCH) $(BLADE_EXEC_CPLUS_PROJECT) $(BUILD_TARGET_CACHE)/chaosblade-exec-cplus
206
else
207
ifdef ALERTMSG
208
	$(error $(ALERTMSG))
209
endif
210
	git -C $(BUILD_TARGET_CACHE)/chaosblade-exec-cplus pull origin $(BLADE_EXEC_CPLUS_BRANCH)
211
endif
212
	make -C $(BUILD_TARGET_CACHE)/chaosblade-exec-cplus
213
	cp -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
217
build_image: ## Build chaosblade-tool image
218
	rm -rf $(BUILD_IMAGE_PATH)/$(BUILD_TARGET_DIR_NAME)
219
	cp -R $(BUILD_TARGET_PKG_NAME) $(BUILD_IMAGE_PATH)
220
	tar zxvf $(BUILD_TARGET_PKG_NAME) -C $(BUILD_IMAGE_PATH)
221
	docker build -f $(BUILD_IMAGE_PATH)/Dockerfile \
222
		--build-arg BLADE_VERSION=$(BLADE_VERSION) \
223
		-t chaosbladeio/chaosblade-tool:$(BLADE_VERSION) \
224
		$(BUILD_IMAGE_PATH)
225
	rm -rf $(BUILD_IMAGE_PATH)/$(BUILD_TARGET_DIR_NAME)
226

227
build_image_arm: ## Build chaosblade-tool-arm image
228
	rm -rf $(BUILD_ARM_IMAGE_PATH)/$(BUILD_TARGET_DIR_NAME)
229
	cp -R $(BUILD_TARGET_PKG_NAME) $(BUILD_ARM_IMAGE_PATH)
230
	tar zxvf $(BUILD_TARGET_PKG_NAME) -C $(BUILD_ARM_IMAGE_PATH)
231
	docker 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)
236
	rm -rf $(BUILD_ARM_IMAGE_PATH)/$(BUILD_TARGET_DIR_NAME)
237

238
# build docker image with multi-stage builds
239
docker_image: clean ## Build chaosblade image
240
	docker build -f ./Dockerfile \
241
		--build-arg BLADE_VERSION=$(BLADE_VERSION) \
242
		-t chaosblade:$(BLADE_VERSION) $(BLADE_SRC_ROOT)
243

244
build_upx_image:
245
	docker build --rm \
246
 		-f build/image/upx/Dockerfile \
247
 		-t chaosblade-upx:3.96 build/image/upx
248

249
##@ Other
250
upx: ## Upx compression by docker image
251
	docker run --rm \
252
    		-w $(shell pwd)/$(BUILD_TARGET_PKG_DIR) \
253
    		-v $(shell pwd)/$(BUILD_TARGET_PKG_DIR):$(shell pwd)/$(BUILD_TARGET_PKG_DIR) \
254
     		chaosbladeio/chaosblade-upx:3.96 \
255
    		--best \
256
    		blade $(shell pwd)/$(BUILD_TARGET_PKG_DIR)/bin/*
257

258
test: ## Test
259
	$(GO) test -race -coverprofile=coverage.txt -covermode=atomic ./...
260

261
# clean all build result
262
clean: ## Clean
263
	$(GO) clean ./...
264
	rm -rf $(BUILD_TARGET)
265
	rm -rf $(BUILD_IMAGE_PATH)/$(BUILD_TARGET_DIR_NAME)
266

267
package: ## Generate the tar packages
268
	tar zcvf $(BUILD_TARGET_PKG_FILE_PATH) -C $(BUILD_TARGET) $(BUILD_TARGET_DIR_NAME)
269

270
check_yaml:
271
	wget "$(CHECK_YANL_FILE_OSS)" -O $(CHECK_YAML_FILE_PATH)
272

273
## Select scenario build linux version by docker image
274
build_linux_with_arg:
275
	docker 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 \
280
		chaosbladeio/chaosblade-build-musl:latest build_with $$ARGS
281

282
## Select scenario build linux arm version by docker image
283
build_linux_arm_with_arg:
284
	docker run --rm --privileged multiarch/qemu-user-static:register --reset
285
	docker 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 \
290
		chaosbladeio/chaosblade-build-arm:latest build_with $$ARGS
291

292
# create cache dir
293
mkdir_build_target:
294
ifneq ($(BUILD_TARGET_CACHE), $(wildcard $(BUILD_TARGET_CACHE)))
295
	mkdir -p $(BUILD_TARGET_CACHE)
296
endif
297

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.