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

如何在GitHub Action部署Node.js进程时设置环境变量

解决GitHub Action中Node.js无法获取环境变量的问题

你遇到的核心问题其实是sudo执行命令时会重置环境变量,导致Node.js进程读不到ENGINE_API_KEY。下面是具体的解决方案和修改建议:

关键原因

在GitHub Action的Ubuntu runner环境中,使用sudo执行命令时,默认会清除当前用户的所有环境变量(包括你在工作流/步骤中定义的env)。这就是为什么本地Mac上可行但CI中不行的原因——本地sudo的配置可能保留了环境变量,而CI环境的sudo是严格重置的。

解决方案步骤

1. 移除不必要的sudo(推荐)

GitHub Action的ubuntu-latest runner默认使用的runner用户已经拥有足够权限执行npm install、全局包安装等操作,完全不需要sudo。去掉sudo后,环境变量会正常传递给Node.js进程:

修改后的步骤代码:

- name: Apollo Schema Update
  env:
    ENGINE_API_KEY: ${{ secrets.ENGINE_API_KEY }}
  run: |
    npm install
    npm install -g apollo
    npm run dev &
    sleep 3
    apollo service:push --serviceURL=http://auth-cluster-ip-service --serviceName=auth --tag=master --endpoint=http://localhost:3051

2. 如果必须使用sudo(不推荐)

如果你的场景确实离不开sudo,需要添加-E参数强制保留当前环境变量:

- name: Apollo Schema Update
  env:
    ENGINE_API_KEY: ${{ secrets.ENGINE_API_KEY }}
  run: |
    sudo -E npm install
    sudo -E npm install -g apollo
    sudo -E npm run dev &
    sleep 3
    sudo -E apollo service:push --serviceURL=http://auth-cluster-ip-service --serviceName=auth --tag=master --endpoint=http://localhost:3051

3. 优化环境变量定义

你已经在工作流级别定义了env,步骤里可以不用重复声明,简化代码:

name: Build and Deploy to GKE
on:
  pull_request:
    branches:
      - master
env:
  ENGINE_API_KEY: ${{ secrets.ENGINE_API_KEY }} # 全局生效,所有步骤都能访问
jobs:
  setup-build-publish-deploy:
    name: Setup, Build, Publish, and Deploy
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Apollo Schema Update
        run: |
          npm install
          npm install -g apollo
          npm run dev &
          sleep 3
          apollo service:push --serviceURL=http://auth-cluster-ip-service --serviceName=auth --tag=master --endpoint=http://localhost:3051

额外验证建议

  • 在npm run dev前添加一行echo $ENGINE_API_KEY,确认环境变量在步骤中是否能正常读取:
    run: |
      echo "ENGINE_API_KEY is: $ENGINE_API_KEY" # 验证变量是否存在
      npm install
      # ... 其他命令
    
  • 如果你的Node.js项目使用了dotenv,确保没有在代码中覆盖环境变量,或者不需要额外加载.env文件(CI中直接用GitHub Secrets传递即可)。

内容的提问来源于stack exchange,提问作者Sihoon Kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:27:49