在 GitHub Actions 上运行 Firebase 模拟器

9

我试图在Github Actions上运行我的测试,但尝试了几次后仍无法成功。

收到以下错误信息:

错误:firestore:Firestore Emulator已退出,因为未安装java,您可以从https://openjdk.java.net/install/安装它。


  - name: Test
    uses: w9jds/firebase-action@v1.3.1
    env:
      JAVA_HOME: ${{ env.JAVA_HOME }}
      FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
      GCLOUD_PROJECT: ${{ secrets.nextGCLOUD_PROJECT }}
      PROJECT_ID: ${{ secrets.nextFIREBASE_PROJECTID }}
    with:
      args: |
        setup:emulators:firestore --debug
        firebase emulators:exec --debug --only functions,firestore \"npm run test --exit -- --forceExit --detectOpenHandles\"

  - name: Print debug logs
    if: failure()
    run: |
      java --version
      ls -la
      find . -type f -name "fire*-debug.log" | xargs cat

这是动作name: Test的输出结果。

/usr/bin/docker run --name d38e5ad93a422d456db01475acdae41155_521526 --label 3888d3 --workdir /github/workspace --rm -e JAVA_HOME -e FIREBASE_TOKEN -e GCLOUD_PROJECT -e PROJECT_ID -e INPUT_ARGS -e HOME -e GITHUB_JOB -e GITHUB_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_REPOSITORY_OWNER -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_ACTOR -e GITHUB_WORKFLOW -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GITHUB_EVENT_NAME -e GITHUB_SERVER_URL -e GITHUB_API_URL -e GITHUB_GRAPHQL_URL -e GITHUB_WORKSPACE -e GITHUB_ACTION -e GITHUB_EVENT_PATH -e RUNNER_OS -e RUNNER_TOOL_CACHE -e RUNNER_TEMP -e RUNNER_WORKSPACE -e ACTIONS_RUNTIME_URL -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e GITHUB_ACTIONS=true -e CI=true --network github_network_2107949b3a2c43d499d641b1c2f0fd12 -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/pwa/pwa":"/github/workspace" 3888d3:8e5ad93a422d456db01475acdae41155 setup:emulators:firestore --debug
firebase emulators:exec --debug --only functions,firestore \"npm run test --exit -- --forceExit --detectOpenHandles\"
setting firebase project to ***
Now using project ***
i  firestore: downloading cloud-firestore-emulator-v1.11.4.jar... {"metadata":{"emulator":{"name":"firestore"},"message":"downloading cloud-firestore-emulator-v1.11.4.jar..."}}

[2020-06-06T12:59:30.184Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2020-06-06T12:59:30.186Z] > authorizing via FIREBASE_TOKEN environment variable
i  emulators: Starting emulators: functions, firestore {"metadata":{"emulator":{"name":"hub"},"message":"Starting emulators: functions, firestore"}}
[2020-06-06T12:59:30.217Z] [hub] writing locator at /tmp/hub-***.json
  functions: Using node@10 from host. {"metadata":{"emulator":{"name":"functions"},"message":"Using node@10 from host."}}
[2020-06-06T12:59:30.249Z] Ignoring unsupported arg: projectId {"metadata":{"emulator":{"name":"firestore"},"message":"Ignoring unsupported arg: projectId"}}
[2020-06-06T12:59:30.249Z] Ignoring unsupported arg: auto_download {"metadata":{"emulator":{"name":"firestore"},"message":"Ignoring unsupported arg: auto_download"}}
[2020-06-06T12:59:30.249Z] Starting Firestore Emulator with command {"binary":"java","args":["-Duser.language=en","-jar","/github/home/.cache/firebase/emulators/cloud-firestore-emulator-v1.11.4.jar","--host","localhost","--port",8080,"--rules","/github/workspace/firestore.rules","--functions_emulator","localhost:5001"],"optionalArgs":["port","webchannel_port","host","rules","functions_emulator","seed_from_export"],"joinArgs":false} {"metadata":{"emulator":{"name":"firestore"},"message":"Starting Firestore Emulator with command {\"binary\":\"java\",\"args\":[\"-Duser.language=en\",\"-jar\",\"/github/home/.cache/firebase/emulators/cloud-firestore-emulator-v1.11.4.jar\",\"--host\",\"localhost\",\"--port\",8080,\"--rules\",\"/github/workspace/firestore.rules\",\"--functions_emulator\",\"localhost:5001\"],\"optionalArgs\":[\"port\",\"webchannel_port\",\"host\",\"rules\",\"functions_emulator\",\"seed_from_export\"],\"joinArgs\":false}"}}
i  firestore: Firestore Emulator logging to firestore-debug.log {"metadata":{"emulator":{"name":"firestore"},"message":"Firestore Emulator logging to \u001b[1mfirestore-debug.log\u001b[22m"}}

