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/27 23:58:01 UTC

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

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 a043aa82003f85b803b542862eea6274063e5430
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..6b3e099 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
+
+  buil-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..069cc94 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
+
+  buil-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..df02b81 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
+
+  buil-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..29df66a 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
+
+  buil-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..00e795d 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
+
+  buil-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..19fc831 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
+
+  buil-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..9678e1b 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
+
+  buil-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..621200f 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
+
+  buil-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..b6cea17 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
+
+  buil-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..8fa8cfa 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
+
+  buil-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..1acd383 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
+
+  buil-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..2e19906 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
+
+  buil-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..e49886c 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
+
+  buil-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..7da1239 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
+
+  buil-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..1bfa2e3 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
+
+  buil-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..81142f8 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
+
+  buil-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 }}