如何在Azure Pipeline中使用GOOGLE_APPLICATION_CREDENTIALS部署至Firebase
解决Azure DevOps Pipeline中Firebase部署的服务账号认证问题
核心思路
Firebase已弃用login:ci令牌认证,需改用Google服务账号密钥。由于Azure DevOps仅支持存储字符串型密钥,我们可以将服务账号的JSON密钥内容作为秘密变量存储,在Pipeline运行时动态生成临时JSON文件,再通过环境变量让Firebase CLI识别该密钥。
具体步骤
存储服务账号密钥到Azure DevOps
- 打开已生成的Google服务账号JSON密钥文件,复制全部内容。
- 登录Azure DevOps进入你的项目:
- 若要全局复用,前往库 > 变量组,创建新变量组并添加秘密变量(命名如
FIREBASE_SERVICE_ACCOUNT_KEY),将复制的JSON内容粘贴到变量值中。 - 若仅当前管道使用,直接在管道编辑页的变量选项卡中添加秘密变量。
- 若要全局复用,前往库 > 变量组,创建新变量组并添加秘密变量(命名如
在YAML Pipeline中处理密钥并部署
根据你使用的代理虚拟机系统(Linux/Windows),选择对应的脚本逻辑,动态生成临时密钥文件并配置环境变量:
Linux代理(ubuntu-latest)示例YAML
trigger: - master pool: vmImage: 'ubuntu-latest' steps: - task: NodeTool@0 inputs: versionSpec: '18.x' displayName: '安装Node.js' - script: | npm install -g firebase-tools displayName: '安装Firebase CLI' - script: | # 创建临时目录存放密钥文件 mkdir -p .firebase # 将秘密变量中的JSON字符串写入临时文件 echo "$(FIREBASE_SERVICE_ACCOUNT_KEY)" > .firebase/service-account-key.json # 设置环境变量指向密钥文件 export GOOGLE_APPLICATION_CREDENTIALS=$(pwd)/.firebase/service-account-key.json # 执行Firebase部署(可指定项目ID) firebase deploy --project your-firebase-project-id # 清理临时文件 rm -rf .firebase displayName: '部署至Firebase' env: # 引用Azure DevOps中的秘密变量 FIREBASE_SERVICE_ACCOUNT_KEY: $(FIREBASE_SERVICE_ACCOUNT_KEY)
Windows代理(windows-latest)示例YAML
trigger: - master pool: vmImage: 'windows-latest' steps: - task: NodeTool@0 inputs: versionSpec: '18.x' displayName: '安装Node.js' - script: | npm install -g firebase-tools displayName: '安装Firebase CLI' - powershell: | # 创建临时目录存放密钥文件 New-Item -ItemType Directory -Force -Path .firebase # 将秘密变量中的JSON字符串写入临时文件 $env:FIREBASE_SERVICE_ACCOUNT_KEY | Out-File -FilePath .firebase/service-account-key.json -Encoding utf8 # 设置环境变量指向密钥文件 $env:GOOGLE_APPLICATION_CREDENTIALS = Join-Path (Get-Location) ".firebase/service-account-key.json" # 执行Firebase部署(可指定项目ID) firebase deploy --project your-firebase-project-id # 清理临时文件 Remove-Item -Path .firebase -Recurse -Force displayName: '部署至Firebase' env: # 引用Azure DevOps中的秘密变量 FIREBASE_SERVICE_ACCOUNT_KEY: $(FIREBASE_SERVICE_ACCOUNT_KEY)
关键注意事项
- 确保变量设置为秘密变量,Azure DevOps会自动加密存储,且不会在运行日志中明文显示。
- 部署完成后务必清理临时密钥文件,避免敏感信息残留。
- 若你的Firebase项目需指定部署范围,可在
firebase deploy命令后添加--only参数(如--only hosting)。
内容的提问来源于stack exchange,提问作者J4N
相关产品推荐
相关产品推荐

