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

Google Cloud Build读取GitHub环境变量失败问题求助

问题分析

你当前的核心问题是Docker构建阶段没有正确将环境变量传递给Next.js的构建流程:

  • Github Actions中能正常读取NEXT_PUBLIC_REDIS_URL,说明密钥配置和变量传递到Action环节是正常的
  • Dockerfile中将ARG存为_NEXT_PUBLIC_REDIS_URL,但Next.js只会识别**NEXT_PUBLIC_前缀**的环境变量用于客户端打包,导致npm run build时无法读取到正确的变量
解决方案

1. 修正Dockerfile的环境变量配置

将ARG直接赋值给NEXT_PUBLIC_REDIS_URL,确保Next.js构建时能读取到:

FROM node:18.17.1-slim

WORKDIR /usr/app

COPY . .

RUN npm ci --only=production

# 接收构建参数
ARG NEXT_PUBLIC_REDIS_URL
# 直接设置Next.js识别的环境变量
ENV NEXT_PUBLIC_REDIS_URL=$NEXT_PUBLIC_REDIS_URL

# 验证变量是否正确读取
RUN echo "NEXT_PUBLIC_REDIS_URL: $NEXT_PUBLIC_REDIS_URL"

RUN npm run build

CMD ["npm", "start"]

2. 优化Github Actions构建命令(可选)

当前Action中的docker build命令已经正确传递了--build-arg,可以添加--no-cache确保每次构建都使用最新的变量:

- name: Build and tag the docker image
  run: |-
    docker build \
      --no-cache \
      --build-arg=NEXT_PUBLIC_REDIS_URL=$NEXT_PUBLIC_REDIS_URL \
      --tag gcr.io/$PROJECT_ID/$REPO_NAME:$GITHUB_SHA .

3. 额外验证提示

如果部署后仍有问题,注意:NEXT_PUBLIC_变量是构建时注入的,不需要在Cloud Run运行时配置,因为已经打包到静态资源中。可通过查看Docker构建日志中的echo输出,确认变量是否被正确接收。

关键说明

Next.js的NEXT_PUBLIC_前缀环境变量是在构建阶段被注入到客户端代码中的,必须确保npm run build执行时,该变量存在于容器的环境中。你之前的Dockerfile用了_NEXT_PUBLIC_REDIS_URL,导致Next.js无法识别这个变量,进而出现读取失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:25:16