优化 GitHub Actions 流程:更新 RocketMQ 下载方式,增强启动脚本的健壮性 #155
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: test | ||
| on: | ||
| push: | ||
| branches: [ '*' ] | ||
| pull_request: | ||
| branches: [ '*' ] | ||
| jobs: | ||
| build-test: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - name: Setup Java | ||
| uses: actions/setup-java@v4 | ||
| with: | ||
| distribution: 'temurin' | ||
| java-version: '17' | ||
| - name: Setup dotNET | ||
| uses: actions/setup-dotnet@v4 | ||
| with: | ||
| dotnet-version: | | ||
| 6.x | ||
| 7.x | ||
| 8.x | ||
| 9.x | ||
| 10.x | ||
| - name: Download & Extract RocketMQ | ||
| run: | | ||
| RMQ_VERSION="5.3.1" | ||
| # 主用 Apache Archive,镜像为备用 | ||
| curl -fsSL "https://archive.apache.org/dist/rocketmq/${RMQ_VERSION}/rocketmq-all-${RMQ_VERSION}-bin-release.zip" \ | ||
| -o /tmp/rocketmq.zip || \ | ||
| curl -fsSL "https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/${RMQ_VERSION}/rocketmq-all-${RMQ_VERSION}-bin-release.zip" \ | ||
| -o /tmp/rocketmq.zip | ||
| unzip -q /tmp/rocketmq.zip -d /tmp/ | ||
| mv /tmp/rocketmq-all-${RMQ_VERSION}-bin-release /tmp/rocketmq | ||
| chmod +x /tmp/rocketmq/bin/*.sh | ||
| - name: Start RocketMQ | ||
| run: | | ||
| # 创建 broker.conf | ||
| cat > /tmp/rocketmq/conf/broker_test.conf << 'CONF' | ||
| brokerClusterName=DefaultCluster | ||
| brokerName=broker-a | ||
| brokerId=0 | ||
| deleteWhen=04 | ||
| fileReservedTime=48 | ||
| brokerRole=ASYNC_MASTER | ||
| flushDiskType=ASYNC_FLUSH | ||
| autoCreateTopicEnable=true | ||
| listenPort=10911 | ||
| storePathRootDir=/tmp/rocketmq/store | ||
| brokerIP1=127.0.0.1 | ||
| diskMaxUsedSpaceRatio=100 | ||
| diskSpaceWarningLevelRatio=100 | ||
| CONF | ||
| # 限制 JVM 内存(GitHub Actions 仅 7GB) | ||
| export MAX_HEAP_SIZE="256m" | ||
| export HEAP_NEWSIZE="128m" | ||
| echo "=== 启动 NameServer ===" | ||
| nohup /tmp/rocketmq/bin/mqnamesrv > /tmp/namesrv.log 2>&1 & | ||
| for i in $(seq 1 30); do | ||
| if grep -q "boot success" /tmp/namesrv.log 2>/dev/null; then | ||
| echo "NameServer 已启动 (PID=$(pgrep -f NamesrvStartup))" | ||
| break | ||
| fi | ||
| sleep 1 | ||
| done | ||
| if ! grep -q "boot success" /tmp/namesrv.log 2>/dev/null; then | ||
| echo "=== NameServer 启动失败 ===" | ||
| cat /tmp/namesrv.log | ||
| exit 1 | ||
| fi | ||
| echo "=== 启动 Broker ===" | ||
| nohup /tmp/rocketmq/bin/mqbroker -c /tmp/rocketmq/conf/broker_test.conf -n 127.0.0.1:9876 > /tmp/broker.log 2>&1 & | ||
| for i in $(seq 1 40); do | ||
| if grep -q "boot success" /tmp/broker.log 2>/dev/null; then | ||
| echo "Broker 已启动 (PID=$(pgrep -f BrokerStartup))" | ||
| break | ||
| fi | ||
| sleep 1 | ||
| done | ||
| if ! grep -q "boot success" /tmp/broker.log 2>/dev/null; then | ||
| echo "=== Broker 启动失败 ===" | ||
| cat /tmp/broker.log | ||
| exit 1 | ||
| fi | ||
| - name: Build | ||
| run: | | ||
| dotnet build -c Release | ||
| - name: Test | ||
| env: | ||
| ROCKETMQ_NAMESERVER: "127.0.0.1:9876" | ||
| run: | | ||
| dotnet test XUnitTestRocketMQ/XUnitTest.csproj -c Release --no-build -v n | ||
| - name: Stop RocketMQ | ||
| if: always() | ||
| run: | | ||
| pkill -f BrokerStartup 2>/dev/null || true | ||
| pkill -f NamesrvStartup 2>/dev/null || true | ||