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

如何在Azure DevOps流水线的Cypress测试中使用Azure Key Vault密钥

解决Azure DevOps流水线中Cypress读取Key Vault密钥的问题

问题根源

Azure DevOps会自动对从Key Vault获取的敏感变量做掩码处理,只要变量值出现在命令行输出或脚本中,就会被替换为***。直接通过命令行传递--env mypw=$(mysecret)会触发这个机制,导致Cypress拿到的是掩码值而非真实密钥。

可行解决方案

方案1:将密钥写入Cypress环境配置文件

通过流水线脚本(Bash或PowerShell)把密钥写入Cypress的环境配置文件,避开直接在命令行暴露变量的方式:

Bash示例:

# 写入cypress.env.json配置文件
echo '{"mypw": "'"$(mysecret)"'"}' > cypress/cypress.env.json
# 运行Cypress测试
npx cypress run --ci-build-id $BUILD_BUILDNUMBER --record --parallel

PowerShell示例:

# 构造配置文件内容
$envContent = @"
{"mypw": "$(mysecret)"}
"@
# 写入到Cypress配置目录
$envContent | Out-File -FilePath cypress/cypress.env.json -Encoding utf8
# 启动测试
npx cypress run --ci-build-id $env:BUILD_BUILDNUMBER --record --parallel

Cypress会自动加载cypress.env.json中的变量,测试代码里直接用Cypress.env('mypw')就能获取真实密钥。

方案2:设置系统级环境变量

在流水线中添加脚本任务,将Key Vault变量赋值给系统环境变量,Cypress会自动识别这类变量:

Bash任务:

export CYPRESS_MYPW=$(mysecret)

PowerShell任务:

$env:CYPRESS_MYPW = "$(mysecret)"

之后直接运行Cypress命令,无需在--env参数中传递密钥:

npx cypress run --ci-build-id $BUILD_BUILDNUMBER --record --parallel

测试代码可通过Cypress.env('mypw')或process.env.CYPRESS_MYPW读取密钥。

方案3:用变量组绑定Key Vault

  1. 在Azure DevOps创建变量组,勾选「从Azure Key Vault链接秘密」,将目标密钥绑定到变量组中
  2. 在流水线配置中引用该变量组
  3. 在cypress.config.js中直接读取流水线注入的系统环境变量:
const { defineConfig } = require("cypress");

module.exports = defineConfig({
  env: {
    mypw: process.env.MYSECRET // MYSECRET为变量组中绑定的密钥名称
  }
});

之后直接运行Cypress测试命令即可,无需额外传递参数。

注意事项

  • 不要在流水线日志中打印密钥相关内容,避免触发掩码,但写入文件或设置为系统环境变量的操作不会影响Cypress读取真实值
  • 确保cypress.env.json被添加到.gitignore,防止意外提交到代码仓库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:40:24