执行批处理脚本不能在Jenkinspipe道作业中工作

我已经创build了一个PowerShell脚本,将从Jenkins的Windows服务器上传输(使用winscp.dll)文件到Linux服务器。 在jenkins批处理命令,我已经执行该PowerShell脚本,它工作正常。

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

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

我已经尝试了另一个PowerShell脚本,它将连接到Linux服务器并执行一些命令。 它在pipe道工作中工作正常

请指导我解决这个问题。

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

我不知道你的管道是怎么写的,但是我建议看看Stage,Lock和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 } 

但没有你的管道信息只是一个猜测。 另外为了提高脚本的兼容性,避免使用“bat和ExcutionPolicy”并使用PowerShell插件 ,使用这个插件,你可以简化你的代码:

 powershell -File your_script.ps1 

编辑:我忘了提及,你可以尝试一个不同的选择powershell和winscp lib使用“scp”直接兼容性Windows和Linux之间,我正在谈论Cygwin。

随着Cygwin安装(使用scp),您可以使用scp,因为它是一个Linux机箱和一个bash脚本,而不是powershell:

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

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

这看起来可能稍微复杂一些,但是增加了更多的灵活性来执行Windows – Linux任务。

我在博客中详细介绍了更多示例,您可能会发现它很有用。

正如AVVI提到你应该检查,如果变量正在加载。

你没有正确地调用脚本。 您正在PowerShell变量的PowerShell调用中传递$ Env。

你处于批处理模式,所以应该传入%。

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