Browse Source

ci: test docker images and packages in the same way

Ivan Dyachkov 3 years atrás
parent
commit
739455d844
4 changed files with 44 additions and 40 deletions
  1. 22 19
      .github/workflows/build_slim_packages.yaml
  2. 1 1
      build
  3. 2 20
      scripts/pkg-tests.sh
  4. 19 0
      scripts/test/emqx-smoke-test.sh

+ 22 - 19
.github/workflows/build_slim_packages.yaml

@@ -155,7 +155,7 @@ jobs:
         path: _packages/**/*
 
   docker:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
 
     strategy:
       fail-fast: false
@@ -168,32 +168,35 @@ jobs:
     - uses: actions/checkout@v3
     - name: prepare
       run: |
-        echo "EMQX_NAME=${{ matrix.profile }}" >> $GITHUB_ENV
-    - name: build and test docker image
+        EMQX_NAME=${{ matrix.profile }}
+        PKG_VSN=${PKG_VSN:-$(./pkg-vsn.sh $EMQX_NAME)}
+        EMQX_IMAGE_TAG=emqx/$EMQX_NAME:test
+        echo "EMQX_NAME=$EMQX_NAME" >> $GITHUB_ENV
+        echo "PKG_VSN=$PKG_VSN" >> $GITHUB_ENV
+        echo "EMQX_IMAGE_TAG=$EMQX_IMAGE_TAG" >> $GITHUB_ENV
+    - uses: docker/setup-buildx-action@v2
+    - name: build and export to Docker
+      uses: docker/build-push-action@v4
+      with:
+        context: .
+        file: ./deploy/docker/Dockerfile
+        load: true
+        tags: ${{ env.EMQX_IMAGE_TAG }}
+        build-args: |
+          EMQX_NAME=${{ env.EMQX_NAME }}
+    - name: test docker image
       run: |
-        set -x
-        make $EMQX_NAME-docker
-        PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh $EMQX_NAME)}"
-        EMQX_IMAGE_TAG="${EMQX_IMAGE_TAG:-emqx/$EMQX_NAME:$PKG_VSN}"
         CID=$(docker run -d --rm -P $EMQX_IMAGE_TAG)
         HTTP_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "18083/tcp") 0).HostPort}}' $CID)
-        IDLE_TIME=0
-        while ! curl http://127.0.0.1:$HTTP_PORT/status >/dev/null 2>&1; do
-            if [ $IDLE_TIME -gt 5 ]
-            then
-                echo "emqx running error"
-                docker rm -f $CID
-                exit 1
-            fi
-            sleep 5
-            IDLE_TIME=$((IDLE_TIME+1))
-        done
+        ./scripts/test/emqx-smoke-test.sh localhost $HTTP_PORT
         docker stop $CID
+    - name: export docker image
+      run: |
         docker save $EMQX_IMAGE_TAG | gzip > $EMQX_NAME-$PKG_VSN.tar.gz
     - uses: actions/upload-artifact@v3
       with:
         name: "${{ matrix.profile }}-docker"
-        path: "*.tar.gz"
+        path: "${{ env.EMQX_NAME }}-${{ env.PKG_VSN }}.tar.gz"
 
   spellcheck:
     needs: linux

+ 1 - 1
build

@@ -6,7 +6,7 @@
 
 set -euo pipefail
 
-[ ${DEBUG:-0} -eq 1 ] && set -x
+[ "${DEBUG:-0}" -eq 1 ] && set -x
 
 PROFILE_ARG="$1"
 ARTIFACT="$2"

+ 2 - 20
scripts/pkg-tests.sh

@@ -103,16 +103,7 @@ emqx_test(){
                 cat "${PACKAGE_PATH}"/emqx/log/emqx.log.1 || true
                 exit 1
             fi
-            IDLE_TIME=0
-            while ! curl http://127.0.0.1:18083/status >/dev/null 2>&1; do
-                if [ $IDLE_TIME -gt 10 ]
-                then
-                    echo "emqx running error"
-                    exit 1
-                fi
-                sleep 10
-                IDLE_TIME=$((IDLE_TIME+1))
-            done
+            "$SCRIPTS/test/emqx-smoke-test.sh" 127.0.0.1 18083
             pytest -v /paho-mqtt-testing/interoperability/test_client/V5/test_connect.py::test_basic
             if ! "${PACKAGE_PATH}"/emqx/bin/emqx stop; then
                 cat "${PACKAGE_PATH}"/emqx/log/erlang.log.1 || true
@@ -208,16 +199,7 @@ EOF
         cat /var/log/emqx/emqx.log.1 || true
         exit 1
     fi
-    IDLE_TIME=0
-    while ! curl http://127.0.0.1:18083/status >/dev/null 2>&1; do
-        if [ $IDLE_TIME -gt 10 ]
-        then
-            echo "emqx running error"
-            exit 1
-        fi
-        sleep 10
-        IDLE_TIME=$((IDLE_TIME+1))
-    done
+    "$SCRIPTS/test/emqx-smoke-test.sh" 127.0.0.1 18083
     pytest -v /paho-mqtt-testing/interoperability/test_client/V5/test_connect.py::test_basic
     # shellcheck disable=SC2009 # pgrep does not support Extended Regular Expressions
     ps -ef | grep -E '\-progname\s.+emqx\s'

+ 19 - 0
scripts/test/emqx-smoke-test.sh

@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+[ $# -ne 2 ] && { echo "Usage: $0 ip port"; exit 1; }
+
+IP=$1
+PORT=$2
+URL="http://$IP:$PORT/status"
+
+ATTEMPTS=10
+while ! curl "$URL" >/dev/null 2>&1; do
+    if [ $ATTEMPTS -eq 0 ]; then
+        echo "emqx is not responding on $URL"
+        exit 1
+    fi
+    sleep 5
+    ATTEMPTS=$((ATTEMPTS-1))
+done