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 2021/08/28 00:01:30 UTC

[skywalking] branch reorganize-ci updated (a043aa8 -> 8fbd079)

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

kezhenxu94 pushed a change to branch reorganize-ci
in repository https://gitbox.apache.org/repos/asf/skywalking.git.


 discard a043aa8  Reorganize CI workflows to speed up and reduce failures
     new 8fbd079  Reorganize CI workflows to speed up and reduce failures

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (a043aa8)
            \
             N -- N -- N   refs/heads/reorganize-ci (8fbd079)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .github/workflows/e2e.alarm.yaml     | 2 +-
 .github/workflows/e2e.cluster.yaml   | 2 +-
 .github/workflows/e2e.event.yaml     | 2 +-
 .github/workflows/e2e.go.yaml        | 2 +-
 .github/workflows/e2e.istio.yaml     | 2 +-
 .github/workflows/e2e.js.yaml        | 2 +-
 .github/workflows/e2e.kafka.yaml     | 2 +-
 .github/workflows/e2e.log.yaml       | 2 +-
 .github/workflows/e2e.nodejs.yaml    | 2 +-
 .github/workflows/e2e.php.yaml       | 2 +-
 .github/workflows/e2e.profiling.yaml | 2 +-
 .github/workflows/e2e.python.yaml    | 2 +-
 .github/workflows/e2e.so11y.yaml     | 2 +-
 .github/workflows/e2e.storages.yaml  | 2 +-
 .github/workflows/e2e.ttl.yaml       | 2 +-
 .github/workflows/e2e.yaml           | 2 +-
 16 files changed, 16 insertions(+), 16 deletions(-)

[skywalking] 01/01: Reorganize CI workflows to speed up and reduce failures

Posted by ke...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch reorganize-ci
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 8fbd079df05d37e510de4a958213400c4a7dff99
Author: kezhenxu94 <ke...@apache.org>
AuthorDate: Sat Aug 28 07:57:19 2021 +0800

    Reorganize CI workflows to speed up and reduce failures
---
 .github/actions/build-docker/action.yml            | 57 ++++++++++++++++++
 .github/actions/{e2e-test => build-tar}/action.yml | 38 ++++--------
 .github/actions/e2e-test/action.yml                | 28 +++------
 .github/workflows/ci-it.yaml                       |  7 +++
 .github/workflows/codeql.yaml                      |  3 +-
 .github/workflows/docker-ci.yaml                   | 47 ++++++++-------
 .github/workflows/e2e.alarm.yaml                   | 45 +++++++++++++-
 .github/workflows/e2e.cluster.yaml                 | 49 ++++++++++++++-
 .github/workflows/e2e.event.yaml                   | 43 ++++++++++++++
 .github/workflows/e2e.go.yaml                      | 32 ++++++++++
 .github/workflows/e2e.istio.yaml                   | 69 ++++++++++++++--------
 .github/workflows/e2e.jdk-versions.yaml            |  7 +++
 .github/workflows/e2e.js.yaml                      | 45 ++++++++++++++
 .github/workflows/e2e.kafka.yaml                   | 41 +++++++++++++
 .github/workflows/e2e.log.yaml                     | 46 ++++++++++++++-
 .github/workflows/e2e.nodejs.yaml                  | 40 +++++++++++++
 .github/workflows/e2e.php.yaml                     | 41 +++++++++++++
 .github/workflows/e2e.profiling.yaml               | 45 +++++++++++++-
 .github/workflows/e2e.python.yaml                  | 40 +++++++++++++
 .github/workflows/e2e.so11y.yaml                   | 40 +++++++++++++
 .github/workflows/e2e.storages.yaml                | 47 ++++++++++++++-
 .github/workflows/e2e.ttl.yaml                     | 43 ++++++++++++++
 .github/workflows/e2e.yaml                         | 69 +++++++++++++++-------
 23 files changed, 802 insertions(+), 120 deletions(-)

