在Jenkins Windows代理上执行位于CIFS共享上的Powershell脚本

75次阅读
没有评论

问题描述

在使用Jenkins的Windows代理上执行位于CIFS/SMB/Samba共享上的Powershell脚本时遇到了问题。用户的Jenkins代理运行在Windows 10虚拟机上。用户在Jenkinsfile中使用环境变量来执行Powershell脚本,但是当脚本位于CIFS共享路径上时,遇到了问题。然而,当脚本位于本地C盘上时,一切正常。

解决方案

请注意以下操作可能涉及到不同版本的Jenkins和操作系统设置,需要做好备份和测试。

用户在这个问题中遇到了两个方面的挑战:一是在CIFS共享路径上执行脚本,二是脚本执行后的输出不可见。

解决CIFS共享路径问题

问题中提到使用了双反斜杠(\)来指定CIFS共享路径,但是在批处理脚本中使用UNC路径会报错。为了解决这个问题,可以尝试使用pushdpopd命令来切换到CIFS共享路径,以避免UNC路径的问题。

以下是示例的Jenkinsfile代码,其中使用了pushdpopd来处理CIFS共享路径:

pipeline {
    agent {
        node {
            customWorkspace '\\\\NAS\\my\\network\\workspace'
        }
    }
    stages {
        stage('setup environment') {
            steps {
                makeEnv()
            }
        }
    }
}

void makeEnv() {
    bat '''
    pushd "\\\\NAS\\my\\network\\workspace"
    echo "this is fine"
    popd
    '''

    // 其他步骤...
}

解决Powershell输出不可见问题

问题中提到,在执行Powershell脚本后,输出不可见。这可能是因为Powershell的输出被吞没了。为了解决这个问题,可以尝试将Powershell脚本的输出重定向到标准输出,以便在Jenkins控制台中查看。

以下是示例的Jenkinsfile代码,其中使用了重定向操作符>将Powershell脚本的输出重定向到标准输出:

pipeline {
    agent {
        node {
            customWorkspace '\\\\NAS\\my\\network\\workspace'
        }
    }
    stages {
        stage('setup environment') {
            steps {
                makeEnv()
            }
        }
    }
}

void makeEnv() {
    bat '''
    pushd "\\\\NAS\\my\\network\\workspace"
    echo "this is fine"
    popd

    powershell '''
    Write-Output "t1" >$null
    '''

    powershell '''
    Write-Output "t2" >$null
    '''

    powershell '''
    Write-Output "t3" >$null
    '''

    // 其他步骤...
}

在上述示例中,使用了> $null将Powershell脚本的输出重定向到空,这样输出就会显示在Jenkins控制台中。

进一步排查错误

如果上述解决方案仍然无法解决问题,用户可以查看Jenkins控制台输出和日志,以获取更多关于问题的信息。可以根据控制台输出中的错误信息进行进一步排查,并尝试根据错误信息进行调整。

总结

在Jenkins Windows代理上执行位于CIFS共享路径上的Powershell脚本可能会遇到一些问题,包括UNC路径问题和输出不可见问题。通过使用pushdpopd来处理CIFS共享路径,以及使用重定向操作符将Powershell脚本的输出重定向到标准输出,可以解决这些问题。如果问题仍然存在,建议查看Jenkins控制台输出和日志,以获取更多关于问题的信息。

正文完