Jenkins Inject Environment变量可用于批处理命令,但不能用于powershell

时间:2019-01-24 17:59:47

标签: powershell batch-file jenkins

我正在处理詹金斯的一个非常奇怪的异常,这对我来说绝对没有任何意义。本质上,詹金斯在Powershell命令和批处理命令上的行为有所不同。

我的目标是将一个Jenkins Job的环境变量(或参数)传递给另一个。但是,要传递的变量是在第一个作业的运行时生成的。

我做了一个假项目来测试传递的变量,通过添加构建步骤将变量回显到节点上的env.props文件中,然后使用参数化触发器插件来调用下一个作业,我能够做到这一点。我能够在此测试方案中很好地工作,但是当我尝试在实际的构建作业(依赖于Powershell脚本)中实施相同的步骤时,却无法正常工作。

之后,经过多次尝试和错误,我发现当我使用Windows批处理命令将变量回显到props文件中,然后将变量注入作业中时,它可以完美工作。但是,当我使用powershell命令执行完全相同的操作时,即使我使用完全相同的代码行,也不会将变量注入到作业中。它仍然将变量写入文件,但是即使我使用完全相同的步骤,Jenkins也不会将此变量“重新注入”到作业的env变量中。

命令本质上是这样的:

echo Testvar=Somevalue > C:\Jenkins\env.props

两个都成功地将字符串写入props文件,但是使用powershell命令完成后,Jenkins将不会从运行中吸收txt。几乎就像powershell对其进行编码一样,詹金斯无法读取,但对我来说看起来完全一样。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

原来是编码!

echo "string" > file.txt 

与powershell批量产生的结果不同。

切换到

echo "string" | out-file -encoding ASCII file.txt 

成功了!