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

在GitHub Actions中结合多Docker容器运行Playwright遇连接问题

TL;DR

我在包含MongoDB、Firebase等多容器的GitHub Actions工作流中运行Playwright时,遇到了容器连接失败、Playwright追踪功能失效的问题。

问题描述

使用现有代码在CI流水线中无法正常运行测试,推测是容器连接失败导致的。GitHub Actions中显示测试未启动,初始化代码卡住,同时出现Running 0 tests using 0 workers的提示。

尝试用Playwright Trace排查启动阶段问题时,发现trace文件无效,上传后提示:

Could not load trace from setup-trace.zip. Make sure to upload a valid Playwright trace.

Playwright可能需要用mcr.microsoft.com/playwright:v1.31.1-focal容器运行,但如果用这个容器,工作流里的其他步骤就没法使用Docker了。

GitHub Actions错误信息
Run PLAYWRIGHT_SERVER="http://localhost:3000" npx playwright test

Running 0 tests using 0 workers

page.fill: Timeout 30000ms exceeded.
=========================== logs ===========================
waiting for locator('input[name="email"]')
============================================================

   at signup-page.ts:23

  21 |
  22 |   async signUp({ email, password }: UserInfo, ensureSuccess?: boolean) {
> 23 |     await this.page.fill('input[name="email"]', email);
     |                     ^
  24 |     await this.page.fill('input[name="password"]', password);
  25 |     await this.page.fill('input[name="repeatPassword"]', password);
  26 |     await this.page.click('button[type="submit"]');

    at SignupPage.signUp (/home/runner/work/<REPOSITORY>/e2e/signup-page.ts:23:21)
    at initApplicant01 (/home/runner/work/<REPOSITORY>/e2e/global-setup.ts:31:20)
    at globalSetup (/home/runner/work/<REPOSITORY>/e2e/global-setup.ts:66:7)

Error: Process completed with exit code 1.
代码示例

.github/workflows/build.yml

name: Build

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build_job:
    name: Build Dev
    runs-on: ubuntu-latest
    permissions:
      contents: 'read'
      id-token: 'write'
    outputs:
      release_tag_dev: ${{ steps.get-tag-dev.outputs.release_tag }}
    steps:
    - name: Setup
      uses: actions/checkout@v3
    - uses: actions/setup-node@v3
    - run: npm install
    - run: npm run build

    - name: Build and upload
      uses: docker/setup-buildx-action@v2
    - uses: docker/build-push-action@v4
      with:
        context: .
        tags: specific-build:latest
        outputs: type=docker,dest=./repository-image.tar
    - uses: actions/upload-artifact@v3
      with:
        name: repository-artifact
        path: ./repository-image.tar

    - name: Get Tag
      id: get-tag-dev
      run: echo "release_tag=$(date +%s%3N)-$(git rev-parse --short=8 HEAD)-prod" >> $GITHUB_OUTPUT

  test_job:
    name: Run Tests
    needs: [ build_job ]
    runs-on: ubuntu-latest
    permissions:
      contents: 'read'
      id-token: 'write'
    # container: mcr.microsoft.com/playwright:v1.31.1-focal
    steps:
    - uses: actions/checkout@v3

    - name: Download Repository TAR
      id: auth
      uses: google-github-actions/auth@v0
      with:
        token_format: access_token
        workload_identity_provider: <CREDENTIALS>
        service_account: <ACCOUNT>
        access_token_lifetime: 300s
    - uses: docker/login-action@v2
      with:
        registry: us-west1-docker.pkg.dev
        username: <USERNAME>
        password: ${{ steps.auth.outputs.access_token }}
    - uses: actions/download-artifact@v3
      with:
        name: repository-artifact
    - run: docker load --input ./repository-image.tar
    - run: RELEASE_TAG=${{ needs.build_job.outputs.release_tag_dev }} docker compose up -d

    - name: Run Tests
      uses: actions/setup-node@v3
    - run: npm ci --cache .npm --prefer-offline
    - run: npx playwright install
    - run: npx playwright test  
    # Everything below is just to view the Playwright Trace      
      continue-on-error: true
      env:
          PLAYWRIGHT_SERVER: "http://localhost:3000"
    - uses: actions/upload-artifact@v3
      with:
        name: upload-trace
        path: ./e2e/artifacts/setup-trace.zip

docker-compose.yml

version: "1"

services:
  mongodb:
    image: "mongo"
    ports:
      - "27017:27017"
    command: mongod --bind_ip 0.0.0.0

  firebase:
    image: <PRIVATE_IMAGE>
    ports:
      - "4000:4000"
      - "4400:4400"
      - "4500:4500"
      - "9099:9099"
      - "9199:9199"
    command: --project=<REPOSITORY> emulators:start

  <REPOSITORY_IN_TEST>:
    image: "specific-build:latest"
    ports:
      - "3000:3000"
    environment:
      - DB_CONNECTION_STRING=mongodb://<PRIVATE_STRING>
      - DISABLE_DB_SSL=true
      - CORS_ORIGINS=http://localhost:3000
      - FIREBASE_AUTH_EMULATOR_HOST=firebase:9099
      - NEXT_PUBLIC_FIREBASE_AUTH_EMULATOR_HOST=firebase:9099
      - NEXT_PUBLIC_SENTRY_ENVIRONMENT=ci
      - <PLAID, SENTRY, and OTHER CONTEXT>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:52:57