FROM alpine:3.15.0 as build RUN apk --no-cache add alpine-sdk perl curl RUN curl -sSLo hey "https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64" && \ chmod +x hey && mv hey /usr/local/bin/hey RUN HELM2_VERSION=2.17.0 && \ curl -sSL "https://get.helm.sh/helm-v${HELM2_VERSION}-linux-amd64.tar.gz" | tar xvz && \ chmod +x linux-amd64/helm && mv linux-amd64/helm /usr/local/bin/helm && \ chmod +x linux-amd64/tiller && mv linux-amd64/tiller /usr/local/bin/tiller RUN HELM3_VERSION=3.7.2 && \ curl -sSL "https://get.helm.sh/helm-v${HELM3_VERSION}-linux-amd64.tar.gz" | tar xvz && \ chmod +x linux-amd64/helm && mv linux-amd64/helm /usr/local/bin/helmv3 RUN GRPC_HEALTH_PROBE_VERSION=v0.4.6 && \ wget -qO /usr/local/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \ chmod +x /usr/local/bin/grpc_health_probe RUN GHZ_VERSION=0.105.0 && \ curl -sSL "https://github.com/bojand/ghz/releases/download/v${GHZ_VERSION}/ghz-linux-x86_64.tar.gz" | tar xz -C /tmp && \ mv /tmp/ghz /usr/local/bin && chmod +x /usr/local/bin/ghz RUN HELM_TILLER_VERSION=0.9.3 && \ curl -sSL "https://github.com/rimusz/helm-tiller/archive/v${HELM_TILLER_VERSION}.tar.gz" | tar xz -C /tmp && \ mv /tmp/helm-tiller-${HELM_TILLER_VERSION} /tmp/helm-tiller FROM golang:1.17-alpine as go ARG TARGETPLATFORM ARG REVISON WORKDIR /workspace # copy modules manifests COPY go.mod go.mod COPY go.sum go.sum # cache modules RUN go mod download # copy source code COPY cmd/ cmd/ COPY pkg/ pkg/ # build RUN CGO_ENABLED=0 go build -o loadtester ./cmd/loadtester/* FROM bash:5.0 RUN addgroup -S app && \ adduser -S -g app app && \ apk --no-cache add ca-certificates curl jq libgcc wrk WORKDIR /home/app COPY --from=bats/bats:v1.1.0 /opt/bats/ /opt/bats/ RUN ln -s /opt/bats/bin/bats /usr/local/bin/ COPY --from=build /usr/local/bin/hey /usr/local/bin/ COPY --from=build /usr/local/bin/helm /usr/local/bin/ COPY --from=build /usr/local/bin/tiller /usr/local/bin/ COPY --from=build /usr/local/bin/ghz /usr/local/bin/ COPY --from=build /usr/local/bin/helmv3 /usr/local/bin/ COPY --from=build /usr/local/bin/grpc_health_probe /usr/local/bin/ COPY --from=build /tmp/helm-tiller /tmp/helm-tiller ADD https://raw.githubusercontent.com/grpc/grpc-proto/master/grpc/health/v1/health.proto /tmp/ghz/health.proto RUN chown -R app:app ./ RUN chown -R app:app /tmp/ghz USER app # test load generator tools RUN hey -n 1 -c 1 https://flagger.app > /dev/null && echo $? | grep 0 RUN wrk -d 1s -c 1 -t 1 https://flagger.app > /dev/null && echo $? | grep 0 # install Helm v2 plugins RUN helm init --stable-repo-url=https://charts.helm.sh/stable --client-only && helm plugin install /tmp/helm-tiller COPY --from=go --chown=app:app /workspace/loadtester . ENTRYPOINT ["./loadtester"]