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

如何在GitHub Actions中用Secrets配置Google翻译API密钥文件

解决GitHub Action中Google翻译API密钥文件路径问题

问题原因

Google Cloud SDK的GOOGLE_APPLICATION_CREDENTIALS环境变量要求传入密钥文件的路径,但直接将密钥文件内容赋值给该变量时,SDK会把内容当作文件路径去查找,因此触发文件不存在的错误。

解决方案

方法1:在GitHub Action中创建临时密钥文件

修改YAML配置,将Secrets中的密钥内容写入临时文件,再让环境变量指向该文件路径:

name: Lime

on:
  pull_request:
    types: [opened]

jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Setup Node.js
        uses: actions/setup-node@v2.4.1
        with:
          node-version: '14'

      - name: Install dependencies
        run: npm install

      - name: Translate README.md
        env:
          GOOGLE_CREDENTIALS_CONTENT: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
          GOOGLE_PROJECT_ID: ${{ secrets.GOOGLE_PROJECT_ID }}
        run: |
          # 将密钥内容写入临时文件
          echo "$GOOGLE_CREDENTIALS_CONTENT" > ./google-secrets.json
          # 设置环境变量指向临时文件路径
          export GOOGLE_APPLICATION_CREDENTIALS="./google-secrets.json"
          node index.js
      - name: Commit and push changes
        uses: EndBug/add-and-commit@v7
        with:
          author_name: ${{ github.actor }}
          author_email: ${{ secrets.EMAIL }}
          message: 'Translated README.md to Swahili'
          add: 'README.md'
          push: 'true'
  • 重命名环境变量避免与SDK默认变量冲突,通过echo将密钥内容写入临时文件
  • 临时文件会在Job结束后自动清理,无需担心敏感信息残留

方法2:修改JavaScript代码直接使用密钥内容

无需创建文件,直接从环境变量读取密钥内容初始化Translate客户端:

const { Translate } = require('@google-cloud/translate').v2;
const fs = require('fs');
const dotenv = require('dotenv');

dotenv.config();

// 直接用环境变量中的密钥内容初始化客户端
const translate = new Translate({
  credentials: JSON.parse(process.env.GOOGLE_APPLICATION_CREDENTIALS),
  projectId: process.env.GOOGLE_PROJECT_ID
});

async function translateText(text, target) {
  try {
    const [translation] = await translate.translate(text, target);
    return translation;
  } catch (error) {
    console.error(`Error translating text: ${error}`);
    return null;
  }
}

const readmePath = 'README.md';
const readmeContent = fs.readFileSync(readmePath, 'utf8');

translateText(readmeContent,'sw' )
  .then((translation) => {
    console.log(`Translation: ${translation}`);
    const translatedReadmeContent = `${readmeContent}\n\nTranslated Text:\n\n${translation}`;
    fs.writeFileSync(readmePath, translatedReadmeContent);
  })
  .catch((error) => console.error(`Error: ${error}`));

对应的YAML配置无需修改,保持原有环境变量设置即可:

# 其他步骤不变
      - name: Translate README.md
        env:
          GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
          GOOGLE_PROJECT_ID: ${{ secrets.GOOGLE_PROJECT_ID }}
        run: |
          node index.js
# 其他步骤不变
  • 此方法更简洁,直接解析环境变量中的JSON内容作为认证信息,无需处理文件操作

注意事项

两种方案均不会暴露密钥内容,GitHub Actions会自动对Secrets中的敏感信息进行掩码处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:54:55