diff --git a/.github/actions/build-docker/action.yml b/.github/actions/build-docker/action.yml
new file mode 100644
index 0000000..3a909b2
--- /dev/null
+++ b/.github/actions/build-docker/action.yml
@@ -0,0 +1,57 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+name: Build Docker
+description: Action to build the Docker images
+inputs:
+  es-version:
+    description: The Docker image for which ElasticSearch version, es6 or es7
+    required: false
+    default: es6
+  tag:
+    description: The Docker image tag
+    required: false
+    default: latest
+env:
+  ES_VERSION: ${{ inputs.es-version }}
+  TAG: ${{ inputs.tag }}
+runs:
+  using: "composite"
+  steps:
+    - name: Cache local Maven repository
+      uses: actions/cache@v2
+      with:
+        path: ~/.m2/repository
+        key: ${{ runner.os }}-maven-build-${{ hashFiles('**/pom.xml') }}
+        restore-keys: ${{ runner.os }}-maven-
+    - uses: actions/download-artifact@v2
+      name: Upload Agent
+      with:
+        name: dist
+        path: dist
+    - name: Build docker images
+      run: make docker.oap || make docker.oap
+    - name: Save docker images
+      run: |
+        mkdir containers || exit 1
+        docker save -o containers/skywalking-oap-${{ inputs.tag }}.tgz skywalking/oap:-${{ inputs.tag }}
+    - uses: actions/upload-artifact@v2
+      name: Upload Docker Images
+      with:
+        name: containers
+        path: containers
diff --git a/.github/actions/e2e-test/action.yml b/.github/actions/build-tar/action.yml
similarity index 53%
copy from .github/actions/e2e-test/action.yml
copy to .github/actions/build-tar/action.yml
index f1ab13e..13b44eb 100644
--- a/.github/actions/e2e-test/action.yml
+++ b/.github/actions/build-tar/action.yml
@@ -16,36 +16,24 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-name: 'Run E2E Test'
-description: 'Common steps when running an E2E Test'
-inputs:
-  test_class:
-    description: 'The e2e test class name'
-    required: true
+name: Build Tar
+description: Action to build the binary tar
 runs:
   using: "composite"
   steps:
+    - name: Check License
+      uses: apache/skywalking-eyes@a63f4afcc287dfb3727ecc45a4afc55a5e69c15f
     - name: Cache local Maven repository
       uses: actions/cache@v2
       with:
         path: ~/.m2/repository
-        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-        restore-keys: |
-          ${{ runner.os }}-maven-
-    - name: Check License
-      uses: apache/skywalking-eyes@a63f4afcc287dfb3727ecc45a4afc55a5e69c15f
-    - name: Build Docker Image
-      shell: bash
-      env:
-        SKIP_TEST: "true"
-      run: |
-        echo "::group::Build Docker Image"
-        # Retry one more time due to frequent "maven connection reset"
-        (make docker || make docker) && (ES_VERSION=es7 TAG=latest-es7 make docker.oap || ES_VERSION=es7 TAG=latest-es7 make docker.oap)
-        echo "::endgroup::"
-    - name: Run E2E Test
+        key: ${{ runner.os }}-maven-build-${{ hashFiles('**/pom.xml') }}
+        restore-keys: ${{ runner.os }}-maven-
+    - name: Build
       shell: bash
-      run: |
-        echo "::group::Run E2E Test ${{ inputs.test_class }}"
-        ./mvnw --batch-mode -f test/e2e/pom.xml -am -DfailIfNoTests=false verify -Dit.test=${{ inputs.test_class }}
-        echo "::endgroup::"
+      run: ./mvnw -q --batch-mode -P"all,dist" -Dmaven.test.skip clean install
+    - uses: actions/upload-artifact@v2
+      name: Upload Tar
+      with:
+        name: dist
+        path: dist
diff --git a/.github/actions/e2e-test/action.yml b/.github/actions/e2e-test/action.yml
index f1ab13e..4e210f7 100644
--- a/.github/actions/e2e-test/action.yml
+++ b/.github/actions/e2e-test/action.yml
@@ -25,27 +25,17 @@ inputs:
 runs:
   using: "composite"
   steps:
-    - name: Cache local Maven repository
-      uses: actions/cache@v2
+    - uses: actions/download-artifact@v2
+      name: Upload Agent
       with:
-        path: ~/.m2/repository
-        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-        restore-keys: |
-          ${{ runner.os }}-maven-
-    - name: Check License
-      uses: apache/skywalking-eyes@a63f4afcc287dfb3727ecc45a4afc55a5e69c15f
-    - name: Build Docker Image
+        name: containers
+        path: containers
+    - name: Load Containers
       shell: bash
