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

Closes: EMQX-8884
This commit is contained in:
Serge Tupchii 2023-03-24 13:37:05 +02:00
parent f4472f66de
commit 9f006d0e2a
2 changed files with 50 additions and 24 deletions

View File

@ -165,19 +165,21 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
profile: profile:
- emqx - ["emqx", "5.0.16"]
- emqx-enterprise - ["emqx-enterprise", "5.0.1"]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: prepare - name: prepare
run: | run: |
EMQX_NAME=${{ matrix.profile }} EMQX_NAME=${{ matrix.profile[0] }}
PKG_VSN=${PKG_VSN:-$(./pkg-vsn.sh $EMQX_NAME)} PKG_VSN=${PKG_VSN:-$(./pkg-vsn.sh $EMQX_NAME)}
EMQX_IMAGE_TAG=emqx/$EMQX_NAME:test 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 "EMQX_NAME=$EMQX_NAME" >> $GITHUB_ENV
echo "PKG_VSN=$PKG_VSN" >> $GITHUB_ENV echo "PKG_VSN=$PKG_VSN" >> $GITHUB_ENV
echo "EMQX_IMAGE_TAG=$EMQX_IMAGE_TAG" >> $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 - uses: docker/setup-buildx-action@v2
- name: build and export to Docker - name: build and export to Docker
uses: docker/build-push-action@v4 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) HTTP_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "18083/tcp") 0).HostPort}}' $CID)
./scripts/test/emqx-smoke-test.sh localhost $HTTP_PORT ./scripts/test/emqx-smoke-test.sh localhost $HTTP_PORT
docker stop $CID 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 - name: export docker image
run: | run: |
docker save $EMQX_IMAGE_TAG | gzip > $EMQX_NAME-$PKG_VSN.tar.gz docker save $EMQX_IMAGE_TAG | gzip > $EMQX_NAME-$PKG_VSN.tar.gz
- uses: actions/upload-artifact@v3 - uses: actions/upload-artifact@v3
with: with:
name: "${{ matrix.profile }}-docker" name: "${{ matrix.profile[0] }}-docker"
path: "${{ env.EMQX_NAME }}-${{ env.PKG_VSN }}.tar.gz" path: "${{ env.EMQX_NAME }}-${{ env.PKG_VSN }}.tar.gz"
spellcheck: spellcheck:

View File

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