关键是,在管道脚本中,作业参数不会像常规作业一样自动注入到环境中。每个参数都成为Pipeline脚本绑定的变量。因此,您可以直接按名称访问它们。
在您的示例中,
echo "$VAR_A"变量替换是由groovy在脚本的上下文中执行的(请参阅Groovy
doc关于字符串插值的文档)。这就是为什么您在
bat输出中看不到它的原因。
对于要注入的每个参数,您需要
env.VAR_A = VAR_A在脚本的开头添加一行:
它可以在代码
node块之外,因为
env在整个脚本中是全局的。
另外,还有一种方法可以将所有脚本变量(包括参数,甚至管道内置变量)添加
steps到环境中。不幸的是,它需要一些白名单才能在沙箱中运行:
@NonCPSdef populateEnv(){ binding.variables.each{k,v -> env."$k" = "$v"} }populateEnv()示例: VAR_A 是一个参数。脚本主体:
def AAAA = 1 // such a definition doesn't put variable in the bindingBBBB = 2 // creates a binding variable. Absolutely the same behavior as for a job parameter.@NonCPSdef populateEnv(){ binding.variables.each{k,v -> env."$k" = "$v"} }populateEnv() // at this point injection happensCCCC = 3 // created after the injection hence it won't appear in env.node ('windows') { bat 'env'}在
bat输出中,您将找到
VAR_A和
BBBB。
除非您的工作具有数十个参数定义的IMO,否则将
env.VAR_A = VAR_A首选方法,因为这种方法更简单,直接并且不需要批准。



