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

如何在Cypress中调用AWS CodeBuild流水线配置的环境变量?

解决AWS CodeBuild与Cypress环境变量对接问题

你的核心问题出在buildspec.yml的环境变量配置逻辑上,结合Cypress的环境变量规则,下面一步步解决:

1. 修正buildspec的变量传递逻辑

你当前的buildspec里把BASE_URL设为字符串"CYPRESS_BASE_URL",这是错误的——这不是引用流水线中配置的环境变量,而是把BASE_URL的值硬编码成了这个字符串本身。

Cypress会自动识别所有以CYPRESS_为前缀的系统环境变量,所以只要你在CodeBuild流水线的环境变量列表里配置了CYPRESS_BASE_URL、CYPRESS_STAGING_USER、CYPRESS_STAGING_PASSWORD,这些变量会直接在Cypress运行环境中生效,不需要额外在buildspec的env.variables里映射。修正后的buildspec可以去掉多余的env配置:

version: 0.2
phases:
  install:
    runtime-versions:
      nodejs: latest
    commands:
      - sudo apt update
      - sudo apt-get install -y libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth xvfb
      - cd tests
      - rm /codebuild/global.json -f
      - npm ci
  build:
    commands:
      - ls -a
      - npx cypress run --config-file staging.config.ts

2. 在Cypress配置文件中设置baseUrl

在staging.config.ts里,直接通过process.env读取流水线传递的CYPRESS_BASE_URL来配置baseUrl,还可以加个默认值做降级处理:

import { defineConfig } from 'cypress'

export default defineConfig({
  e2e: {
    baseUrl: process.env.CYPRESS_BASE_URL || 'https://fallback-staging-url.example.com',
    // 其他你的Cypress配置(比如specPattern、supportFile等)
  }
})

3. 在测试代码中调用账号密码变量

在Cypress测试用例里,用Cypress.env()方法获取变量即可——这个方法会自动识别所有CYPRESS_前缀的环境变量,不需要额外配置:

describe('staging环境登录测试', () => {
  it('使用流水线配置的账号登录', () => {
    cy.visit('/login')
    // 获取STAGING_USER变量(对应流水线的CYPRESS_STAGING_USER)
    cy.get('#username-input').type(Cypress.env('STAGING_USER'))
    // 获取STAGING_PASSWORD,加{log: false}避免密码输出到测试日志
    cy.get('#password-input').type(Cypress.env('STAGING_PASSWORD'), { log: false })
    cy.get('button[type="submit"]').click()
    cy.url().should('include', '/dashboard')
  })
})

可选:从AWS参数存储读取变量

如果你的敏感变量(比如密码)存在AWS参数存储中,可在buildspec的install阶段添加命令拉取并设置为环境变量:

phases:
  install:
    commands:
      # 从SSM参数存储拉取变量并导出为CYPRESS_前缀的环境变量
      - export CYPRESS_BASE_URL=$(aws ssm get-parameter --name "/staging/app/base-url" --query "Parameter.Value" --output text)
      - export CYPRESS_STAGING_USER=$(aws ssm get-parameter --name "/staging/app/login-user" --query "Parameter.Value" --output text)
      # 敏感参数需要加--with-decryption
      - export CYPRESS_STAGING_PASSWORD=$(aws ssm get-parameter --name "/staging/app/login-password" --with-decryption --query "Parameter.Value" --output text)
      # 原有的install命令...
      - sudo apt update
      - sudo apt-get install -y libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth xvfb
      - cd tests
      - rm /codebuild/global.json -f
      - npm ci

注意:要给CodeBuild的服务角色添加ssm:GetParameter权限,否则无法读取参数存储的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:20:14