You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions作业间网络共享问题:多后端Playwright测试配置求助

解决GitHub Actions中Playwright无法连接后端作业localhost的问题

核心原因是GitHub Actions的每个作业都运行在独立的隔离环境(虚拟机/容器)中,作业间的localhost完全不互通,所以跨作业访问必然失败。以下是几种可行的解决方案:

方案1:将后端启动与Playwright测试放在同一作业中

让后端实例和Playwright共享同一个运行环境,直接通过localhost访问,这是最直接的实现方式:

  • 步骤1:在作业中先拉取后端代码,编译打包(或使用预构建的Jar包),同时启动PostgreSQL服务(可通过apt-get install postgresql快速安装,或使用官方的PostgreSQL Action)。
  • 步骤2:后台启动5个后端实例,分别绑定3000-3004端口,示例命令:
    nohup java -jar target/backend.jar --server.port=3000 &
    nohup java -jar target/backend.jar --server.port=3001 &
    nohup java -jar target/backend.jar --server.port=3002 &
    nohup java -jar target/backend.jar --server.port=3003 &
    nohup java -jar target/backend.jar --server.port=3004 &
    
  • 步骤3:编写端口就绪检测脚本,循环ping 3000-3004端口,直到全部能正常响应,示例:
    for port in {3000..3004}; do
      until curl -s http://localhost:$port/health; do
        echo "Waiting for backend on port $port..."
        sleep 2
      done
    done
    
  • 步骤4:拉取前端代码,安装Playwright依赖并下载浏览器。
  • 步骤5:运行Playwright测试,指定多个后端地址并行执行。
  • 步骤6:测试完成后,终止所有后端进程(可通过pkill java或根据端口查询PID后杀死),并使用actions/upload-artifact上传测试报告。

方案2:使用GitHub Actions服务容器部署多后端实例

将后端和数据库作为服务容器部署,Playwright作业通过服务名称而非localhost访问后端,适合需要作业分离的场景:

  1. 提前将后端代码打包为Docker镜像,推送到GitHub Packages或其他镜像仓库。
  2. 在工作流中定义服务容器,示例配置:
    jobs:
      playwright-test:
        runs-on: ubuntu-latest
        services:
          postgres:
            image: postgres:14
            env:
              POSTGRES_USER: test-user
              POSTGRES_PASSWORD: test-pass
              POSTGRES_DB: test-db
            ports:
              - 5432:5432
            options: >-
              --health-cmd pg_isready
              --health-interval 10s
              --health-timeout 5s
              --health-retries 5
          backend-3000:
            image: your-username/backend-image:latest
            ports:
              - 3000:3000
            env:
              SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/test-db
              SPRING_DATASOURCE_USERNAME: test-user
              SPRING_DATASOURCE_PASSWORD: test-pass
          backend-3001:
            image: your-username/backend-image:latest
            ports:
              - 3001:3001
            env:
              SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/test-db
          # 继续定义backend-3002至backend-3004服务
        steps:
          - uses: actions/checkout@v4
          - name: Install Playwright dependencies
            run: npm ci
          - name: Install Playwright browsers
            run: npx playwright install --with-deps
          - name: Run Playwright tests
            run: npx playwright test --workers 5
          - uses: actions/upload-artifact@v4
            if: always()
            with:
              name: playwright-report
              path: playwright-report/
    
  3. Playwright测试代码中,将后端地址改为backend-3000:3000、backend-3001:3001等服务名称对应的地址即可。

关于多后端实例是否需要5个作业的问题

不需要。无论是同一作业中启动多个进程,还是通过服务容器定义多个服务,都能在单个作业内完成5个后端实例的部署,无需为每个实例单独创建作业——这样能大幅减少环境初始化的时间和资源消耗。

内容的提问来源于stack exchange,提问作者Lumca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:37:15