如何从Azure Keyvault获取值到cypress.config.js文件中
从Azure Key Vault加载密钥到Cypress环境变量
直接在cypress.config.js里用$()语法不生效,因为这是Shell环境的变量引用方式,而Cypress配置文件运行在Node.js环境,必须通过Azure官方Node SDK读取Key Vault中的密钥。
步骤1:安装依赖
先安装Azure密钥保管库及身份验证的相关包:
npm install @azure/keyvault-secrets @azure/identity --save-dev
步骤2:编写密钥获取逻辑
在cypress.config.js中添加异步读取逻辑,通过Azure SDK拉取密钥:
const { defineConfig } = require("cypress"); const { SecretClient } = require("@azure/keyvault-secrets"); const { DefaultAzureCredential } = require("@azure/identity"); // 替换为你的Key Vault实例URL const keyVaultUrl = "https://your-key-vault-name.vault.azure.net/"; async function fetchKeyVaultSecrets() { const credential = new DefaultAzureCredential(); const client = new SecretClient(keyVaultUrl, credential); // 批量获取密钥,替换为你Key Vault中实际的密钥名称 const [baseUrlRes, usernameRes, passwordRes, clientIdRes, clientSecretRes, scopeRes] = await Promise.all([ client.getSecret("BASEURL"), client.getSecret("USERNAME"), client.getSecret("PASSWORD"), client.getSecret("CLIENTID"), client.getSecret("CLIENTSECRET"), client.getSecret("SCOPE") ]); return { baseUrl: baseUrlRes.value, username: usernameRes.value, password: passwordRes.value, clientId: clientIdRes.value, clientSecret: clientSecretRes.value, scope: scopeRes.value }; } module.exports = defineConfig({ e2e: { async setupNodeEvents(on, config) { // 将密钥注入Cypress环境变量 const secrets = await fetchKeyVaultSecrets(); config.env = { ...config.env, ...secrets }; return config; }, }, });
步骤3:配置Azure认证参数
运行Cypress前,需设置Azure身份验证的环境变量(供DefaultAzureCredential使用):
- Windows(PowerShell):
$env:AZURE_CLIENT_ID = "你的服务主体客户端ID" $env:AZURE_CLIENT_SECRET = "你的服务主体客户端密钥" $env:AZURE_TENANT_ID = "你的Azure租户ID"
- Linux/macOS(终端):
export AZURE_CLIENT_ID="你的服务主体客户端ID" export AZURE_CLIENT_SECRET="你的服务主体客户端密钥" export AZURE_TENANT_ID="你的Azure租户ID"
注意事项
- 确保你的服务主体拥有Key Vault的
Secret User权限,可在Azure门户的Key Vault访问控制中配置。 - 密钥名称需与Key Vault中创建的完全一致,区分大小写。
- CI/CD环境中,直接在平台的环境变量面板配置Azure认证参数即可。
内容的提问来源于stack exchange,提问作者Nischay tv
相关产品推荐
相关产品推荐

