Browse Source

Merge pull request #167 from emqx/add_actions_for_helm

Add actions for helm
jinfahua 5 years atrás
parent
commit
70b44e4253
1 changed files with 127 additions and 5 deletions
  1. 127 5
      .github/workflows/fvt_tests.yaml

+ 127 - 5
.github/workflows/fvt_tests.yaml

@@ -21,7 +21,7 @@ jobs:
             java-version: '8' # The JDK version to make available on the path.
             java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
             architecture: x64 # (x64 or x86) - defaults to x64
-        - name: set up jmeter
+        - name: install jmeter
           timeout-minutes: 10
           env:
             JMETER_VERSION: 5.2.1
@@ -60,7 +60,7 @@ jobs:
           with:
             name: jmeter_logs_with_edgex
             path: ./jmeter_logs
-        - name: checkout out
+        - name: check logs
           run: |
             sudo apt update && sudo apt install -y libxml2-utils
             cd jmeter_logs
@@ -82,7 +82,7 @@ jobs:
             java-version: '8' # The JDK version to make available on the path.
             java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
             architecture: x64 # (x64 or x86) - defaults to x64
-        - name: set up jmeter
+        - name: install jmeter
           timeout-minutes: 10
           env:
             JMETER_VERSION: 5.2.1
@@ -121,7 +121,7 @@ jobs:
           with:
             name: jmeter_logs_without_edgex
             path: ./jmeter_logs
-        - name: checkout out
+        - name: check logs
           run: |
             sudo apt update && sudo apt install -y libxml2-utils
             cd jmeter_logs
@@ -129,4 +129,126 @@ jobs:
                 echo -e "---------------------------------------------\n"
                 echo "FVT tests error"
                 exit 1
