From df9055f54c56abb220a05365badfa81dc81c5818 Mon Sep 17 00:00:00 2001 From: odidev Date: Tue, 20 Apr 2021 12:15:11 +0530 Subject: [PATCH] Release docker image for arm64 Signed-off-by: odidev --- .circleci/config.yml | 36 ++++++++++++++++++------- docker/Dockerfile.cloud-agent_multiarch | 28 +++++++++++++++++++ docker/Dockerfile.scope_multiarch | 35 ++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 docker/Dockerfile.cloud-agent_multiarch create mode 100644 docker/Dockerfile.scope_multiarch diff --git a/.circleci/config.yml b/.circleci/config.yml index fb58e22f6d..49652e1e0f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -42,6 +42,10 @@ workflows: requires: - client-test - integration-tests + - publish: + filters: + branches: + only: master jobs: lint: @@ -192,18 +196,32 @@ jobs: - run: | docker load -i scope.tar docker load -i cloud-agent.tar - - run: | - test -z "${DOCKER_USER}" && exit 0 - docker login -u $DOCKER_USER -p $DOCKER_PASS - for IMAGE in $IMAGES; do - test "${DOCKER_ORGANIZATION:-$DOCKER_USER}" = "weaveworks" || docker tag weaveworks/$IMAGE:latest ${DOCKER_ORGANIZATION:-$DOCKER_USER}/$IMAGE:latest - docker tag weaveworks/$IMAGE:latest ${DOCKER_ORGANIZATION:-$DOCKER_USER}/$IMAGE:$(./tools/image-tag) - docker push ${DOCKER_ORGANIZATION:-$DOCKER_USER}/$IMAGE:latest - docker push ${DOCKER_ORGANIZATION:-$DOCKER_USER}/$IMAGE:$(./tools/image-tag) - done - run: | test -z "${QUAY_USER}" && exit 0 docker login -e '.' -u "$QUAY_USER" -p "$QUAY_PASSWORD" quay.io docker tag weaveworks/scope:$(./tools/image-tag) "quay.io/${QUAY_ORGANIZATION}/scope:$(./tools/image-tag)" docker push "quay.io/${QUAY_ORGANIZATION}/scope:$(./tools/image-tag)" - run: test -z "${UI_BUCKET_KEY_ID}" || (make BUILD_IN_CONTAINER=false ui-upload ui-pkg-upload) + + publish: + machine: + image: ubuntu-1604:202007-01 + working_directory: /home/circleci/scope + environment: + DEBUG: true + steps: + - checkout + - run: | + mkdir -vp ~/.docker/cli-plugins/ + curl --silent -L --output ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.5.0/buildx-v0.5.0.linux-amd64 + chmod a+x ~/.docker/cli-plugins/docker-buildx + docker run -it --rm --privileged tonistiigi/binfmt --install all + docker buildx create --use --name mybuilder + - run: docker login -u "$DOCKER_USER" -p "$DOCKER_PASS" + - run: | + docker run --rm --entrypoint=cat weaveworks/weaveexec@sha256:d19ca4e518ee3d52bfbd6c6b8fb90c258622462ff8386de39e15b0fa6edb02e5 /usr/bin/weaveutil > weaveutil_arm64 + docker run --rm --entrypoint=cat weaveworks/weaveexec@sha256:d19ca4e518ee3d52bfbd6c6b8fb90c258622462ff8386de39e15b0fa6edb02e5 /usr/bin/weaveutil > weaveutil + - run: | + docker buildx build --push --build-arg=revision=$(git rev-parse HEAD) --build-arg=SCOPE_SKIP_UI_ASSETS=true --platform linux/arm64,linux/amd64 -t ${DOCKER_ORGANIZATION:-$DOCKER_USER}/cloud-agent:$(./tools/image-tag) -t ${DOCKER_ORGANIZATION:-$DOCKER_USER}/cloud-agent:latest -f docker/Dockerfile.cloud-agent_multiarch . + - run: | + docker buildx build --push --build-arg=revision=$(git rev-parse HEAD) --build-arg=VERSION=$(git rev-parse --short HEAD) --platform linux/arm64,linux/amd64 -t ${DOCKER_ORGANIZATION:-$DOCKER_USER}/scope:$(./tools/image-tag) -t ${DOCKER_ORGANIZATION:-$DOCKER_USER}/scope:latest -f docker/Dockerfile.scope_multiarch . diff --git a/docker/Dockerfile.cloud-agent_multiarch b/docker/Dockerfile.cloud-agent_multiarch new file mode 100644 index 0000000000..8dc587ed97 --- /dev/null +++ b/docker/Dockerfile.cloud-agent_multiarch @@ -0,0 +1,28 @@ +# stage 1 +FROM golangci/golangci-lint:latest as builder +ARG SCOPE_SKIP_UI_ASSETS +RUN apt-get update +RUN apt-get install -y libpcap-dev time +WORKDIR /root/go/src/github.com/weaveworks +COPY / scope +WORKDIR scope +ENV GOROOT=/usr/local/go +ENV GOPATH=/root/go +ENV PATH=$GOPATH/bin:$GOROOT/bin:$PATH +RUN make BUILD_IN_CONTAINER=false GO_BUILD_INSTALL_DEPS= prog/scope + +# stage 2 +FROM alpine:3.11.3 +WORKDIR /home/weave +RUN apk add --no-cache bash conntrack-tools iproute2 util-linux curl +COPY --from=builder /root/go/src/github.com/weaveworks/scope/prog/scope /home/weave/ + +ENTRYPOINT ["/home/weave/scope", "--mode=probe", "--no-app", "--probe.docker=true"] + +ARG revision +LABEL works.weave.role="system" \ + maintainer="Weaveworks " \ + org.opencontainers.image.title="cloud-agent" \ + org.opencontainers.image.source="https://github.com/weaveworks/scope" \ + org.opencontainers.image.revision="${revision}" \ + org.opencontainers.image.vendor="Weaveworks" diff --git a/docker/Dockerfile.scope_multiarch b/docker/Dockerfile.scope_multiarch new file mode 100644 index 0000000000..7b4c5ed94e --- /dev/null +++ b/docker/Dockerfile.scope_multiarch @@ -0,0 +1,35 @@ +# stage 1 +FROM golang:latest as builder +ARG VERSION +RUN apt-get update +RUN apt-get install -y time +COPY / /scope +WORKDIR /scope +RUN curl -L https://github.com/weaveworks/weave/releases/download/v2.1.3/weave -o weave +RUN chmod u+x weave +RUN if [ `uname -m` = "aarch64" ] ; then \ + mv ./weaveutil_arm64 docker/weaveutil; \ + else \ + cp ./weaveutil docker/weaveutil; \ + fi +RUN time env GOGC=off CGO_ENABLED=1 go build -mod vendor -ldflags "-extldflags \"-static\" -X main.version="${VERSION}" -s -w" -tags 'netgo unsafe' -o runsvinit ./vendor/github.com/peterbourgon/runsvinit + +# stage 2 +FROM weaveworks/cloud-agent +RUN apk add --no-cache runit +COPY --from=builder /scope/weave /usr/bin/ +COPY --from=builder /scope/docker/weaveutil /usr/bin/ +COPY --from=builder /scope/runsvinit /home/weave/ +COPY docker/entrypoint.sh /home/weave/ +COPY docker/run-app /etc/service/app/run +COPY docker/run-probe /etc/service/probe/run + +EXPOSE 4040 +ENTRYPOINT ["/home/weave/entrypoint.sh"] + +ARG revision +LABEL maintainer="Weaveworks " \ + org.opencontainers.image.title="scope" \ + org.opencontainers.image.source="https://github.com/weaveworks/scope" \ + org.opencontainers.image.revision="${revision}" \ + org.opencontainers.image.vendor="Weaveworks"