From d65640ba4105df9f0d558b3fa5564123091e08c4 Mon Sep 17 00:00:00 2001 From: earayu Date: Wed, 11 Dec 2024 17:23:10 +0800 Subject: [PATCH] chore: add start_wesql_cluster.yml --- .github/workflows/start_wesql_cluster.yml | 103 ++++++++++++++++++++-- 1 file changed, 97 insertions(+), 6 deletions(-) diff --git a/.github/workflows/start_wesql_cluster.yml b/.github/workflows/start_wesql_cluster.yml index 065a46c4a0..127d36ba62 100644 --- a/.github/workflows/start_wesql_cluster.yml +++ b/.github/workflows/start_wesql_cluster.yml @@ -13,11 +13,102 @@ jobs: runs-on: ubuntu-latest steps: - - name: Public IP - id: ip - uses: haythem/public-ip@v1.3 + - name: Configure AWS CLI + run: | + aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }} + aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws configure set default.region us-east-2 + + - name: Create S3 Bucket + id: create_bucket + run: | + BUCKET_NAME="wescale-$(date +'%Y%m%d%H%M%S')" + echo "Bucket name: $BUCKET_NAME" + aws s3 mb s3://$BUCKET_NAME + echo "bucket_name=$BUCKET_NAME" >> $GITHUB_OUTPUT + + - name: Start WeSQL Server + run: | + export WESQL_OBJECTSTORE_BUCKET=${{ steps.create_bucket.outputs.bucket_name }} + export WESQL_OBJECTSTORE_REGION=us-east-2 + export WESQL_OBJECTSTORE_ACCESS_KEY=${{ secrets.AWS_ACCESS_KEY_ID }} + export WESQL_OBJECTSTORE_SECRET_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }} + + docker run -itd --network host --name wesql-server \ + -p 3306:3306 \ + -e MYSQL_CUSTOM_CONFIG="[mysqld]\n\ + port=3306\n\ + log-bin=binlog\n\ + gtid_mode=ON\n\ + enforce_gtid_consistency=ON\n\ + log_slave_updates=ON\n\ + binlog_format=ROW\n\ + objectstore_provider='aws'\n\ + repo_objectstore_id='tutorial'\n\ + objectstore_bucket='${WESQL_OBJECTSTORE_BUCKET}'\n\ + objectstore_region='${WESQL_OBJECTSTORE_REGION}'\n\ + branch_objectstore_id='main'" \ + -v ~/wesql-local-dir:/data/mysql \ + -e WESQL_CLUSTER_MEMBER='127.0.0.1:13306' \ + -e MYSQL_ROOT_PASSWORD=passwd \ + -e WESQL_OBJECTSTORE_ACCESS_KEY=${WESQL_OBJECTSTORE_ACCESS_KEY} \ + -e WESQL_OBJECTSTORE_SECRET_KEY=${WESQL_OBJECTSTORE_SECRET_KEY} \ + apecloud/wesql-server:8.0.35-0.1.0_beta3.38 + + - name: Wait for MySQL ports + run: | + timeout=300 # 5 minutes timeout + ports=(3306) + + for port in "${ports[@]}"; do + echo "Waiting for MySQL port $port..." + start_time=$(date +%s) + while ! nc -z localhost $port; do + current_time=$(date +%s) + elapsed=$((current_time - start_time)) + + if [ $elapsed -ge $timeout ]; then + echo "Timeout waiting for MySQL port $port" + exit 1 + fi + + echo "Port $port not ready. Retrying in 5 seconds..." + sleep 5 + done + echo "MySQL port $port is ready!" + done + + - name: Install and Start ngrok + run: | + # 安装ngrok + curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /usr/share/keyrings/ngrok-archive-keyring.asc >/dev/null + echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list + sudo apt-get update && sudo apt-get install ngrok -y + + # 配置ngrok token + ngrok config add-authtoken ${{ secrets.NGROK_AUTH_TOKEN }} + + # 后台启动ngrok tcp隧道 + nohup ngrok tcp 3306 > ngrok.log 2>&1 & + sleep 5 + + - name: Print ngrok tunnel info + run: | + curl -s http://127.0.0.1:4040/api/tunnels > tunnels.json + cat tunnels.json + # 提取 public_url 字段(这一般会是类似 tcp://X.ngrok.io:XXXXX ) + TUNNEL_URL=$(jq -r '.tunnels[0].public_url' tunnels.json) + echo "Public MySQL Tunnel URL: $TUNNEL_URL" + echo "访问方式:将TUNNEL_URL中包含的host和port用于连接MySQL即可" + + - name: Keep session running + run: | + echo "Press Ctrl+C to exit." + tail -f /dev/null - - name: Print Public IP + - name: Clean up + if: always() run: | - echo ${{ steps.ip.outputs.ipv4 }} - echo ${{ steps.ip.outputs.ipv6 }} \ No newline at end of file + echo "Deleting bucket: ${{ steps.create_bucket.outputs.bucket_name }}" + aws s3 rm s3://${{ steps.create_bucket.outputs.bucket_name }} --recursive + aws s3 rb s3://${{ steps.create_bucket.outputs.bucket_name }} \ No newline at end of file