-      env:
-        SKIP_TEST: "true"
       run: |
-        echo "::group::Build Docker Image"
-        # Retry one more time due to frequent "maven connection reset"
-        (make docker || make docker) && (ES_VERSION=es7 TAG=latest-es7 make docker.oap || ES_VERSION=es7 TAG=latest-es7 make docker.oap)
-        echo "::endgroup::"
+        for file in $(ls containers | grep ".tgz"); do
+          docker load -i $file
+        done
     - name: Run E2E Test
       shell: bash
-      run: |
-        echo "::group::Run E2E Test ${{ inputs.test_class }}"
-        ./mvnw --batch-mode -f test/e2e/pom.xml -am -DfailIfNoTests=false verify -Dit.test=${{ inputs.test_class }}
-        echo "::endgroup::"
+      run: ./mvnw -B -f test/e2e/pom.xml -am -DfailIfNoTests=false verify -Dit.test=${{ inputs.test_class }}
diff --git a/.github/workflows/ci-it.yaml b/.github/workflows/ci-it.yaml
index 943a1aa..173661e 100644
--- a/.github/workflows/ci-it.yaml
+++ b/.github/workflows/ci-it.yaml
@@ -100,6 +100,13 @@ jobs:
         with:
           name: dist
           path: dist
+      - name: Cache local Maven repository
+        if: env.SKIP_CI != 'true'
+        uses: actions/cache@v2
+        with:
+          path: ~/.m2/repository
+          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+          restore-keys: ${{ runner.os }}-maven-
       - name: Check Dependencies Licenses
         if: env.SKIP_CI != 'true'
         run: tools/dependencies/check-LICENSE.sh
diff --git a/.github/workflows/codeql.yaml b/.github/workflows/codeql.yaml
index e08fd63..d89faf0 100644
--- a/.github/workflows/codeql.yaml
+++ b/.github/workflows/codeql.yaml
@@ -50,7 +50,8 @@ jobs:
       with:
         languages: ${{ matrix.language }}
 
-    - run: ./mvnw -q -Dmaven.test.skip=true clean install || ./mvnw -q -Dmaven.test.skip=true clean install
+    - name: Build
+      uses: ./.github/actions/build-tar
 
     - name: Perform CodeQL Analysis
       uses: github/codeql-action/analyze@v1
diff --git a/.github/workflows/docker-ci.yaml b/.github/workflows/docker-ci.yaml
index a408b03..a73caa4 100644
--- a/.github/workflows/docker-ci.yaml
+++ b/.github/workflows/docker-ci.yaml
@@ -32,45 +32,52 @@ env:
   SKIP_TEST: true
   DOCKER_DIR: ./docker
   LOG_DIR: /tmp/skywalking
+
 jobs:
-  build:
+  build-tar:
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Build
+        uses: ./.github/actions/build-tar
+
+  build-docker:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
     runs-on: ubuntu-latest
-    timeout-minutes: 90
+    timeout-minutes: 60
     strategy:
       fail-fast: true
       matrix:
         es: [es6, es7]
+    env:
+      TAG: ${{ matrix.es }}
+      ES_VERSION: ${{ matrix.es }}
     steps:
       - uses: actions/checkout@v2
         with:
           submodules: true
-      - name: Cache local Maven repository
-        uses: actions/cache@v2
+      - uses: actions/download-artifact@v2
+        name: Upload Agent
         with:
-          path: ~/.m2/repository
-          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-          restore-keys: |
-            ${{ runner.os }}-maven-
-      - uses: actions/cache@v1
-        with:
-          path: ~/.m2/repository
-          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-          restore-keys: |
-            ${{ runner.os }}-maven-
+          name: dist
+          path: dist
       - name: Build docker image
-        run: export ES_VERSION=${{ matrix.es }} && export TAG=${{ matrix.es }} && (make docker || make docker)
+        run: make docker.all || make docker.all
       - name: Bootstrap cluster
         run: |
           case ${{ matrix.es }} in
           es6) export ES_TAG=6.8.1 ;;
           es7) export ES_TAG=7.5.0 ;;
           esac
