【问题标题】:cypress-io/github-action does not accept all environment variablescypress-io/github-action 不接受所有环境变量
【发布时间】:2021-12-06 06:50:20
【问题描述】:

我的目的很简单,在 Pull Request 上使用 Github 操作运行 cypress e2e 测试。我使用cypress-firebase 进行测试,我的所有测试都应该使用Firebase Emulator 运行。我还用cypress-io/github-action 表示CI。

我的问题是,在使用 cypress-io/github-action 时,我需要为我的 react 应用程序传递一些环境变量才能与 Firebase 模拟器一起使用,并且整个应用程序无法识别所有环境变量。请参阅我的工作流文件以了解。

这是我的 Github 操作工作流文件的相关部分:

- name: Cypress run
  uses: cypress-io/github-action@v2
  with:
    browser: chrome
    headless: true
    record: true
    start: yarn run ci:start:emulator
    wait-on: "http://localhost:3000"
    wait-on-timeout: 300 # wait for 5 minutes
  env:
    # Add debugger
    # https://github.com/cypress-io/github-action#debugging
    DEBUG: "@cypress/github-action"
    FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
    PROJECT_ID: ${{ secrets.REACT_APP_PROJECT_ID }}
    FIREBASE_CONFIG: ${{ secrets.FIREBASE_CI_CLOUD_FUNCTIONS_CONFIG }}
    # Branch settings
    GITHUB_HEAD_REF: ${{ github.head_ref }}
    GITHUB_REF: ${{ github.ref }}
    # pass the Cypress Dashboard variables
    CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
    CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
    # UID of user to login during test
    CYPRESS_BASE_URL: http://localhost:3000
    CYPRESS_TEST_UID: ${{ secrets.CYPRESS_TEST_UID }}
    # Service Account (used for creating custom auth tokens)
    SERVICE_ACCOUNT: ${{ secrets.CYPRESS_SERVICE_ACCOUNT }}
    # Environment variables
    REACT_APP_ANY_KEY: ${{ secrets.REACT_APP_ANY_KEY }}

这是我在package.json 文件中的ci:start:emulator 命令:

"ci:start:emulator": "firebase emulators:exec 'yarn start'"

问题是yarn start 命令无法识别我上面的REACT_APP_ANY_KEY 环境变量。似乎cypress-io/github-action 没有将它们传递给我的yarn start 命令。

我尝试将上面的命令更改为

"ci:start:emulator": "cross-env REACT_APP_ANY_KEY=<SOME_HARD_CODE_VALUE> firebase emulators:exec 'yarn start'"

完美运行!但当然,我们不想像这样通过这个命令传递大量的环境变量。

任何帮助将不胜感激!

【问题讨论】:

    标签: firebase cypress github-actions firebase-tools


    【解决方案1】:

    根据docsYou can define environment variables for a step, job, or entire workflow,所以在这里你只为这一步Cypress run定义了这些环境变量,而不是整个工作,为了解决这个问题,你应该使用this定义环境变量,一个例子:

    jobs:
      job1:
        env:
        # Add debugger
        # https://github.com/cypress-io/github-action#debugging
        DEBUG: "@cypress/github-action"
        FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
        PROJECT_ID: ${{ secrets.REACT_APP_PROJECT_ID }}
        FIREBASE_CONFIG: ${{ secrets.FIREBASE_CI_CLOUD_FUNCTIONS_CONFIG }}
        # Branch settings
        GITHUB_HEAD_REF: ${{ github.head_ref }}
        GITHUB_REF: ${{ github.ref }}
        # pass the Cypress Dashboard variables
        CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
        CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
        # UID of user to login during test
        CYPRESS_BASE_URL: http://localhost:3000
        CYPRESS_TEST_UID: ${{ secrets.CYPRESS_TEST_UID }}
        # Service Account (used for creating custom auth tokens)
        SERVICE_ACCOUNT: ${{ secrets.CYPRESS_SERVICE_ACCOUNT }}
        # Environment variables
        REACT_APP_ANY_KEY: ${{ secrets.REACT_APP_ANY_KEY }}
    

    环境变量应该可以通过Job的步骤访问,如果你想设置全局环境变量,你应该在作业之前定义它们。

    【讨论】:

    • 感谢@mahmoud-osama,完美答案!
    • 不客气@ShinaBR2
    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 2021-09-24
    • 2021-10-08
    • 2021-09-08
    • 2015-06-12
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    相关资源
    最近更新 更多