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

Jenkins+Docker传变量至Next.js,服务端日志无值求助

问题排查:Jenkins+Docker向Next.js传递环境变量失效

问题背景

在自建服务器上通过Jenkins和Docker部署Next.js项目时,已在Jenkins中创建值为“This is a test”的VAR_TEST密钥文本凭证,配置了Pipeline脚本、Dockerfile及Next.js配置:

  • 容器内执行echo $VAR_TEST能正常显示值
  • Next.js服务端通过console.log('Test : ', process.env.VAR_TEST)打印无值

核心错误点及修复方案

1. Dockerfile中ARG声明位置错误

问题原因:ARG指令放在FROM之前时,仅属于构建的"全局"阶段,进入FROM后的新构建阶段后,该ARG会失效,导致后续ENV VAR_TEST=$VAR_TEST无法获取到正确值。

修复后的Dockerfile:

# 使用Node.js基础镜像
FROM node:18-alpine

# 在FROM之后重新声明ARG,确保当前构建阶段能访问
ARG VAR_TEST

# 设置容器内工作目录
WORKDIR /app

# 复制package文件
COPY package*.json ./

# 安装项目依赖
RUN npm cache clean --force
RUN npm install

# 复制项目所有文件
COPY . .

# 将ARG转为环境变量供应用使用
ENV VAR_TEST=$VAR_TEST

# 调试打印变量
RUN echo $VAR_TEST

# 构建应用
RUN npm run build

# 清理开发依赖
RUN npm prune --production

# 暴露应用端口
EXPOSE 3000

# 启动应用
CMD ["npm", "start"]

2. Next.js环境变量配置方式不匹配服务端运行需求

问题原因:Next.js的nextConfig.env是构建时注入的变量,如果构建时process.env.VAR_TEST为空,最终服务端也无法获取到值。若需要服务端在运行时读取环境变量,需使用runtimeConfig。

修复后的Next.js配置:

/** @type {import('next').NextConfig} */
const nextConfig = {
  runtimeConfig: {
    // 仅服务端运行时可访问该变量
    VAR_TEST: process.env.VAR_TEST,
  },
};

module.exports = nextConfig;

服务端代码中获取变量的方式:

// 服务端组件或API路由中
import getConfig from 'next/config';

const { serverRuntimeConfig } = getConfig();
console.log('Test : ', serverRuntimeConfig.VAR_TEST);

3. Jenkins Pipeline脚本中的引号转义错误

问题原因:Pipeline的sh脚本中使用了"转义引号,这会导致shell无法正确解析变量$VAR_TEST。

修复后的Pipeline关键阶段:

stage('Build Docker Image') {
    steps {
        withCredentials([string(credentialsId: 'VAR_TEST', variable: 'VAR_TEST')]) {
            sh '''
            docker build --build-arg VAR_TEST="$VAR_TEST" -t next:latest .
            '''
        }
    }
}

stage('Run Docker Container') {
    steps {
        withCredentials([string(credentialsId: 'VAR_TEST', variable: 'VAR_TEST')]) {
            sh '''
            docker run -d -e VAR_TEST="$VAR_TEST" -p 3000:3000 --name next_container next:latest
            '''
        }
    }
}

验证步骤

  1. 重新运行Jenkins Pipeline构建部署
  2. 进入容器执行echo $VAR_TEST确认值存在
  3. 查看Next.js服务端日志,确认变量已正常输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:14:52