krakend-ce
/
Makefile
179 строк · 6.4 Кб
1.PHONY: all build test
2
3# This Makefile is a simple example that demonstrates usual steps to build a binary that can be run in the same
4# architecture that was compiled in. The "ldflags" in the build assure that any needed dependency is included in the
5# binary and no external dependencies are needed to run the service.
6
7BIN_NAME :=krakend
8OS := $(shell uname | tr '[:upper:]' '[:lower:]')
9MODULE := github.com/krakendio/krakend-ce/v2
10VERSION := 2.7.1
11SCHEMA_VERSION := $(shell echo "${VERSION}" | cut -d '.' -f 1,2)
12GIT_COMMIT := $(shell git rev-parse --short=7 HEAD)
13PKGNAME := krakend
14LICENSE := Apache 2.0
15VENDOR=
16URL := http://krakend.io
17RELEASE := 0
18USER := krakend
19ARCH := amd64
20DESC := High performance API gateway. Aggregate, filter, manipulate and add middlewares
21MAINTAINER := Daniel Ortiz <dortiz@krakend.io>
22DOCKER_WDIR := /tmp/fpm
23DOCKER_FPM := devopsfaith/fpm
24GOLANG_VERSION := 1.22.7
25GLIBC_VERSION := $(shell sh find_glibc.sh)
26ALPINE_VERSION := 3.19
27OS_TAG :=
28EXTRA_LDFLAGS :=
29
30FPM_OPTS=-s dir -v $(VERSION) -n $(PKGNAME) \
31--license "$(LICENSE)" \
32--vendor "$(VENDOR)" \
33--maintainer "$(MAINTAINER)" \
34--architecture $(ARCH) \
35--url "$(URL)" \
36--description "$(DESC)" \
37--config-files etc/ \
38--verbose
39
40DEB_OPTS= -t deb --deb-user $(USER) \
41--depends ca-certificates \
42--depends rsyslog \
43--depends logrotate \
44--before-remove builder/scripts/prerm.deb \
45--after-remove builder/scripts/postrm.deb \
46--before-install builder/scripts/preinst.deb
47
48RPM_OPTS =--rpm-user $(USER) \
49--depends rsyslog \
50--depends logrotate \
51--before-install builder/scripts/preinst.rpm \
52--before-remove builder/scripts/prerm.rpm \
53--after-remove builder/scripts/postrm.rpm
54
55all: test
56
57build:
58@echo "Building the binary..."
59@go get .
60@go build -ldflags="-X ${MODULE}/pkg.Version=${VERSION} -X github.com/luraproject/lura/v2/core.KrakendVersion=${VERSION} \
61-X github.com/luraproject/lura/v2/core.GoVersion=${GOLANG_VERSION} \
62-X github.com/luraproject/lura/v2/core.GlibcVersion=${GLIBC_VERSION} ${EXTRA_LDFLAGS}" \
63-o ${BIN_NAME} ./cmd/krakend-ce
64@echo "You can now use ./${BIN_NAME}"
65
66test: build
67go test -v ./tests
68
69# Build KrakenD using docker (defaults to whatever the golang container uses)
70build_on_docker: docker-builder-linux
71docker run --rm -it -v "${PWD}:/app" -w /app krakend/builder:${VERSION}-linux-generic sh -c "git config --global --add safe.directory /app && make -e build"
72
73# Build the container using the Dockerfile (alpine)
74docker:
75docker build --no-cache --pull --build-arg GOLANG_VERSION=${GOLANG_VERSION} --build-arg ALPINE_VERSION=${ALPINE_VERSION} -t devopsfaith/krakend:${VERSION} .
76
77docker-builder:
78docker build --no-cache --pull --build-arg GOLANG_VERSION=${GOLANG_VERSION} --build-arg ALPINE_VERSION=${ALPINE_VERSION} -t krakend/builder:${VERSION} -f Dockerfile-builder .
79
80docker-builder-linux:
81docker build --no-cache --pull --build-arg GOLANG_VERSION=${GOLANG_VERSION} -t krakend/builder:${VERSION}-linux-generic -f Dockerfile-builder-linux .
82
83benchmark:
84@mkdir -p bench_res
85@touch bench_res/${GIT_COMMIT}.out
86@docker run --rm -d --name krakend -v "${PWD}/tests/fixtures:/etc/krakend" -p 8080:8080 devopsfaith/krakend:${VERSION} run -dc /etc/krakend/bench.json
87@sleep 2
88@docker run --rm -it --link krakend peterevans/vegeta sh -c \
89"echo 'GET http://krakend:8080/test' | vegeta attack -rate=0 -duration=30s -max-workers=300 | tee results.bin | vegeta report" > bench_res/${GIT_COMMIT}.out
90@docker stop krakend
91@cat bench_res/${GIT_COMMIT}.out
92
93security_scan:
94@mkdir -p sec_scan
95@touch sec_scan/${GIT_COMMIT}.out
96@docker run --rm -d --name krakend -v "${PWD}/tests/fixtures:/etc/krakend" -p 8080:8080 devopsfaith/krakend:${VERSION} run -dc /etc/krakend/bench.json
97@docker run --rm -it --link krakend instrumentisto/nmap --script vuln krakend > sec_scan/${GIT_COMMIT}.out
98@docker stop krakend
99@cat sec_scan/${GIT_COMMIT}.out
100
101builder/skel/%/etc/init.d/krakend: builder/files/krakend.init
102mkdir -p "$(dir $@)"
103cp builder/files/krakend.init "$@"
104
105builder/skel/%/usr/bin/krakend: krakend
106mkdir -p "$(dir $@)"
107cp krakend "$@"
108
109builder/skel/%/etc/krakend/krakend.json: krakend.json
110mkdir -p "$(dir $@)"
111cp krakend.json "$@"
112
113builder/skel/%/lib/systemd/system/krakend.service: builder/files/krakend.service
114mkdir -p "$(dir $@)"
115cp builder/files/krakend.service "$@"
116
117builder/skel/%/usr/lib/systemd/system/krakend.service: builder/files/krakend.service
118mkdir -p "$(dir $@)"
119cp builder/files/krakend.service "$@"
120
121builder/skel/%/etc/rsyslog.d/krakend.conf: builder/files/krakend.conf-rsyslog
122mkdir -p "$(dir $@)"
123cp builder/files/krakend.conf-rsyslog "$@"
124
125builder/skel/%/etc/logrotate.d/krakend: builder/files/krakend-logrotate
126mkdir -p "$(dir $@)"
127cp builder/files/krakend-logrotate "$@"
128
129.PHONY: tgz
130tgz: builder/skel/tgz/usr/bin/krakend
131tgz: builder/skel/tgz/etc/krakend/krakend.json
132tgz: builder/skel/tgz/etc/init.d/krakend
133tar zcvf krakend_${VERSION}_${ARCH}${OS_TAG}.tar.gz -C builder/skel/tgz/ .
134
135.PHONY: deb
136deb: builder/skel/deb/usr/bin/krakend
137deb: builder/skel/deb/etc/krakend/krakend.json
138deb: builder/skel/deb/etc/rsyslog.d/krakend.conf
139deb: builder/skel/deb/etc/logrotate.d/krakend
140docker run --rm -it -v "${PWD}:${DOCKER_WDIR}" -w ${DOCKER_WDIR} ${DOCKER_FPM}:deb -t deb ${DEB_OPTS} \
141--iteration ${RELEASE} \
142--deb-systemd builder/files/krakend.service \
143-C builder/skel/deb \
144${FPM_OPTS}
145
146.PHONY: rpm
147rpm: builder/skel/rpm/usr/lib/systemd/system/krakend.service
148rpm: builder/skel/rpm/usr/bin/krakend
149rpm: builder/skel/rpm/etc/krakend/krakend.json
150rpm: builder/skel/rpm/etc/rsyslog.d/krakend.conf
151rpm: builder/skel/rpm/etc/logrotate.d/krakend
152docker run --rm -it -v "${PWD}:${DOCKER_WDIR}" -w ${DOCKER_WDIR} ${DOCKER_FPM}:rpm -t rpm ${RPM_OPTS} \
153--iteration ${RELEASE} \
154-C builder/skel/rpm \
155${FPM_OPTS}
156
157.PHONY: deb-release
158deb-release: builder/skel/deb-release/usr/bin/krakend
159deb-release: builder/skel/deb-release/etc/krakend/krakend.json
160/usr/local/bin/fpm -t deb ${DEB_OPTS} \
161--iteration ${RELEASE} \
162--deb-systemd builder/files/krakend.service \
163-C builder/skel/deb-release \
164${FPM_OPTS}
165
166.PHONY: rpm-release
167rpm-release: builder/skel/rpm-release/usr/lib/systemd/system/krakend.service
168rpm-release: builder/skel/rpm-release/usr/bin/krakend
169rpm-release: builder/skel/rpm-release/etc/krakend/krakend.json
170/usr/local/bin/fpm -t rpm ${RPM_OPTS} \
171--iteration ${RELEASE} \
172-C builder/skel/rpm-release \
173${FPM_OPTS}
174
175.PHONY: clean
176clean:
177rm -rf builder/skel/*
178rm -f krakend
179rm -rf vendor/
180