-            fi
+            fi
+
+    fvt_tests_for_container_in_helm:
+      runs-on: ubuntu-latest
+
+      steps:
+      - uses: actions/checkout@v2
+      - uses: actions/setup-java@v1
+        with:
+          java-version: '8' # The JDK version to make available on the path.
+          java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
+          architecture: x64 # (x64 or x86) - defaults to x64
+      - name: install jmeter
+        timeout-minutes: 10
+        env:
+          JMETER_VERSION: 5.2.1
+        run: |
+          wget -O /tmp/apache-jmeter.tgz http://us.mirrors.quenda.co/apache//jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
+          cd /tmp && tar -xvf apache-jmeter.tgz
+          echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
+          echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
+          wget -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-1.13-jar-with-dependencies.jar https://github.com/emqx/mqtt-jmeter/raw/master/Download/v1.13.0/mqtt-xmeter-1.13-jar-with-dependencies.jar
+          ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
+      - name: setup jmeter
+        timeout-minutes: 10
+        run: |
+          wget -O "/opt/jmeter/lib/json-lib-2.4-jdk15.jar" https://repo1.maven.org/maven2/net/sf/json-lib/json-lib/2.4/json-lib-2.4-jdk15.jar
+          wget -O "/opt/jmeter/lib/commons-beanutils-1.8.0.jar" https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0.jar
+          wget -O "/opt/jmeter/lib/commons-collections-3.2.1.jar" https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar
+          wget -O "/opt/jmeter/lib/commons-lang-2.5.jar" https://repo1.maven.org/maven2/commons-lang/commons-lang/2.5/commons-lang-2.5.jar
+          wget -O "/opt/jmeter/lib/commons-logging-1.1.1.jar" https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar
+          wget -O "/opt/jmeter/lib/ezmorph-1.0.6.jar" https://repo1.maven.org/maven2/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6.jar
+      - name: install docker
+        run: |
+          sudo apt-get remove docker docker-engine docker.io containerd runc
+          sudo apt-get update
+          sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
+          curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
+          sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
+          sudo apt-get update
+          sudo apt-get install docker-ce docker-ce-cli containerd.io
+      - name: install k3s
+        env:
+          KUBECONFIG: "/etc/rancher/k3s/k3s.yaml"
+        run: |
+          sudo sh -c "echo \"127.0.0.1 $(hostname)\" >> /etc/hosts"
+          curl -sfL https://get.k3s.io | sh -
+          sudo chmod 644 /etc/rancher/k3s/k3s.yaml
+          kubectl cluster-info
+      - name: install helm
+        run: |
+          curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
+          sudo chmod 700 get_helm.sh
+          sudo ./get_helm.sh
+          helm version
+      - name: build kuiper for docker
+        run: make docker
+      - name: run emqx on chart
+        env:
+          KUBECONFIG: "/etc/rancher/k3s/k3s.yaml"
+        timeout-minutes: 5
+        run: |
+          helm repo add emqx https://repos.emqx.io/charts
+          helm repo update
+          helm install emqx --set replicaCount=1 emqx/emqx
+          while [ "$(kubectl get StatefulSet -l app.kubernetes.io/name=emqx -o jsonpath='{.items[0].status.replicas}')" \
+            != "$(kubectl get StatefulSet -l app.kubernetes.io/name=emqx -o jsonpath='{.items[0].status.readyReplicas}')" ]; do
+            echo "waiting emqx started"
+            sleep 10
+          done
+      - name: run kuiper for chart
+        env:
+          KUBECONFIG: "/etc/rancher/k3s/k3s.yaml"
+        timeout-minutes: 5
+        run: |
+          version=$(git describe --tags --always)
+          emqx_address=$(kubectl get svc --namespace default emqx -o jsonpath="{.spec.clusterIP}")
+          
+          sudo docker save emqx/kuiper:$version -o kuier.tar.gz
+          sudo k3s ctr image import kuier.tar.gz
+          
+          sed -i -r "s/^appVersion: .*$/appVersion: ${version}/g" deploy/chart/kuiper/Chart.yaml
+          sed -i -r 's/  pullPolicy: .*$/  pullPolicy: Never/g' deploy/chart/kuiper/values.yaml
+          sed -i -r "s/      servers: \[.*\]$/      servers: \[tcp:\/\/${emqx_address}:1883\]/g" deploy/chart/kuiper/values.yaml
+          
+          helm install kuiper deploy/chart/kuiper
+          while [ "$(kubectl get StatefulSet -l app.kubernetes.io/name=kuiper -o jsonpath='{.items[0].status.replicas}')" \
+            != "$(kubectl get StatefulSet -l app.kubernetes.io/name=kuiper -o jsonpath='{.items[0].status.readyReplicas}')" ]; do
+            echo "waiting kuiper started"
+            sleep 10
+          done
+          kuiper_address=$(kubectl get svc --namespace default kuiper -o jsonpath="{.spec.clusterIP}")
+          if [ $(curl -w %{http_code} -fsSL -o /dev/null $kuiper_address:9081/rules) != 200 ];then exit 1; fi
+          kubectl exec kuiper-0 -- cat /kuiper/etc/mqtt_source.yaml
+      - name: check kuiper
+        env:
+          KUBECONFIG: "/etc/rancher/k3s/k3s.yaml"
+        timeout-minutes: 5
+        run: |
+          emqx_address=$(kubectl get svc --namespace default emqx -o jsonpath="{.spec.clusterIP}")
+          kuiper_address=$(kubectl get svc --namespace default kuiper -o jsonpath="{.spec.clusterIP}")
+          /opt/jmeter/bin/jmeter.sh -Jjmeter.save.saveservice.output_format=xml -n -t fvt_scripts/select_aggr_rule.jmx -Dsrv=${kuiper_address} -Dmqtt_srv=${emqx_address} -l jmeter_logs/select_aggr_rule.jtl -j jmeter_logs/select_aggr_rule.log
+          mkdir -p kuiper_logs
+          kubectl exec kuiper-0 -- cat /kuiper/log/stream.log > kuiper_logs/stream.log
+      - uses: actions/upload-artifact@v1
+        if: always()
+        with:
+          name: kuiper_logs_with_helm
+          path: ./kuiper_logs
+      - uses: actions/upload-artifact@v1
+        if: always()
+        with:
+          name: jmeter_logs_with_helm
+          path: ./jmeter_logs
+      - name: check logs
+        run: |
+          sudo apt update && sudo apt install -y libxml2-utils
+          cd jmeter_logs
+          if [ "$(xmllint --format --xpath '/testResults/sample/@rc' $(ls *.jtl) | sed -r 's/ /\n/g;' | sort -u | grep -E 'rc=\"[45][0-9][0-9]\"|rc=\"\"')" != "" ]; then
+              echo -e "---------------------------------------------\n"
+              echo "FVT tests error"
+              exit 1
+          fi