Przeglądaj źródła

ci: run start-two-nodes-in-docker.sh test script in CI

Closes: EMQX-8884
Serge Tupchii 2 lat temu
rodzic
commit
9f006d0e2a

+ 13 - 4
.github/workflows/build_slim_packages.yaml

@@ -165,19 +165,21 @@ jobs:
       fail-fast: false
       matrix:
         profile:
-          - emqx
-          - emqx-enterprise
+          - ["emqx", "5.0.16"]
+          - ["emqx-enterprise", "5.0.1"]
 
     steps:
     - uses: actions/checkout@v3
     - name: prepare
       run: |
-        EMQX_NAME=${{ matrix.profile }}
+        EMQX_NAME=${{ matrix.profile[0] }}
         PKG_VSN=${PKG_VSN:-$(./pkg-vsn.sh $EMQX_NAME)}
         EMQX_IMAGE_TAG=emqx/$EMQX_NAME:test
+        EMQX_IMAGE_OLD_VERSION_TAG=emqx/$EMQX_NAME:${{ matrix.profile[1] }}
         echo "EMQX_NAME=$EMQX_NAME" >> $GITHUB_ENV
         echo "PKG_VSN=$PKG_VSN" >> $GITHUB_ENV
         echo "EMQX_IMAGE_TAG=$EMQX_IMAGE_TAG" >> $GITHUB_ENV
+        echo "EMQX_IMAGE_OLD_VERSION_TAG=$EMQX_IMAGE_OLD_VERSION_TAG" >> $GITHUB_ENV
     - uses: docker/setup-buildx-action@v2
     - name: build and export to Docker
       uses: docker/build-push-action@v4
@@ -194,12 +196,19 @@ jobs:
         HTTP_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "18083/tcp") 0).HostPort}}' $CID)
         ./scripts/test/emqx-smoke-test.sh localhost $HTTP_PORT
         docker stop $CID
+    - name: test two nodes cluster with proto_dist=inet_tls in docker
+      run: |
+        ./scripts/test/start-two-nodes-in-docker.sh -P $EMQX_IMAGE_TAG $EMQX_IMAGE_OLD_VERSION_TAG
+        HTTP_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "18083/tcp") 0).HostPort}}' haproxy)
+        ./scripts/test/emqx-smoke-test.sh localhost $HTTP_PORT
+        # cleanup
+        ./scripts/test/start-two-nodes-in-docker.sh -c
     - 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"
+        name: "${{ matrix.profile[0] }}-docker"
         path: "${{ env.EMQX_NAME }}-${{ env.PKG_VSN }}.tar.gz"
 
   spellcheck:

+ 37 - 20
scripts/test/start-two-nodes-in-docker.sh

@@ -10,19 +10,36 @@ set -euo pipefail
 # ensure dir
 cd -P -- "$(dirname -- "$0")/../../"
 
-IMAGE1="${1}"
-IMAGE2="${2:-${IMAGE1}}"
+HAPROXY_PORTS=(-p 18083:18083 -p 8883:8883 -p 8084:8084)
 
 NET='emqx.io'
 NODE1="node1.$NET"
 NODE2="node2.$NET"
 COOKIE='this-is-a-secret'
 
-## clean up
-docker rm -f haproxy >/dev/null 2>&1 || true
-docker rm -f "$NODE1" >/dev/null 2>&1 || true
-docker rm -f "$NODE2" >/dev/null 2>&1 || true
-docker network rm "$NET" >/dev/null 2>&1 || true
+cleanup() {
+    docker rm -f haproxy >/dev/null 2>&1 || true
+    docker rm -f "$NODE1" >/dev/null 2>&1 || true
+    docker rm -f "$NODE2" >/dev/null 2>&1 || true
+    docker network rm "$NET" >/dev/null 2>&1 || true
+}
+
+while getopts ":Pc" opt
+do
+    case $opt in
+        # -P option is treated similarly to docker run -P:
+        # publish ports to random available host ports
+        P) HAPROXY_PORTS=(-p 18083 -p 8883 -p 8084);;
+        c) cleanup; exit 0;;
+        *) ;;
+    esac
+done
+shift $((OPTIND - 1))
+
+IMAGE1="${1}"
+IMAGE2="${2:-${IMAGE1}}"
+
+cleanup
 
 docker network create "$NET"
 
@@ -128,18 +145,18 @@ backend emqx_wss_back
 EOF
 
 
-docker run -d --name haproxy \
-    --net "$NET" \
-    -v "$(pwd)/tmp/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg" \
-    -v "$(pwd)/apps/emqx/etc/certs:/usr/local/etc/haproxy/certs" \
-    -w /usr/local/etc/haproxy \
-    -p 18083:18083 \
-    -p 8883:8883 \
-    -p 8084:8084 \
-    "haproxy:2.4" \
-    bash -c 'set -euo pipefail;
-             cat certs/cert.pem certs/key.pem > /tmp/emqx.pem;
-             haproxy -f haproxy.cfg'
+haproxy_cid=$(docker run -d --name haproxy \
+                     --net "$NET" \
+                     -v "$(pwd)/tmp/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg" \
+                     -v "$(pwd)/apps/emqx/etc/certs:/usr/local/etc/haproxy/certs" \
+                     -w /usr/local/etc/haproxy \
+                     "${HAPROXY_PORTS[@]}" \
+                     "haproxy:2.4" \
+                     bash -c 'set -euo pipefail;
+                              cat certs/cert.pem certs/key.pem > /tmp/emqx.pem;
+                              haproxy -f haproxy.cfg')
+
+haproxy_ssl_port=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "8084/tcp") 0).HostPort}}' "$haproxy_cid")
 
 wait_limit=60
 wait_for_emqx() {
@@ -165,7 +182,7 @@ wait_for_haproxy() {
                 -CAfile apps/emqx/etc/certs/cacert.pem \
                 -cert apps/emqx/etc/certs/cert.pem \
                 -key apps/emqx/etc/certs/key.pem \
-                localhost:8084 </dev/null; do
+                localhost:"$haproxy_ssl_port" </dev/null; do
         wait_sec=$(( wait_sec + 1 ))
         if [ $wait_sec -gt "$wait_limit" ]; then
             echo "timeout wait for haproxy"