You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2022/01/27 04:26:25 UTC

[skywalking-agent-test-tool] branch master updated: Build linux/arm64 and linux/arm/v7 docker image (#36)

This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-agent-test-tool.git


The following commit(s) were added to refs/heads/master by this push:
     new 092c6a3  Build linux/arm64 and linux/arm/v7 docker image (#36)
092c6a3 is described below

commit 092c6a3c753684b5a301baf5bcb1965f2dfaf79d
Author: zhang-wei <zh...@apache.org>
AuthorDate: Thu Jan 27 12:26:22 2022 +0800

    Build linux/arm64 and linux/arm/v7 docker image (#36)
---
 .github/workflows/publish-docker.yaml              | 10 ++--
 Makefile                                           | 70 ++++++++++++----------
 .../Dockerfile}                                    |  2 +-
 .../mockcollector/mock/MockMeterReportService.java | 26 ++++++++
 4 files changed, 70 insertions(+), 38 deletions(-)

diff --git a/.github/workflows/publish-docker.yaml b/.github/workflows/publish-docker.yaml
index ae6a526..8ba159b 100644
--- a/.github/workflows/publish-docker.yaml
+++ b/.github/workflows/publish-docker.yaml
@@ -51,7 +51,9 @@ jobs:
           registry: ${{ env.HUB }}
           username: ${{ github.actor }}
           password: ${{ secrets.GITHUB_TOKEN }}
-      - name: Build docker image
-        run: |
-          make docker || make docker
-          make docker.push || make docker.push
+      - name: Set up QEMU
+        uses: docker/setup-qemu-action@v1
+      - name: Set up Docker Buildx
+        uses: docker/setup-buildx-action@v1
+      - name: Build and push docker images
+        run: make build.mock-collector docker.push
diff --git a/Makefile b/Makefile
index d64b766..35ff894 100644
--- a/Makefile
+++ b/Makefile
@@ -16,51 +16,55 @@
 
 SHELL := /bin/bash -o pipefail
 
-export TOOLS_ROOT := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
+TOOL_ROOT := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
+CONTEXT ?= ${TOOL_ROOT}/dist
+SKIP_TEST ?= false
+DIST ?= skywalking-mock-collector.tar.gz
 
-export TOOLS_OUT:=${TOOLS_ROOT}/dist
+.PHONY: build.mock-collector
+build.mock-collector:
+	cd $(TOOL_ROOT) && ./mvnw -B -Dmaven.test.skip=$(SKIP_TEST) clean package
 
-SKIP_TEST?=false
+DOCKER_BUILD_TOP:=${CONTEXT}/docker_build
 
-HUB?=skywalking
+HUB ?= skywalking
+MOCK_COLLECTOR_NAME ?= mock-collector
+TAG ?= latest
 
-TAG?=latest
+.PHONY: docker build.mock-collector
 
-DOCKER_BUILD_TOP:=${TOOLS_OUT}/docker_build
+docker: build.mock-collector docker.all
 
 DOCKER_TARGETS:=docker.mock-collector
 
-.PHONY: build docker docker.mock docker.push
+%.mock-collector: NAME = $(MOCK_COLLECTOR_NAME)
 
-build:
-	cd $(TOOLS_ROOT) && ./mvnw -B -Dmaven.test.skip=$(SKIP_TEST) clean package
+docker.%: PLATFORMS =
+docker.%: LOAD_OR_PUSH = --load
+push.%: PLATFORMS = --platform linux/amd64,linux/arm64,linux/arm/v7
+push.%: LOAD_OR_PUSH = --push
 
-docker: build docker.mock-collector
+docker.% push.docker.%: $(CONTEXT)/$(DIST) $(TOOL_ROOT)/docker/%/*
+	$(DOCKER_RULE)
 
-docker.mock-collector: $(TOOLS_OUT)/skywalking-mock-collector.tar.gz
-docker.mock-collector: $(TOOLS_ROOT)/docker/Dockerfile.mock-collector
-		$(DOCKER_RULE)
+docker.all: $(DOCKER_TARGETS)
+docker.push: $(DOCKER_TARGETS:%=push.%)
 
-# $@ is the name of the target
 # $^ the name of the dependencies for the target
 # Rule Steps #
 ##############
-# 1. Make a directory $(DOCKER_BUILD_TOP)/%@
-# 2. This rule uses cp to copy all dependency filenames into into $(DOCKER_BUILD_TOP/$@
-# 3. This rule then changes directories to $(DOCKER_BUID_TOP)/$@
-# 4. This rule runs $(BUILD_PRE) prior to any docker build and only if specified as a dependency variable
-
-DOCKER_RULE=time (mkdir -p $(DOCKER_BUILD_TOP)/$@ && cp -r $^ $(DOCKER_BUILD_TOP)/$@ && cd $(DOCKER_BUILD_TOP)/$@ && $(BUILD_PRE) docker build --no-cache -t $(HUB)/$(subst docker.,,$@):$(TAG) -f Dockerfile$(suffix $@) .)
-
-# for each docker.XXX target create a push.docker.XXX target that pushes
-# the local docker image to another hub
-# a possible optimization is to use tag.$(TGT) as a dependency to do the tag for us
-$(foreach TGT,$(DOCKER_TARGETS),$(eval push.$(TGT): | $(TGT) ; \
-	time (docker push $(HUB)/$(subst docker.,,$(TGT)):$(TAG))))
-
-# create a DOCKER_PUSH_TARGETS that's each of DOCKER_TARGETS with a push. prefix
-DOCKER_PUSH_TARGETS:=
-$(foreach TGT,$(DOCKER_TARGETS),$(eval DOCKER_PUSH_TARGETS+=push.$(TGT)))
-
-# Will build and push docker images.
-docker.push: $(DOCKER_PUSH_TARGETS)
\ No newline at end of file
+# 1. Make a directory $(DOCKER_BUILD_TOP)/$(NAME)
+# 2. This rule uses cp to copy all dependency filenames into into $(DOCKER_BUILD_TOP/$(NAME)
+# 3. This rule finally runs docker build passing $(BUILD_ARGS) to docker if they are specified as a dependency variable
+
+define DOCKER_RULE
+	mkdir -p $(DOCKER_BUILD_TOP)/$(NAME)
+	cp -r $^ $(DOCKER_BUILD_TOP)/$(NAME)
+	docker buildx create --use --driver docker-container --name skywalking_main > /dev/null 2>&1 || true
+	docker buildx build $(PLATFORMS) $(LOAD_OR_PUSH) \
+		--no-cache $(BUILD_ARGS) \
+		-t $(HUB)/$(NAME):$(TAG) \
+		-t $(HUB)/$(NAME):latest \
+		$(DOCKER_BUILD_TOP)/$(NAME)
+	docker buildx rm skywalking_main || true
+endef
\ No newline at end of file
diff --git a/docker/Dockerfile.mock-collector b/docker/mock-collector/Dockerfile
similarity index 93%
rename from docker/Dockerfile.mock-collector
rename to docker/mock-collector/Dockerfile
index b9205d2..0b4f37f 100644
--- a/docker/Dockerfile.mock-collector
+++ b/docker/mock-collector/Dockerfile
@@ -15,7 +15,7 @@
 # limitations under the License.
 #
 
-FROM openjdk:8
+FROM eclipse-temurin:8u312-b07-jre-focal
 
 WORKDIR /skywalking-mock-collector
 
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockMeterReportService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockMeterReportService.java
index e191499..bd78772 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockMeterReportService.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockMeterReportService.java
@@ -21,6 +21,7 @@ import io.grpc.stub.StreamObserver;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.apm.network.common.v3.Commands;
 import org.apache.skywalking.apm.network.language.agent.v3.MeterData;
+import org.apache.skywalking.apm.network.language.agent.v3.MeterDataCollection;
 import org.apache.skywalking.apm.network.language.agent.v3.MeterReportServiceGrpc;
 import org.apache.skywalking.plugin.test.mockcollector.util.MeterHandler;
 
@@ -49,4 +50,29 @@ public class MockMeterReportService extends MeterReportServiceGrpc.MeterReportSe
             }
         };
     }
+
+    @Override
+    public StreamObserver<MeterDataCollection> collectBatch(final StreamObserver<Commands> responseObserver) {
+        final MeterHandler.Parser parser = MeterHandler.createParser();
+        return new StreamObserver<MeterDataCollection>() {
+            @Override
+            public void onNext(final MeterDataCollection meterDataCollection) {
+                for (MeterData meterData : meterDataCollection.getMeterDataList()) {
+                    parser.parse(meterData);
+                }
+            }
+
+            @Override
+            public void onError(final Throwable throwable) {
+                log.error(throwable.getMessage(), throwable);
+                responseObserver.onCompleted();
+            }
+
+            @Override
+            public void onCompleted() {
+                responseObserver.onNext(Commands.newBuilder().build());
+                responseObserver.onCompleted();
+            }
+        };
+    }
 }