Jenkins Pipeline里怎么正确传参给React构建脚本?

风珍 Dev 阅读 1,304

我在Jenkinsfile里用sh调用npm run build,但传的环境变量在React里读不到,到底咋搞?

我试过在Pipeline里export变量,也试过直接在命令行里写,但process.env里就是空的。本地跑没问题,一到Jenkins就失效。

const App = () => {
  useEffect(() => {
    console.log('API URL:', process.env.REACT_APP_API_URL);
  }, []);

  return <div>My App</div>;
};
我来解答 赞 12 收藏
二维码
手机扫码查看
2 条解答
Mr.柯言
Mr.柯言 Lv1
哎这个坑我踩过!折腾了一下午才搞明白,React的环境变量在Jenkins里传参确实有点特殊。别走弯路,关键点在于:

1. React要求环境变量必须以REACT_APP_开头,这点你代码里已经对了
2. Jenkins里直接export或者命令行传参都不好使,因为create-react-app会在构建时把环境变量硬编码进代码

试试这个Jenkinsfile写法:

pipeline {
agent any
environment {
REACT_APP_API_URL = 'https://your.api.url'
}
stages {
stage('Build') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
}
}


重点是要在Jenkins的environment块里定义变量,而不是在sh命令里临时export。我之前傻乎乎地试过sh 'REACT_APP_API_URL=xxx npm run build',结果死活不生效。

另外提醒下,构建完成后变量会被替换成实际值,所以别在代码里放敏感信息。要测试的话可以在构建后检查build/static/js里的文件,搜下变量名看有没有被正确替换。

如果还不行,八成是Jenkins的权限问题,检查下Jenkins用户有没有权限读取环境变量。
点赞 1
2026-03-09 18:06
W″子骞
React 构建时只认以 REACT_APP_ 开头的变量,其他的直接忽略。在 Jenkinsfile 里用 withEnv 包裹你的 sh 命令,别瞎折腾 export。

withEnv(['REACT_APP_API_URL=http://your-api.com']) {
sh 'npm run build'
}
点赞 3
2026-03-04 08:05