Jenkins Pipeline里怎么正确传参给React构建脚本?
我在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>;
};
1. React要求环境变量必须以
REACT_APP_开头,这点你代码里已经对了2. Jenkins里直接
export或者命令行传参都不好使,因为create-react-app会在构建时把环境变量硬编码进代码试试这个Jenkinsfile写法:
重点是要在Jenkins的
environment块里定义变量,而不是在sh命令里临时export。我之前傻乎乎地试过sh 'REACT_APP_API_URL=xxx npm run build',结果死活不生效。另外提醒下,构建完成后变量会被替换成实际值,所以别在代码里放敏感信息。要测试的话可以在构建后检查
build/static/js里的文件,搜下变量名看有没有被正确替换。如果还不行,八成是Jenkins的权限问题,检查下Jenkins用户有没有权限读取环境变量。
REACT_APP_开头的变量,其他的直接忽略。在 Jenkinsfile 里用withEnv包裹你的 sh 命令,别瞎折腾 export。