上下文
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以将它们发送到下一个任务,这就是为什么我在考虑自定义序列化。
答案 0 :(得分:0)
为两个任务都可以访问的临时文件选择一个共享位置。
使用PowerShell的Export-CliXml
cmdlet将感兴趣的变量序列化为(临时)文件,并使用Import-CliXml
对其进行反序列化。
正如您所述,“运行”对象 - [Diagnostics.Stopwatch]
的实例是一个示例 - 不会忠实地反序列化 - PowerShell会根据通用目的将它们反序列化为原始类型的仿真键入[System.Management.Automation.PSObject]
,其属性包含原始实例值的 static 副本(根本没有方法)。