我已经创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%"'