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

GitHub Actions中Secrets无法注入Node.js应用环境变量问题

Node.js应用无法读取GitHub Actions注入的环境变量问题

已在GitHub仓库设置中添加Secret变量,需求为:

  • 从Secrets读取变量
  • 将变量注入环境供Node.js应用读取

目前问题:MySQL初始化阶段Secrets可正常调用,但Node.js代码因缺失环境变量报错,相关Workflow配置如下:

# .github/workflows/nodejs.yml

name: Node.js CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [14.x, 16.x, 18.x]

    services:
      mysql:
        image: mysql:5.7
        env:
          # user: root, password: root (default)
          MYSQL_DATABASE: ${{ secrets.employeeadmin }}
          MYSQL_ROOT_PASSWORD: ${{ secrets.MYSQL_ROOT_PASSWORD }}
        ports:
          - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

    steps:
    - uses: actions/checkout@v3
    - name: MySQL Initialization Script
      run: |
        mysql -h127.0.0.1 -u${{ secrets.MYSQL_USER }} -p${{ secrets.MYSQL_ROOT_PASSWORD }} -e "CREATE DATABASE IF NOT EXISTS ${{ secrets.MYSQL_DATABASE }};"
        mysql -h127.0.0.1 -u${{ secrets.MYSQL_USER }} -p${{ secrets.MYSQL_ROOT_PASSWORD }} ${{ secrets.MYSQL_DATABASE }} < assets/schema.sql
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - name: Start application
      run: sudo npm start
      env: # issue these variables are not available to nodejs app
        DATABASE_HOST: ${{secrets.DATABASE_HOST}}
        DATABASE_PORT: ${{secrets.DATABASE_PORT}}
        MYSQL_DATABASE: ${{secrets.MYSQL_DATABASE}}
        MYSQL_USER: ${{secrets.MYSQL_USER}}
        MYSQL_PASSWORD: ${{secrets.MYSQL_PASSWORD}}
        MYSQL_ROOT_PASSWORD: ${{secrets.MYSQL_ROOT_PASSWORD}}
    - name: Run tests
      run: npm test

核心问题:sudo重置环境变量

你的Start application步骤使用了sudo npm start,sudo会默认清除大部分环境变量,导致注入的Secrets变量无法被Node.js进程读取。

修复方案

方案一:移除sudo

GitHub Actions的Ubuntu runner环境中,普通用户权限已足够运行npm start,直接修改步骤:

- name: Start application
  run: npm start
  env:
    DATABASE_HOST: ${{secrets.DATABASE_HOST}}
    DATABASE_PORT: ${{secrets.DATABASE_PORT}}
    MYSQL_DATABASE: ${{secrets.MYSQL_DATABASE}}
    MYSQL_USER: ${{secrets.MYSQL_USER}}
    MYSQL_PASSWORD: ${{secrets.MYSQL_PASSWORD}}
    MYSQL_ROOT_PASSWORD: ${{secrets.MYSQL_ROOT_PASSWORD}}

方案二:使用sudo -E保留环境变量

如果确实需要sudo权限,添加-E参数让sudo保留当前环境变量:

- name: Start application
  run: sudo -E npm start
  env:
    DATABASE_HOST: ${{secrets.DATABASE_HOST}}
    DATABASE_PORT: ${{secrets.DATABASE_PORT}}
    MYSQL_DATABASE: ${{secrets.MYSQL_DATABASE}}
    MYSQL_USER: ${{secrets.MYSQL_USER}}
    MYSQL_PASSWORD: ${{secrets.MYSQL_PASSWORD}}
    MYSQL_ROOT_PASSWORD: ${{secrets.MYSQL_ROOT_PASSWORD}}

额外检查项

  • 确认Node.js代码中正确读取环境变量,比如使用process.env.DATABASE_HOST的标准方式
  • 核对仓库Secrets中的变量名是否与Workflow配置完全一致,避免拼写错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:05:06