gpt4 book ai didi

powershell - 直接在jenkins管道中执行powershell命令

转载 作者:行者123 更新时间:2023-12-03 23:11:34 25 4
gpt4 key购买 nike

是否可以在管道常规脚本中直接调用PowerShell命令?在Jenkins中使用自定义作业时,我可以使用PowerShell插件调用该命令。但是在groovy脚本中没有片段可以使用它。

我也尝试了sh(),但似乎此命令不允许命令内包含多行和注释。

最佳答案

要从Groovy脚本调用PowerShell脚本,请执行以下操作:

  • 您必须使用bat命令。
  • 之后,您必须确保将正确返回错误代码(errorlevel)变量(EXIT 1应导致FAILED作业)。
  • 最后,要与PowerShell-Plugin兼容,您必须确保将考虑$LastExitCode
  • 我注意到,“powershell”现在可以在管道中使用,但是由于存在多个问题,因此我更喜欢此变体。仍在等待它稳定。我实际上对“dontKillMe”行为有疑问。

  • Since Jenkins 2.207 with Powershell plugin 1.4, I have replace all my calls with the official powershell pipeline command. I do now recommend to use it.



    对于那个波峰,我写了一些时髦的方法,可以将其集成到任何管道脚本中:
    def PowerShell(psCmd) {
    psCmd=psCmd.replaceAll("%", "%%")
    bat "powershell.exe -NonInteractive -ExecutionPolicy Bypass -Command \"\$ErrorActionPreference='Stop';[Console]::OutputEncoding=[System.Text.Encoding]::UTF8;$psCmd;EXIT \$global:LastExitCode\""
    }

    [编辑]我添加了UTF8 OutputEncoding:与Server 2016和Win10一起使用效果很好。
    [编辑]我添加了'%'掩码[/编辑]

    然后,您可以在管道脚本中像这样调用脚本:
    stage ('Call Powershell Script')
    {
    node ('MyWindowsSlave') {
    PowerShell(". '.\\disk-usage.ps1'")
    }
    }

    该方法的最好之处在于,您可以调用 CmdLet,而不必在脚本中执行此操作(这是最佳实践)。

    调用ps1定义 CmdLet,然后调用 CmdLet
    PowerShell(". '.\\disk-usage.ps1'; du -Verbose")
  • 不要忘了使用withEnv(),那么比完全兼容Powershell插件要好。
  • 使用.延迟脚本,以确保当脚本返回错误代码时,您的步骤失败(应该首选),如果您不在乎,请使用&
  • 关于powershell - 直接在jenkins管道中执行powershell命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42436370/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com