-
-          export TAG=${{ matrix.es }}
           cd ${DOCKER_DIR} && docker-compose up -d
       - name: Check port available
         run: |
+          set -e
           source ./test/scripts/env.sh
           echo "Waiting for OAP ready"
           export PORT=11800
@@ -81,15 +88,15 @@ jobs:
           check_sw_port
           echo "UI is ready"
       - name: Collect logs
+        if: ${{ always() }}
         run: |
           mkdir -p ${LOG_DIR}
           cd ${DOCKER_DIR}
           docker-compose logs oap > ${LOG_DIR}/oap.txt
           docker-compose logs ui > ${LOG_DIR}/ui.txt
           docker-compose logs elasticsearch > ${LOG_DIR}/es.txt
-        continue-on-error: true
       - uses: actions/upload-artifact@v1.0.0
-        continue-on-error: true
+        if: ${{ always() }}
         with:
           name: logs
-          path: /tmp/skywalking
+          path: $LOG_DIR
diff --git a/.github/workflows/e2e.alarm.yaml b/.github/workflows/e2e.alarm.yaml
index 4404e8c..b753232 100644
--- a/.github/workflows/e2e.alarm.yaml
+++ b/.github/workflows/e2e.alarm.yaml
@@ -32,8 +32,51 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
-  Alarm:
+  build-tar:
+    name: Build Tar
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+        with:
+          es-version: ${{ matrix.es-version }}
+          tag: ${{ matrix.tag }}
+
+  alarm:
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: Alarm
     runs-on: ubuntu-latest
     strategy:
diff --git a/.github/workflows/e2e.cluster.yaml b/.github/workflows/e2e.cluster.yaml
index fb46869..60ed8bb 100644
--- a/.github/workflows/e2e.cluster.yaml
+++ b/.github/workflows/e2e.cluster.yaml
@@ -29,15 +29,58 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+        with:
+          es-version: ${{ matrix.es-version }}
+          tag: ${{ matrix.tag }}
+
   CoordinatorsStorage:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: Coordinators & Storage
     timeout-minutes: 90
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        coordinator: ['zk']
-        storage: ['mysql', 'es6', 'es7', 'influxdb']
+        coordinator: [ 'zk' ]
+        storage: [ 'mysql', 'es6', 'es7', 'influxdb' ]
     env:
       SW_COORDINATOR: ${{ matrix.coordinator }}
       SW_STORAGE: ${{ matrix.storage }}
@@ -57,7 +100,7 @@ jobs:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
     runs-on: ubuntu-latest
     timeout-minutes: 90
-    needs: [CoordinatorsStorage]
+    needs: [ CoordinatorsStorage ]
     steps:
       - name: Call me by your name
         run: echo "Birds of a feather flock together"
diff --git a/.github/workflows/e2e.event.yaml b/.github/workflows/e2e.event.yaml
index 13abeb8..c291042 100644
--- a/.github/workflows/e2e.event.yaml
+++ b/.github/workflows/e2e.event.yaml
@@ -32,8 +32,51 @@ env:
   SKIP_TEST: true
 
 jobs:
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+        with:
+          es-version: ${{ matrix.es-version }}
+          tag: ${{ matrix.tag }}
+
   Event:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: Event
     runs-on: ubuntu-latest
     strategy:
diff --git a/.github/workflows/e2e.go.yaml b/.github/workflows/e2e.go.yaml
index c594d03..d992723 100644
--- a/.github/workflows/e2e.go.yaml
+++ b/.github/workflows/e2e.go.yaml
@@ -32,8 +32,40 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+
   GOAgent:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: GO2SKY
     runs-on: ubuntu-latest
     timeout-minutes: 90
diff --git a/.github/workflows/e2e.istio.yaml b/.github/workflows/e2e.istio.yaml
index 004db04..f2e2e00 100644
--- a/.github/workflows/e2e.istio.yaml
+++ b/.github/workflows/e2e.istio.yaml
@@ -37,15 +37,55 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+
   als:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     runs-on: ubuntu-latest
     timeout-minutes: 60
     strategy:
       fail-fast: true
       matrix:
