You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Jenkins中PowerShell执行New-PSSession失败导致的脚本阻塞

Jenkins Pipeline中PowerShell连接阻塞问题的解决方法

问题场景

我在Jenkins中配置了如下Pipeline脚本(包含PowerShell命令):

pipeline {
    agent any
    stages {
        stage('Connecting VPN') {
            steps {
                script {
                    bat label: 'Environment', script: 'echo hello world!'
                }
                script {
                    pwsh '''
                        $session1 = New-PSSession -HostName 172.17.1.64 -UserName apcor:mydom -SSHTransport
                        echo Uploading files...
                          
                        echo Copying WebApp....
                    '''
                }
            }
        }
    }
}

注:原脚本中PowerShell代码存在语法错误(多余闭合大括号}),已修正。

当New-PSSession因连接超时等原因失败时,脚本会持续阻塞,无法推进后续流程,控制台输出示例:

[Pipeline] {
[Pipeline] pwsh
ssh: connect to host 172.17.1.64 port 22: Connection timed out

解决方法

1. 给New-PSSession设置连接超时

直接使用-ConnectionTimeout参数(单位:毫秒)限制连接等待时间,超时后命令自动终止,避免无限阻塞:

$session1 = New-PSSession -HostName 172.17.1.64 -UserName apcor:mydom -SSHTransport -ConnectionTimeout 10000

示例设置10秒超时,超时后命令会抛出错误并停止执行。

2. 用try/catch捕获错误并处理

结合-ErrorAction Stop确保错误被捕获,在catch块中处理失败逻辑,避免脚本卡住:

script {
    pwsh '''
        try {
            $session1 = New-PSSession -HostName 172.17.1.64 -UserName apcor:mydom -SSHTransport -ConnectionTimeout 10000 -ErrorAction Stop
            echo Uploading files...
            echo Copying WebApp....
            # 后续业务操作
        } catch {
            echo "连接失败: $_"
            # 可选:添加失败后的处理,比如标记构建状态、发送通知
            exit 1 # 返回错误码,让Jenkins识别构建失败
        }
    '''
}

即使连接失败,脚本也会进入catch块处理,之后正常结束或退出,不会阻塞。

3. Jenkins层面添加步骤超时限制

在pwsh步骤外层套timeout指令,强制限制该步骤的执行时间,作为双重保障:

script {
    timeout(time: 15, unit: 'SECONDS') {
        pwsh '''
            try {
                $session1 = New-PSSession -HostName 172.17.1.64 -UserName apcor:mydom -SSHTransport -ErrorAction Stop
                echo Uploading files...
                echo Copying WebApp....
            } catch {
                echo "连接失败: $_"
                exit 1
            }
        '''
    }
}

即使PowerShell的超时参数未生效,Jenkins也会强制终止该步骤。

4. 修正PowerShell语法错误

原脚本中PowerShell代码存在多余的闭合大括号},这类语法错误可能导致执行异常,需先修正避免额外问题。


内容的提问来源于stack exchange,提问作者Diego Villagra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:32:48