Jenkins环境与交互式登录不同 - 为什么?

时间:2017-06-08 13:34:25

标签: windows powershell jenkins windows-server-2012-r2

在Windows Server 2012 R2上使用Jenkins 2.46.2。

我有运行的管道脚本:

bat 'env'

我对环境变量感兴趣:PSModulePath

输出为

PSModulePath=C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\

在我的控制台输出中。但是,如果我在Jenkins服务器上以Jenkins帐户身份登录,我会得到不同的结果:

PSModulePath=C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\;C:\Program File s (x86)\Microsoft SQL Server\140\Tools\PowerShell\Modules\;C:\Program Files\Wind owsPowerShell\Modules

为什么?我无法在Jenkins作业中加载某些模块,因为无法找到它们。

2 个答案:

答案 0 :(得分:0)

我通过明确地将路径作为环境变量添加到Jenkins来解决这个问题,但我不知道为什么我必须这样做。无论如何它现在有效。

答案 1 :(得分:0)

在我看来,Jenkins的PowerShell Plugin作为32位进程运行,并且看不到安装在64位Program Files文件夹中的模块。

使用ProgramW6432 env var可以解决此问题。

pipeline {
    environment {
        // Add the 'real' ProgramFiles folder to the PSModulePath as the powershell is run as a 32bit process
        // and the modules are installed in the 'C:\Program Files\' folder
        PSModulePath = "${env.ProgramW6432}\\WindowsPowerShell\\Modules;${env.SystemRoot}\\system32\\WindowsPowerShell\\v1.0\\Modules"
    }
...