-        analyzer: [k8s-mesh, mx-mesh]
-        istio_version: [1.7.1, 1.8.2, 1.9.1]
+        analyzer: [ k8s-mesh, mx-mesh ]
+        istio_version: [ 1.7.1, 1.8.2, 1.9.1 ]
     name: Istio(${{ matrix.istio_version }})+ALS(${{ matrix.analyzer }})
     env:
       ISTIO_VERSION: ${{ matrix.istio_version }}
@@ -57,17 +97,6 @@ jobs:
       - name: Set Skip Env Var
         uses: ./.github/actions/skip
 
-      - uses: actions/cache@v2
-        if: env.SKIP_CI != 'true'
-        with:
-          path: ~/.m2/repository
-          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-          restore-keys: ${{ runner.os }}-maven-
-
-      - name: Build Docker Image
-        if: env.SKIP_CI != 'true'
-        run: make docker
-
       - name: Prepare environment
         if: env.SKIP_CI != 'true'
         run: bash ${SCRIPTS_DIR}/pre.sh
@@ -162,13 +191,14 @@ jobs:
 
   metrics-service:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     runs-on: ubuntu-latest
     timeout-minutes: 60
     name: Istio(${{ matrix.istio_version }})+MetricsService
     strategy:
       fail-fast: true
       matrix:
-        istio_version: [1.8.2, 1.9.1]
+        istio_version: [ 1.8.2, 1.9.1 ]
     env:
       ISTIO_VERSION: ${{ matrix.istio_version }}
     steps:
@@ -179,17 +209,6 @@ jobs:
       - name: Set Skip Env Var
         uses: ./.github/actions/skip
 
-      - uses: actions/cache@v2
-        if: env.SKIP_CI != 'true'
-        with:
-          path: ~/.m2/repository
-          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-          restore-keys: ${{ runner.os }}-maven-
-
-      - name: Build Docker Image
-        if: env.SKIP_CI != 'true'
-        run: make docker
-
       - name: Prepare environment
         if: env.SKIP_CI != 'true'
         run: bash ${SCRIPTS_DIR}/pre.sh
diff --git a/.github/workflows/e2e.jdk-versions.yaml b/.github/workflows/e2e.jdk-versions.yaml
index edfbec1..f2c1115 100644
--- a/.github/workflows/e2e.jdk-versions.yaml
+++ b/.github/workflows/e2e.jdk-versions.yaml
@@ -28,6 +28,7 @@ concurrency:
 jobs:
   JavaVersions:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: Agent Java Versions
     runs-on: ubuntu-latest
     timeout-minutes: 90
@@ -51,6 +52,12 @@ jobs:
         with:
           distribution: adopt
           java-version: ${{ matrix.jdk }}
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
       - name: Run E2E Test
         if: env.SKIP_CI != 'true'
         uses: ./.github/actions/e2e-test
diff --git a/.github/workflows/e2e.js.yaml b/.github/workflows/e2e.js.yaml
index e364900..d065413 100644
--- a/.github/workflows/e2e.js.yaml
+++ b/.github/workflows/e2e.js.yaml
@@ -32,8 +32,51 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+        with:
+          es-version: ${{ matrix.es-version }}
+          tag: ${{ matrix.tag }}
+
   JavaScriptClient:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: Java Script Client
     runs-on: ubuntu-latest
     strategy:
@@ -52,8 +95,10 @@ jobs:
         uses: ./.github/actions/e2e-test
         with:
           test_class: org.apache.skywalking.e2e.browser.BrowserE2E
+
   JavaScriptClientWithRealAgent:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: Java Script Client With Real Agent
     runs-on: ubuntu-latest
     steps:
diff --git a/.github/workflows/e2e.kafka.yaml b/.github/workflows/e2e.kafka.yaml
index fdbbd81..2e3f309 100644
--- a/.github/workflows/e2e.kafka.yaml
+++ b/.github/workflows/e2e.kafka.yaml
@@ -33,8 +33,49 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+
   Kafka:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: Kafka (${{ matrix.case.name }})
     runs-on: ubuntu-latest
     timeout-minutes: 90
