在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
相关产品推荐
相关产品推荐

