两个Jenkins脚本之间的PowerShell变量

时间:2018-01-24 12:28:33

标签: powershell jenkins jenkins-plugins

上下文

Jenkins自由式项目,包含两个PowerShell任务。所以Jenkins正在做两个脚本,由两个独立的进程调用。 它应该避免合并到一个PowerShell任务中。

目标:

我需要将任务1中的变量集用于任务2.此变量可以设置为复杂类型,例如

脚本1:

$sw = [Diagnostics.Stopwatch]::StartNew()

脚本2:

$sw.Stop()
Write-Output "$($sw.Elapsed) ms"

问题:

是否可以使用PowerShell行为(如“常规”范围)执行此操作? 或者使用Jenkins行为,使用一些Jenkins或PowerShell插件选项?

我认为“运行”对象是不可能的,我应该将变量序列化(显然是可序列化对象的限制;))到Jenkins工作区并从脚本2反序列化。

我使用EnvInject插件,但你可以在构建任务期间修改或添加vars以将它们发送到下一个任务,这就是为什么我在考虑自定义序列化。

1 个答案:

答案 0 :(得分:0)

  • 为两个任务都可以访问的临时文件选择一个共享位置。

  • 使用PowerShell的Export-CliXml cmdlet将感兴趣的变量序列化为(临时)文件,并使用Import-CliXml对其进行反序列化。

正如您所述,“运行”对象 - [Diagnostics.Stopwatch]的实例是一个示例 - 不会忠实地反序列化 - PowerShell会根据通用目的将它们反序列化为原始类型的仿真键入[System.Management.Automation.PSObject],其属性包含原始实例值的 static 副本(根本没有方法)。