diff --git a/.github/workflows/e2e.log.yaml b/.github/workflows/e2e.log.yaml
index 46f4c95..b626fc9 100644
--- a/.github/workflows/e2e.log.yaml
+++ b/.github/workflows/e2e.log.yaml
@@ -32,14 +32,57 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+        with:
+          es-version: ${{ matrix.es-version }}
+          tag: ${{ matrix.tag }}
+
   Log:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: Log
     runs-on: ubuntu-latest
     timeout-minutes: 90
     strategy:
       matrix:
-        storage: ['h2', 'mysql', 'es6', 'es7', 'es7.14', 'influxdb']
+        storage: [ 'h2', 'mysql', 'es6', 'es7', 'es7.14', 'influxdb' ]
     env:
       SW_STORAGE: ${{ matrix.storage }}
     steps:
@@ -56,6 +99,7 @@ jobs:
 
   LogFluentBit:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: Log (FluentBit)
     runs-on: ubuntu-latest
     steps:
diff --git a/.github/workflows/e2e.nodejs.yaml b/.github/workflows/e2e.nodejs.yaml
index 4084cc7..57566bf 100644
--- a/.github/workflows/e2e.nodejs.yaml
+++ b/.github/workflows/e2e.nodejs.yaml
@@ -32,8 +32,48 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+
   NodeJSAgent:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: NodeJSAgent
     runs-on: ubuntu-latest
     timeout-minutes: 30
diff --git a/.github/workflows/e2e.php.yaml b/.github/workflows/e2e.php.yaml
index bf24610..f85e09c 100644
--- a/.github/workflows/e2e.php.yaml
+++ b/.github/workflows/e2e.php.yaml
@@ -29,8 +29,49 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+
   PHPAgent:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: PHP
     runs-on: ubuntu-latest
     timeout-minutes: 90
diff --git a/.github/workflows/e2e.profiling.yaml b/.github/workflows/e2e.profiling.yaml
index bc7daf6..7bcc158 100644
--- a/.github/workflows/e2e.profiling.yaml
+++ b/.github/workflows/e2e.profiling.yaml
@@ -32,14 +32,57 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+        with:
+          es-version: ${{ matrix.es-version }}
+          tag: ${{ matrix.tag }}
+
   Profiling:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: Profiling
     runs-on: ubuntu-latest
     timeout-minutes: 90
     strategy:
       matrix:
-        storage: ['h2', 'mysql', 'es6', 'es7', 'influxdb']
+        storage: [ 'h2', 'mysql', 'es6', 'es7', 'influxdb' ]
     env:
       SW_STORAGE: ${{ matrix.storage }}
     steps:
diff --git a/.github/workflows/e2e.python.yaml b/.github/workflows/e2e.python.yaml
index 152bc46..e7e9a08 100644
--- a/.github/workflows/e2e.python.yaml
+++ b/.github/workflows/e2e.python.yaml
@@ -32,8 +32,48 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+
   PythonAgent:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: PythonAgent
     runs-on: ubuntu-latest
     timeout-minutes: 30
diff --git a/.github/workflows/e2e.so11y.yaml b/.github/workflows/e2e.so11y.yaml
index cb3b945..88d47a8 100644
--- a/.github/workflows/e2e.so11y.yaml
+++ b/.github/workflows/e2e.so11y.yaml
@@ -32,8 +32,48 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+
   SelfObservability:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: SelfObservability
     runs-on: ubuntu-latest
     timeout-minutes: 90
diff --git a/.github/workflows/e2e.storages.yaml b/.github/workflows/e2e.storages.yaml
index ea4ba9c..4d6e4a0 100644
--- a/.github/workflows/e2e.storages.yaml
+++ b/.github/workflows/e2e.storages.yaml
@@ -29,14 +29,57 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+        with:
+          es-version: ${{ matrix.es-version }}
+          tag: ${{ matrix.tag }}
+
   StoragePlugins:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: Storage
     runs-on: ubuntu-latest
     timeout-minutes: 90
     strategy:
       matrix:
-        storage: ['mysql', 'es6', 'es7.0', 'es7.10', 'es7.14', 'opensearch', 'influxdb', 'tidb', 'postgresql']
+        storage: [ 'mysql', 'es6', 'es7.0', 'es7.10', 'es7.14', 'opensearch', 'influxdb', 'tidb', 'postgresql' ]
     env:
       SW_STORAGE: ${{ matrix.storage }}
     steps:
