如何在Jenkins中设置JEKYLL_ENV为Production并执行Jekyll构建?
解决Jenkins Windows环境下Jekyll构建时JEKYLL_ENV变量不生效的问题
我之前在Windows Jenkins环境里也碰到过一模一样的问题,折腾了好一会儿才搞清楚原因,给你几个可行的解决办法:
方法1:在同一个CMD命令块里串联执行
Windows CMD不支持Linux那种VAR=value command的前缀语法,而且如果把SET和构建命令分成两个独立的Jenkins步骤,每个步骤会启动新的CMD进程,环境变量不会跨进程传递。所以你需要把两个命令放在同一个步骤里,用&&连接,确保它们在同一个进程里执行:
SET JEKYLL_ENV=production && C:\Ruby24-x64\bin\jekyll build
这样设置的环境变量就能被后面的jekyll命令读取到了。
方法2:改用PowerShell执行命令
如果你的Jenkins支持PowerShell步骤,用PowerShell的环境变量语法会更直观,而且不需要担心进程问题:
$env:JEKYLL_ENV="production"; C:\Ruby24-x64\bin\jekyll build
PowerShell里$env:前缀用来设置环境变量,这条命令会在同一个会话里完成变量设置和构建操作。
方法3:在Jenkins构建环境中全局设置变量
如果不想每次都在命令里写变量设置,推荐直接在Jenkins的配置里添加环境变量,这样所有构建步骤都能用到:
- 进入你的Jenkins项目配置页面
- 找到「构建环境」(Build Environment)部分,勾选「Set environment variables」(如果没有这个选项,可能需要安装EnvInject插件,多数新版Jenkins已自带类似功能)
- 添加变量:
JEKYLL_ENV=production - 然后在构建步骤里直接执行:
C:\Ruby24-x64\bin\jekyll build
这种方式更干净,也避免了shell语法的兼容性问题。
为什么之前的方法失效?
JEKYLL_ENV=production C:\Ruby24-x64\bin\jekyll build是类Unix shell的语法,Windows CMD完全不支持这种临时环境变量的写法;- 把
SET JEKYLL_ENV=production和构建命令分成两个Jenkins步骤时,每个步骤都是独立的CMD进程,前一个进程设置的变量不会被后一个进程继承,所以jekyll读取不到。
内容的提问来源于stack exchange,提问作者Helmut Granda
相关产品推荐
相关产品推荐

