我正在处理詹金斯的一个非常奇怪的异常,这对我来说绝对没有任何意义。本质上,詹金斯在Powershell命令和批处理命令上的行为有所不同。
我的目标是将一个Jenkins Job的环境变量(或参数)传递给另一个。但是,要传递的变量是在第一个作业的运行时生成的。
我做了一个假项目来测试传递的变量,通过添加构建步骤将变量回显到节点上的env.props文件中,然后使用参数化触发器插件来调用下一个作业,我能够做到这一点。我能够在此测试方案中很好地工作,但是当我尝试在实际的构建作业(依赖于Powershell脚本)中实施相同的步骤时,却无法正常工作。
之后,经过多次尝试和错误,我发现当我使用Windows批处理命令将变量回显到props文件中,然后将变量注入作业中时,它可以完美工作。但是,当我使用powershell命令执行完全相同的操作时,即使我使用完全相同的代码行,也不会将变量注入到作业中。它仍然将变量写入文件,但是即使我使用完全相同的步骤,Jenkins也不会将此变量“重新注入”到作业的env变量中。
命令本质上是这样的:
echo Testvar=Somevalue > C:\Jenkins\env.props
两个都成功地将字符串写入props文件,但是使用powershell命令完成后,Jenkins将不会从运行中吸收txt。几乎就像powershell对其进行编码一样,詹金斯无法读取,但对我来说看起来完全一样。
有什么想法吗?
答案 0 :(得分:2)
原来是编码!
echo "string" > file.txt
与powershell批量产生的结果不同。
切换到
echo "string" | out-file -encoding ASCII file.txt
成功了!