@@ -55,7 +98,7 @@ jobs:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
     runs-on: ubuntu-latest
     timeout-minutes: 90
-    needs: [StoragePlugins]
+    needs: [ StoragePlugins ]
     steps:
       - name: To pass or not pass
         run: echo "Just to make the GitHub merge button green"
diff --git a/.github/workflows/e2e.ttl.yaml b/.github/workflows/e2e.ttl.yaml
index 88c2e22..c1dea48 100644
--- a/.github/workflows/e2e.ttl.yaml
+++ b/.github/workflows/e2e.ttl.yaml
@@ -32,8 +32,51 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+  build-tar:
+    name: Build Tar
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    runs-on: ubuntu-latest
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Docker
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-docker
+        with:
+          es-version: ${{ matrix.es-version }}
+          tag: ${{ matrix.tag }}
+
   TTL:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-docker ]
     name: Storage TTL
     runs-on: ubuntu-latest
     timeout-minutes: 90
diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml
index d9766c2..a245250 100644
--- a/.github/workflows/e2e.yaml
+++ b/.github/workflows/e2e.yaml
@@ -33,52 +33,77 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
-  FeatureGroup01:
+  build-tar:
+    name: Build Tar
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
-    name: Feature
     runs-on: ubuntu-latest
-    timeout-minutes: 90
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+      - name: Set Skip Env Var
+        uses: ./.github/actions/skip
+      - name: Build Tar
+        if: env.SKIP_CI != 'true'
+        uses: ./.github/actions/build-tar
+
+  build-docker:
+    name: Build Docker
+    if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
+    needs: [ build-tar ]
+    runs-on: ubuntu-latest
     strategy:
+      fail-fast: true
       matrix:
-        case: [auth, ssl]
-    env:
-      SW_SIMPLE_CASE: ${{ matrix.case }}
+        include:
+          - es-version: es6
+            tag: latest
+          - es-version: es7
+            tag: latest-es7
+    timeout-minutes: 60
     steps:
       - uses: actions/checkout@v2
         with:
           submodules: true
       - name: Set Skip Env Var
         uses: ./.github/actions/skip
-      - name: Run E2E Test
+      - name: Build Docker
         if: env.SKIP_CI != 'true'
-        uses: ./.github/actions/e2e-test
+        uses: ./.github/actions/build-docker
         with:
-          test_class: org.apache.skywalking.e2e.simple.SimpleE2E
+          es-version: ${{ matrix.es-version }}
+          tag: ${{ matrix.tag }}
 
-  FeatureGroup02:
+  feature-test:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
-    name: ${{ matrix.case.name }}
+    needs: [ build-docker ]
+    name: Feature Test
     runs-on: ubuntu-latest
     timeout-minutes: 90
     strategy:
       matrix:
-        case:
-          - name: Lua Nginx
-            class: org.apache.skywalking.e2e.LuaE2E
-          - name: Gateway
-            class: org.apache.skywalking.e2e.GatewayE2E
-          - name: Meter
-            class: org.apache.skywalking.e2e.meter.MeterE2E
-          - name: Zabbix
-            class: org.apache.skywalking.e2e.zabbix.ZabbixE2E
+        case: simple
+        class:
+          - org.apache.skywalking.e2e.LuaE2E
+          - org.apache.skywalking.e2e.GatewayE2E
+          - org.apache.skywalking.e2e.meter.MeterE2E
+          - org.apache.skywalking.e2e.zabbix.ZabbixE2E
+        include:
+          - case: auth
+            class: org.apache.skywalking.e2e.simple.SimpleE2E
+          - case: ssl
+            class: org.apache.skywalking.e2e.simple.SimpleE2E
+    env:
+      SW_SIMPLE_CASE: ${{ matrix.sw-simple-case }}
     steps:
       - uses: actions/checkout@v2
         with:
           submodules: true
       - name: Set Skip Env Var
         uses: ./.github/actions/skip
-      - name: Run E2E Test
+      - name: ${ matrix.case }}
         if: env.SKIP_CI != 'true'
         uses: ./.github/actions/e2e-test
         with:
-          test_class: ${{ matrix.case.class }}
+          test_class: ${{ matrix.class }}