用途
Secrets & Env Manager 用于在 CI/CD 流程中安全管理密钥与环境变量。它解决的核心问题包括:部署前校验必需的环境变量是否齐全、防止密钥在日志或代码中泄露、对敏感值进行掩码处理,以及在配置缺失时快速失败并给出清晰提示。该技能适用于需要在持续集成与部署环节统一管理数据库连接串、API Key、云服务凭据等敏感配置的项目。
主要能力
环境变量校验
技能提供在 CI 中校验必需环境变量的做法。以下为 GitHub Actions 示例,用于检查 DATABASE_URL、API_KEY、AWS_REGION、STRIPE_SECRET_KEY 是否存在:
validate-env:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate required environment variables
run: |
REQUIRED_VARS=(
"DATABASE_URL"
"API_KEY"
"AWS_REGION"
"STRIPE_SECRET_KEY"
)
MISSING=()
for var in "${REQUIRED_VARS[@]}"; do
if [ -z "${!var}" ]; then
MISSING+=("$var")
fi
done
if [ ${#MISSING[@]} -ne 0 ]; then
echo "❌ Missing required environment variables:"
printf '%s\n' "${MISSING[@]}"
exit 1
fi
echo "✅ All required environment variables are set"
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
API_KEY: ${{ secrets.API_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
STRIPE_SECRET_KEY: ${{ secrets.STRIPE_SECRET_KEY }}
密钥掩码
在 GitHub Actions 中,可通过 ::add-mask:: 对敏感值进行掩码处理,避免其出现在日志中:
- name: Mask sensitive values
run: |
# Automatically masked in GitHub Actions
echo "::add-mask::${{ secrets.API_KEY }}"
echo "::add-mask::${{ secrets.DATABASE_PASSWORD }}"
# Safe to use in commands
curl -H "Authorization: Bearer ${{ secrets.API_KEY }}" https://api.example.com
泄露检测
技能给出两类自动检测方式:使用 trufflehog 进行密钥泄露检查,以及使用 reviewdog 的 detect-secrets 动作检测硬编码密钥。
- name: Check for leaked secrets
uses: trufflesecurity/trufflehog@main
with:
path: ./
base: ${{ github.event.repository.default_branch }}
head: HEAD
- name: Detect hardcoded secrets
uses: reviewdog/action-detect-secrets@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
环境专属密钥
通过 GitHub Actions 的 environment 机制,可按环境(如开发、预发、生产)限定密钥作用范围:
deploy:
runs-on: ubuntu-latest
environment:
name: ${{ github.event.inputs.environment }}
steps:
- name: Deploy
run: |
# Environment-specific secrets are automatically scoped
echo "Deploying to ${{ github.event.inputs.environment }}"
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
API_KEY: ${{ secrets.API_KEY }}
快速失败验证
在部署前单独设置校验任务,缺失密钥时立即报错并阻止后续部署:
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate secrets exist
run: |
if [ -z "${{ secrets.DATABASE_URL }}" ]; then
echo "::error::DATABASE_URL secret not set"
exit 1
fi
if [ -z "${{ secrets.API_KEY }}" ]; then
echo "::error::API_KEY secret not set"
exit 1
fi
deploy:
needs: validate
runs-on: ubuntu-latest
steps:
- name: Deploy
run: echo "Deploying..."
校验脚本
技能提供 TypeScript 校验脚本,用于在应用启动前检查必需环境变量:
// scripts/validate-env.ts
import * as fs from "fs";
interface EnvConfig {
required: string[];
optional: string[];
}
const config: EnvConfig = {
required: ["DATABASE_URL", "JWT_SECRET", "STRIPE_SECRET_KEY"],
optional: ["SENTRY_DSN", "LOG_LEVEL"],
};
function validateEnv(): boolean {
const missing: string[] = [];
config.required.forEach((key) => {
if (!process.env[key]) {
missing.push(key);
}
});
if (missing.length > 0) {
console.error("❌ Missing required environment variables:");
missing.forEach((key) => console.error(` - ${key}`));
return false;
}
console.log("✅ All required environment variables are set");
return true;
}
if (!validateEnv()) {
process.exit(1);
}
示例与文档
技能包含 .env.example 模板,可提交到 git 供成员复制填写,同时提供环境变量文档模板,要求说明每个变量的描述、格式、示例、获取途径以及安全注意事项。
# .env.example - Check into git
# Copy to .env and fill in values
# Database
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
# Authentication
JWT_SECRET=your-secret-here
JWT_EXPIRY=24h
# External APIs
STRIPE_SECRET_KEY=sk_test_...
SENDGRID_API_KEY=SG....
# AWS
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=...
AWS_REGION=us-east-1
# Optional
SENTRY_DSN=https://...
LOG_LEVEL=info
使用方式
该技能以技能文档形式提供,内容包括 CI 配置片段、校验脚本、模板与最佳实践。使用时可按项目需要在 GitHub Actions 工作流中引入对应的校验、掩码与检测步骤,并将 .env.example 与文档模板纳入仓库。输出检查清单涵盖:必需环境变量已验证、密钥掩码已配置、泄露检测已启用、.env.example 模板、环境变量文档、快速失败验证、环境专属密钥以及轮换策略文档。
适用场景
- 需要在 CI/CD 中统一校验数据库、认证、外部 API、云服务等敏感配置的项目。
- 希望在部署前快速发现缺失密钥、避免运行期失败的团队。
- 需要降低密钥泄露风险、对硬编码密钥进行自动扫描的仓库。
- 需要区分开发、预发、生产环境密钥并规范文档的工程团队。
限制
资料主要基于 GitHub Actions 的语法与机制(如 secrets、environment、::add-mask::),未提供其他 CI 平台的适配说明。是否支持特定语言、框架或运行时,以及具体的安装命令、收费方式与平台依赖,资料中暂未提供。