Error: firestore: Firestore Emulator has exited because java is not installed, you can install it from https://openjdk.java.net/install/

这是来自操作名称:打印调试日志的输出结果。
[debug] [2020-06-06T12:59:27.289Z] ----------------------------------------------------------------------
[debug] [2020-06-06T12:59:27.291Z] Command:       /usr/local/bin/node /usr/local/bin/firebase setup:emulators:firestore --debug
[debug] [2020-06-06T12:59:27.292Z] CLI Version:   8.4.2
[debug] [2020-06-06T12:59:27.292Z] Platform:      linux
[debug] [2020-06-06T12:59:27.292Z] Node Version:  v10.21.0
[debug] [2020-06-06T12:59:27.292Z] Time:          Sat Jun 06 2020 12:59:27 GMT+0000 (Coordinated Universal Time)
[debug] [2020-06-06T12:59:27.293Z] ----------------------------------------------------------------------
[debug] [2020-06-06T12:59:27.293Z]
[info] i  firestore: downloading cloud-firestore-emulator-v1.11.4.jar... {"metadata":{"emulator":{"name":"firestore"},"message":"downloading cloud-firestore-emulator-v1.11.4.jar..."}}
[debug] [2020-06-06T12:59:30.168Z] ----------------------------------------------------------------------
[debug] [2020-06-06T12:59:30.170Z] Command:       /usr/local/bin/node /usr/local/bin/firebase emulators:exec --debug --only functions,firestore npm run test --exit -- --forceExit --detectOpenHandles
[debug] [2020-06-06T12:59:30.171Z] CLI Version:   8.4.2
[debug] [2020-06-06T12:59:30.171Z] Platform:      linux
[debug] [2020-06-06T12:59:30.171Z] Node Version:  v10.21.0
[debug] [2020-06-06T12:59:30.171Z] Time:          Sat Jun 06 2020 12:59:30 GMT+0000 (Coordinated Universal Time)
[debug] [2020-06-06T12:59:30.171Z] ----------------------------------------------------------------------
[debug] [2020-06-06T12:59:30.171Z]
[debug] [2020-06-06T12:59:30.184Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[debug] [2020-06-06T12:59:30.186Z] > authorizing via FIREBASE_TOKEN environment variable
[info] i  emulators: Starting emulators: functions, firestore {"metadata":{"emulator":{"name":"hub"},"message":"Starting emulators: functions, firestore"}}
[debug] [2020-06-06T12:59:30.217Z] [hub] writing locator at /tmp/hub-***.json
[info] ✔  functions: Using node@10 from host. {"metadata":{"emulator":{"name":"functions"},"message":"Using node@10 from host."}}
[debug] [2020-06-06T12:59:30.249Z] Ignoring unsupported arg: projectId {"metadata":{"emulator":{"name":"firestore"},"message":"Ignoring unsupported arg: projectId"}}
[debug] [2020-06-06T12:59:30.249Z] Ignoring unsupported arg: auto_download {"metadata":{"emulator":{"name":"firestore"},"message":"Ignoring unsupported arg: auto_download"}}
[debug] [2020-06-06T12:59:30.249Z] Starting Firestore Emulator with command {"binary":"java","args":["-Duser.language=en","-jar","/github/home/.cache/firebase/emulators/cloud-firestore-emulator-v1.11.4.jar","--host","localhost","--port",8080,"--rules","/github/workspace/firestore.rules","--functions_emulator","localhost:5001"],"optionalArgs":["port","webchannel_port","host","rules","functions_emulator","seed_from_export"],"joinArgs":false} {"metadata":{"emulator":{"name":"firestore"},"message":"Starting Firestore Emulator with command {\"binary\":\"java\",\"args\":[\"-Duser.language=en\",\"-jar\",\"/github/home/.cache/firebase/emulators/cloud-firestore-emulator-v1.11.4.jar\",\"--host\",\"localhost\",\"--port\",8080,\"--rules\",\"/github/workspace/firestore.rules\",\"--functions_emulator\",\"localhost:5001\"],\"optionalArgs\":[\"port\",\"webchannel_port\",\"host\",\"rules\",\"functions_emulator\",\"seed_from_export\"],\"joinArgs\":false}"}}
[info] i  firestore: Firestore Emulator logging to firestore-debug.log {"metadata":{"emulator":{"name":"firestore"},"message":"Firestore Emulator logging to \u001b[1mfirestore-debug.log\u001b[22m"}}
[error]
[error] Error: firestore: Firestore Emulator has exited because java is not installed, you can install it from https://openjdk.java.net/install/

如何在 Github Actions 上运行我的测试?

4个回答

8

在撰写本文的时候,非官方的 firebase-action 最近添加了对 Java 的支持。不幸的是,这是 Java 7,而模拟器需要 Java 8。(我已经在该仓库中提出了问题以解决此问题)。

另外,对于任何感兴趣的人,我发现以下方法效果很好:

name: Test Firebase rules on PR
'on': pull_request
jobs:
  test_rules:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
        with:
          node-version: '12'
      - run: npm install -g firebase-tools
      - run: npm ci
      - run: firebase emulators:exec --only firestore \"npm run test --exit\"

关于上述工作流程文件,有两个重要的注释:
  1. ubuntu-latest 是必需的,因为它包含了 Node 和 Java。
  2. actions/setup-node@v1 是必需的,以设置 Node 以允许安装全局 npm 包。
此外,如果您想将部署步骤添加到上述内容中,只需要在 setup-node 步骤之前添加以下内容,用于身份验证:
      - uses: google-github-actions/setup-gcloud@master
        with:
          project_id: ${{ secrets.GCP_PROJECT_ID }}
          service_account_key: ${{ secrets.GCP_SA_KEY }}
          export_default_credentials: true

这是因为export_default_credentials会导出GOOGLE_APPLICATION_CREDENTIALS环境变量,firebase-tools将使用该变量进行身份验证。

1

这对我有用

jobs:
  test:
    name: Test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
        with:
          node-version: '12'
      - name: Install Dependacies
        run: cd functions && npm install
      - name: Test to Firebase
        uses: w9jds/firebase-action@master
        with:
          args: emulators:exec --only firestore \"cd functions && npm run test --exit\"
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

1
尝试这个 -
name: next

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Setting-up Node.js
        uses: actions/setup-node@v2-beta
        with:
          node-version: '10'

      - name: Installing npm dependencies
        run: npm ci --prefer-offline --no-audit --progress=false

      - name: Checking-out
        uses: actions/checkout@v2

      - name: Setting-up JAVA
        uses: actions/setup-java@v1.3.0
        with: 
          java-version: "12.x"

      - name: Setup and Test Emulator
        uses: w9jds/firebase-action@v1.3.1
        env:
          JAVA_HOME: ${{ env.JAVA_HOME }}
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
          GCLOUD_PROJECT: ${{ secrets.nextGCLOUD_PROJECT }}
          PROJECT_ID: ${{ secrets.nextFIREBASE_PROJECTID }}
        with:
          args: |
            setup:emulators:firestore
            emulators:exec --only firestore \"npm run test --exit\"

不行,因为这个操作的方式有问题。w9jds/firebase-action - ridermansb
尝试使用我的答案中的参数拆分。 - Abhishek
请尝试使用master分支,而不是v1.3.0,并提供从开始到结束的完整操作日志,我认为问题在于环境变量未正确设置。 - Abhishek
我尝试了,问题还是一样。我还尝试创建了自己的 Github Action... (https://github.com/marketplace/actions/github-action-with-firebase-cli-and-java-ready),但仍然... 问题依旧。我不知道还能做什么。 - ridermansb
有没有什么进展?我很难找到一个可用的示例。 - delpo
显示剩余6条评论

1
如果您不需要使用Node环境,请尝试以下方法。
name: Test and coverage

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 2
      - uses: actions/setup-go@v2
        with:
          go-version: '1.19'
      - name: Install firebase
        run: curl -sL https://firebase.tools | bash
      - name: Run firebase emulators
        run: firebase emulators:start --only auth &
      - name: Run coverage
        run: go test -race -coverprofile=coverage.txt -covermode=atomic ./...
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接