执行批处理脚本在Jenkins管道作业

时间:2017-06-19 05:34:18

标签: windows powershell batch-file jenkins

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

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

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

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

请指导我解决此问题。

2 个答案:

答案 0 :(得分:3)

有趣。您的问题似乎不在您的脚本中,因为您已经解释过它可以在批处理作业中运行。

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

  

阶段步骤是Pipeline中的主要构建块,除以   将管道的步骤转换为显式单元并帮助可视化   使用“Stage View”插件进度

我想你可以在你的管道中添加一个这样的舞台块:

 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 plugin,使用该插件可以简化代码,如下所示:

powershell -File your_script.ps1

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

安装了Cygwin(使用scp)你可以使用scp,因为它是一个Linux机器和bash脚本而不是powershell:

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

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

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

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

正如avvi所提到的,你应该检查是否正在加载这些变量。

答案 1 :(得分:0)

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

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

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