执行批处理脚本在Jenkins管道作业中不起作用

use*_*278 6 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"'
Run Code Online (Sandbox Code Playgroud)

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

请指导我解决这个问题.

Mig*_*tiz 3

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

我不知道你的管道是如何编写的,但我建议你看看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
    }
Run Code Online (Sandbox Code Playgroud)

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

powershell -File your_script.ps1
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了提及,您可以尝试使用 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\" 
Run Code Online (Sandbox Code Playgroud)

在本例中,我通过 Jenkins 项目中的 Cygwin 使用“运行 Windows 批处理”选项以静默方式运行脚本。在脚本中您可以添加 shell 命令和您想要的 scp 指令。

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

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

正如 avvi 提到的,您应该检查变量是否正在加载。