You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2021/11/02 07:43:11 UTC

[skywalking-java] branch main updated: Build CLI from Docker instead of source codes, add alpine based Docker image (#65)

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

wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-java.git


The following commit(s) were added to refs/heads/main by this push:
     new 8eceb11  Build CLI from Docker instead of source codes, add alpine based Docker image (#65)
8eceb11 is described below

commit 8eceb1166ffdad8023d3007569c4f7a9581d6c18
Author: kezhenxu94 <ke...@apache.org>
AuthorDate: Tue Nov 2 15:43:08 2021 +0800

    Build CLI from Docker instead of source codes, add alpine based Docker image (#65)
---
 .github/workflows/publish-docker.yaml      |  3 +-
 CHANGES.md                                 |  1 +
 Dockerfile                                 | 81 ++----------------------------
 Makefile                                   | 35 +++++++++----
 docs/en/contribution/compiling.md          | 27 ++++++++++
 docs/en/contribution/release-java-agent.md |  2 +-
 6 files changed, 58 insertions(+), 91 deletions(-)

diff --git a/.github/workflows/publish-docker.yaml b/.github/workflows/publish-docker.yaml
index 2457683..d92d878 100644
--- a/.github/workflows/publish-docker.yaml
+++ b/.github/workflows/publish-docker.yaml
@@ -60,9 +60,8 @@ jobs:
     timeout-minutes: 60
     strategy:
       matrix:
-        java-version: [ 8, 11, 12, 13, 14, 15, 16 ]
+        java-version: [ 8, 11, 12, 13, 14, 15, 16, 17 ]
     env:
-      BASE_IMAGE: adoptopenjdk/openjdk${{ matrix.java-version }}:alpine
       TAG: ${{ github.sha }}
     steps:
       - uses: actions/checkout@v2
diff --git a/CHANGES.md b/CHANGES.md
index bc3cedb..2054625 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -7,6 +7,7 @@ Release Notes.
 
 * Support `Transaction` and fix duplicated methods enhancements for `jedis-2.x` plugin.
 * Add ConsumerWrapper/FunctionWrapper to support CompletableFuture.x.thenAcceptAsync/thenApplyAsync.
+* Build CLI from Docker instead of source codes, add alpine based Docker image.
 
 #### Documentation
 
diff --git a/Dockerfile b/Dockerfile
index bf7a328..bbedf37 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -16,84 +16,9 @@
 
 ARG BASE_IMAGE='adoptopenjdk/openjdk8:alpine-jre'
 
-FROM $BASE_IMAGE as cli
+ARG SKYWALKING_CLI_VERSION
 
-WORKDIR /skywalking
-
-ARG SKYWALKING_CLI_VERSION=0.7.0
-ENV SKYWALKING_CLI_TGZ=skywalking-cli-$SKYWALKING_CLI_VERSION-bin.tgz
-ENV SKYWALKING_CLI_ASC=${SKYWALKING_CLI_TGZ}.asc
-ENV SKYWALKING_CLI_SHA512=${SKYWALKING_CLI_TGZ}.sha512
-
-ENV SKYWALKING_CLI_TGZ_URLS \
-        https://www.apache.org/dyn/closer.cgi?action=download&filename=skywalking/cli/$SKYWALKING_CLI_VERSION/$SKYWALKING_CLI_TGZ \
-        # if the version is outdated, we might have to pull from the dist/archive :/
-	    https://www-us.apache.org/dist/skywalking/cli/$SKYWALKING_CLI_VERSION/$SKYWALKING_CLI_TGZ \
-	    https://www.apache.org/dist/skywalking/cli/$SKYWALKING_CLI_VERSION/$SKYWALKING_CLI_TGZ \
-	    https://archive.apache.org/dist/skywalking/cli/$SKYWALKING_CLI_VERSION/$SKYWALKING_CLI_TGZ
-
-ENV SKYWALKING_CLI_ASC_URLS \
-        https://www.apache.org/dyn/closer.cgi?action=download&filename=skywalking/$SKYWALKING_CLI_VERSION/$SKYWALKING_CLI_ASC \
-        # if the version is outdated, we might have to pull from the dist/archive :/
-	    https://www-us.apache.org/dist/skywalking/cli/$SKYWALKING_CLI_VERSION/$SKYWALKING_CLI_ASC \
-	    https://www.apache.org/dist/skywalking/cli/$SKYWALKING_CLI_VERSION/$SKYWALKING_CLI_ASC \
-	    https://archive.apache.org/dist/skywalking/cli/$SKYWALKING_CLI_VERSION/$SKYWALKING_CLI_ASC
-
-ENV SKYWALKING_CLI_SHA512_URLS \
-        https://www.apache.org/dyn/closer.cgi?action=download&filename=skywalking/$SKYWALKING_CLI_VERSION/$SKYWALKING_CLI_SHA512 \
-        # if the version is outdated, we might have to pull from the dist/archive :/
-	    https://www-us.apache.org/dist/skywalking/cli/$SKYWALKING_CLI_VERSION/$SKYWALKING_CLI_SHA512 \
-	    https://www.apache.org/dist/skywalking/cli/$SKYWALKING_CLI_VERSION/$SKYWALKING_CLI_SHA512 \
-	    https://archive.apache.org/dist/skywalking/cli/$SKYWALKING_CLI_VERSION/$SKYWALKING_CLI_SHA512
-
-
-RUN set -eux; \
-	\
-	apk add --no-cache --virtual .fetch-deps \
-		gnupg \
-		ca-certificates \
-		openssl \
-	; \
-	\
-	wget --timeout=20 -O KEYS https://downloads.apache.org/skywalking/KEYS; \
-	gpg --import KEYS; \
-	\
-	success=; \
-	for url in $SKYWALKING_CLI_TGZ_URLS; do \
-		if wget --timeout=20  -O ${SKYWALKING_CLI_TGZ} "$url"; then \
-			success=1; \
-			break; \
-		fi; \
-	done; \
-	[ -n "$success" ]; \
-	\
-	success=; \
-	for url in $SKYWALKING_CLI_SHA512_URLS; do \
-		if wget --timeout=20  -O ${SKYWALKING_CLI_SHA512} "$url"; then \
-			success=1; \
-			break; \
-		fi; \
-	done; \
-	[ -n "$success" ]; \
-	\
-	sha512sum -c ${SKYWALKING_CLI_SHA512}; \
-	\
-	success=; \
-	for url in $SKYWALKING_CLI_ASC_URLS; do \
-		if wget --timeout=20  -O ${SKYWALKING_CLI_ASC} "$url"; then \
-			success=1; \
-			break; \
-		fi; \
-	done; \
-	[ -n "$success" ]; \
-	\
-	gpg --batch --verify ${SKYWALKING_CLI_ASC} ${SKYWALKING_CLI_TGZ}; \
-	tar -xvf ${SKYWALKING_CLI_TGZ}; \
-    mkdir "bin/"; \
-	mv skywalking-cli-${SKYWALKING_CLI_VERSION}-bin/bin/swctl-${SKYWALKING_CLI_VERSION}-linux-amd64 bin/swctl; \
-	chmod 755 bin/*; \
-	command -v gpgconf && gpgconf --kill all || :; \
-	ls -la .;
+FROM apache/skywalking-cli:$SKYWALKING_CLI_VERSION as cli
 
 FROM $BASE_IMAGE
 
@@ -109,4 +34,4 @@ WORKDIR /skywalking
 
 ADD $DIST /skywalking/agent
 
-COPY --from=cli /skywalking/bin/swctl /usr/bin/swctl
+COPY --from=cli /swctl /usr/bin/swctl
diff --git a/Makefile b/Makefile
index 12b1f7c..b3b3ffc 100644
--- a/Makefile
+++ b/Makefile
@@ -20,6 +20,7 @@ HUB ?= skywalking
 NAME ?= skywalking-java
 TAG ?= latest
 AGENT_PACKAGE ?= skywalking-agent
+CLI_VERSION ?= 0.9.0 # CLI version inside agent image should always use an Apache released artifact.
 
 .PHONY: build
 build:
@@ -33,21 +34,35 @@ dist: build
 
 # Docker build
 
-JAVA_VERSIONS := 8 11 12 13 14 15 16
-JAVA_VERSION = $(word 1, $@)
+base.adopt := java8 java11 java12 java13 java14 java15 java16
+base.temurin := java17
 
-.PHONY: $(JAVA_VERSIONS:%=java%)
-$(JAVA_VERSIONS:%=docker.java%): skywalking-agent
-	docker build --no-cache --build-arg BASE_IMAGE=adoptopenjdk/openjdk$(JAVA_VERSION:docker.java%=%):alpine-jre --build-arg DIST=$(AGENT_PACKAGE) . -t $(HUB)/$(NAME):$(TAG)-$(JAVA_VERSION:docker.%=%)
+base.all := alpine $(base.adopt) $(base.temurin)
+base.each = $(word 1, $@)
+
+base.image.alpine := alpine:3
+base.image.java8 := adoptopenjdk/openjdk8:alpine-jre
+base.image.java11 := adoptopenjdk/openjdk11:alpine-jre
+base.image.java12 := adoptopenjdk/openjdk12:alpine-jre
+base.image.java13 := adoptopenjdk/openjdk13:alpine-jre
+base.image.java14 := adoptopenjdk/openjdk14:alpine-jre
+base.image.java15 := adoptopenjdk/openjdk15:alpine-jre
+base.image.java16 := adoptopenjdk/openjdk16:alpine-jre
+base.image.java17 := eclipse-temurin:17-alpine
+
+.PHONY: $(base.all)
+$(base.all:%=docker.%): BASE_IMAGE=$($(base.each:docker.%=base.image.%))
+$(base.all:%=docker.%): docker.%: skywalking-agent
+	docker build --no-cache --build-arg BASE_IMAGE=$(BASE_IMAGE) --build-arg DIST=$(AGENT_PACKAGE) --build-arg SKYWALKING_CLI_VERSION=$(CLI_VERSION) . -t $(HUB)/$(NAME):$(TAG)-$(base.each:docker.%=%)
 
 .PHONY: docker
-docker: $(JAVA_VERSIONS:%=docker.java%)
+docker: $(base.all:%=docker.%)
 
 # Docker push
 
-.PHONY: $(JAVA_VERSIONS:%=docker.push.java%)
-$(JAVA_VERSIONS:%=docker.push.java%): $(JAVA_VERSIONS:%=docker.java%)
-	docker push $(HUB)/$(NAME):$(TAG)-$(JAVA_VERSION:docker.push.%=%)
+.PHONY: $(base.all:%=docker.push.%)
+$(base.all:%=docker.push.%): docker.push.%: docker.%
+	docker push $(HUB)/$(NAME):$(TAG)-$(base.each:docker.push.%=%)
 
 .PHONY: docker.push
-docker.push: $(JAVA_VERSIONS:%=docker.java%)
+docker.push: $(base.all:%=docker.%)
diff --git a/docs/en/contribution/compiling.md b/docs/en/contribution/compiling.md
index 0c54503..a166789 100644
--- a/docs/en/contribution/compiling.md
+++ b/docs/en/contribution/compiling.md
@@ -20,3 +20,30 @@ The agent binary package is generated in `skywalking-agent` folder.
 
 Set **Generated Source Codes**(`grpc-java` and `java` folders in **apm-protocol/apm-network/target/generated-sources/protobuf**)
 folders if you are using IntelliJ IDE.
+
+# Building Docker images
+
+After you have [compiled the project](#compiling-project) and have generated the `skywalking-agent` folder, you can
+build Docker images. [`make docker`] builds the agent Docker images based on `alpine` image and `java8 ~ java 17`
+images by default. If you want to only build part of the images, add suffix `.alpine` or `.java<x>` to the `make`
+target, for example:
+
+- Build Docker images based on alpine, Java 8 and Java 11.
+  ```shell
+  make docker.alpine docker.java8 docker.java11
+  ```
+
+You can also customize the Docker registry and Docker image names by specifying the variable `HUB`, `NAME`.
+
+- Set private Docker registry to `gcr.io/skywalking` and custom name to `sw-agent`.
+  ```shell
+  make docker.alpine HUB=gcr.io/skywalking NAME=sw-agent
+  ```
+  This will name the Docker image to `gcr.io/skywalking/sw-agent:latest-alpine`
+
+If you want to push the Docker images, add suffix to the make target `docker.`, for example:
+
+- Build and push images based on alpine, Java 8 and Java 11.
+  ```shell
+  make docker.push.alpine docker.push.java8 docker.push.java11
+  ```
diff --git a/docs/en/contribution/release-java-agent.md b/docs/en/contribution/release-java-agent.md
index 2d14953..0f32d7c 100644
--- a/docs/en/contribution/release-java-agent.md
+++ b/docs/en/contribution/release-java-agent.md
@@ -276,7 +276,7 @@ export NAME=skywalking-java-agent
 export HUB=apache
 export TAG=$SW_VERSION
 
-make docker.push.java8 docker.push.java11
+make docker.push.alpine docker.push.java8 docker.push.java11 docker.push.java17
 ```
 
 ## Clean up the old releases