From 8eceb1166ffdad8023d3007569c4f7a9581d6c18 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Tue, 2 Nov 2021 15:43:08 +0800 Subject: [PATCH] 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 24576830b..d92d87857 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 bc3cedb5b..20546251d 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 bf7a3287b..bbedf370a 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 12b1f7c04..b3b3ffca9 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 0c5450357..a1667891d 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` 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 2d14953e6..0f32d7c91 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