GitHub Actions 似乎无法识别我的 .env 机密

GitHub Actions doesn't seem to recognize my .env secrets

提问人:user22068518 提问时间:11/14/2023 最后编辑:jonrsharpeuser22068518 更新时间:11/14/2023 访问量:45

问:

我有一个 Playwright 项目,我正在尝试使用文件和 GitHub 机密进行身份验证。.env

我:.env

USERNAME={redacted}
PASSWORD={redacted}

在测试本身(在本地通过)中,我使用了 TypeScript 的语法:process.env.{variable}!

test.describe.serial('Dashboard', () => {
  test.beforeEach(async ({ page }) => {
    await page.goto('/');
    await page.getByPlaceholder('Email').fill(process.env.USERNAME!);
    await page.getByPlaceholder('Password').fill(process.env.PASSWORD!);

在 GitHub 中,我设置了与存储库机密相同的变量。这是我的文件:playwright.yml

name: Playwright Tests
on:
  push:
    branches: [ main, master ]
  pull_request:
    branches: [ main, master ]
jobs:
  test:
    timeout-minutes: 60
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-node@v3
      with:
        node-version: 18
    - name: Install dependencies
      run: npm ci
    - name: Install Playwright Browsers
      run: npx playwright install --with-deps
    - name: Run Playwright tests
      run: npx playwright test
      env:
        USERNAME: ${{ secrets.USERNAME }}
        PASSWORD: ${{ secrets.PASSWORD }}
    - uses: actions/upload-artifact@v3
      if: always()
      with:
        name: playwright-report
        path: playwright-report/
        retention-days: 30

当测试在 GH 中运行时,似乎正在正确访问机密,但是当测试到达第一个断言时,测试将不可避免地失败:

Run npx playwright test
  npx playwright test
  shell: /usr/bin/bash -e {0}
  env:
    USERNAME: ***
    PASSWORD: ***

...
**.spec.ts:16:7 › *** › create a new *** ────

    Test timeout of 30000ms exceeded while running "beforeEach" hook.

      3 |
      4 | test.describe.serial('Stress testing UI', () => {  
    > 5 |   test.beforeEach(async ({ page }) => {
        |        ^
      6 |     await page.goto('/');
      7 |     await page.getByPlaceholder('Email').fill(process.env.USERNAME!);
      8 |     await page.getByPlaceholder('Password').fill(process.env.PASSWORD!);

        at /home/runner/work/{redacted}/{redacted}/tests/***.spec.ts:5:8

    Error: locator.click: Page closed
    =========================== logs ===========================
    waiting for getByRole('link', { name: '{redacted}' })
    ============================================================

       8 |     await page.getByPlaceholder('Password').fill(process.env.PASSWORD!);
       9 |     await page.getByRole('button', { name: 'Sign in' }).click();
    > 10 |     await page.getByRole('link', { name: '{redacted}' }).click();

我做错了什么?

我做了什么,我的期望是什么: 我编写的 Playwright 测试在本地通过,但在 GH 中运行时失败。GH 机密似乎正在以 UNDEFINED 或类似方式传递。

我希望我的应用程序在云中成功进行身份验证,就像在本地进行身份验证一样。

GitHub-Actions 剧作家 Dotenv

评论

1赞 jonrsharpe 11/14/2023
目前尚不清楚是什么让您认为结果与未设置的环境变量有关。此外,当您设置实际的环境变量时,您的也无关紧要。.env
0赞 user22068518 11/14/2023
@jonrsharpe查看测试的输出时,运行器似乎在用户名和密码字段中输入了某些内容,然后单击“登录”。但是,在每种情况下,单击登录按钮后的验证都会失败。我有一些测试可以确保在成功登录后不再存在于 URL 中 - 这些测试都始终失败。这告诉我运行器正在尝试在登录字段中输入内容,然后单击sign_in,但身份验证失败。鉴于这些测试是在本地通过的,因此必须访问机密。/sign_in
0赞 smac89 11/14/2023
该错误似乎指向 ,只有在填写用户名和密码后才会执行。如果您真的想向自己证明用户名和密码输入不正确,base64 会对用户名和密码进行编码,并将其显示在您的工作流程中。复制编码值(应该是可见的),base64 对其进行解码。如果它们与您最初输入的内容不同,那么您可以自信地声称 GH 行为是罪魁祸首。await page.getByRole('link', { name: '{redacted}' }).click();

答: 暂无答案