2017-06-19 88 views
6

我创建了一个powershell脚本,它将从Jenkins windows服务器传输(使用winscp.dll)文件到Linux服务器。在Jenkins批处理命令中,我已经执行了这个PowerShell脚本,它工作正常。执行批处理脚本在Jenkins管道作业中不工作

但是,当我在Jenkins管道作业中尝试相同时,它会调用powershell脚本并进入下一步。它不等待powershell脚本响应。

bat 'powershell.exe -ExecutionPolicy Bypass "D:\\Test\\Deploymentscripts\\PowerShellScript\\FileTransfer.ps1 $env:EndMarket $env:Environment"' 

我试着用另一个PowerShell脚本连接到Linux服务器并执行一些命令。它在管道作业中工作正常

请引导我解决此问题。

+1

您需要在您的问题中没有给出的PowerShell脚本中解决此问题。这里有一个PowerShell/winscp.dll示例:https://winscp.net/eng/docs/library_powershell。正如在这个例子中,当传输成功时,'$ session'被清除('$ session.Dispose()'),你可以假设传输过程完成。 – iRon

+0

你能分享你的管道配置吗? –

回答

3

有趣。您的问题似乎并未出现在您的脚本中,因为您已经解释了它在批处理作业中的作用。

我不知道你的管道是如何写的,但我会建议看看Stage, Lock and Milestone这可能是你需要的。

的阶段步骤是在管道中的主要组成部分,划分 步骤的管道进入明确的单位,并帮助可视化使用“舞台视图” 进步插件

我想你可以在您的管线中添加一个像这样的阶段块:

stage("Previous Step") { 

     // Some previous step 
    } 

stage("Wait for Script Execution") { 

    // Call your script 
    bat 'powershell.exe -ExecutionPolicy Bypass "D:\\Test\\Deploymentscripts\\PowerShellScript\\FileTransfer.ps1 $env:EndMarket $env:Environment"' 
} 

stage("Next Step") { 

     // Script already finished its execution 
    } 

但是没有您的管道信息只是一个猜测。此外,以提高你的脚本兼容性,避免“蝙蝠ExcutionPolicy”,并使用PowerShell plugin,与插件,你可以简化你的代码是这样的:

powershell -File your_script.ps1 

编辑:我忘了提,你可以尝试不同的替代方案在Windows和Linux之间使用“scp”直接兼容的powershell和winscp lib,我正在谈论Cygwin。

使用Cygwin安装(与SCP),您可以使用scp,因为它是一个Linux框和一个bash脚本,而不是PowerShell的:

D:/cygwin-64/bin/run.exe /usr/bin/bash -lic \"/home/user/file.sh\" 

在这种情况下,我运行一个脚本默默通过Cygwin的一个詹金斯内带有“运行Windows批处理”选项的项目。在脚本中,您可以添加shell命令和所需的scp指令。

它可能看起来有点复杂,但增加了更多的灵活性来执行Windows - Linux任务。

我在我的blog中详细了解了更多示例,您可能会觉得它很有用。

由于avvi提到你应该检查是否正在加载变量。

0

您没有正确调用脚本。你在powershell调用中传递$ Env,这是一个PowerShell变量。

您处于批处理模式,因此应传入%。

bat 'powershell.exe -ExecutionPolicy Bypass "D:\\Test\\Deploymentscripts\\PowerShellScript\\FileTransfer.ps1" "%EndMarket%" "%Environment%"'