在 Windows 上的 Jenkinsfile 中设置全局环境变量



我有一个在Windows系统上运行的Jenkins CI服务器,现在我想为我的管道设置全局环境变量。

我尝试了两种不同的方法,但没有成功:

node {
environment {
MY_PYTHON='D:ProgramDataAnaconda3'
PATH='%MY_PYTHON%;%MY_PYTHON%Scripts;%PATH%'
}
stage ('Checkout and Build') {
bat 'echo %MY_PYTHON%'
bat 'echo %PATH%'
bat 'python --version'
}
}

启动构建后,它会抛出以下错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 3: unexpected char: '' @ line 3, column 22.
MY_PYTHON='D:ProgramDataAnaconda3'
^

有点简单,所以我尝试像这样将反斜杠加倍:

environment {
MY_PYTHON='D:\ProgramData\Anaconda3'
PATH='%MY_PYTHON%;%MY_PYTHON%\Scripts;%PATH%'
}

因此,重新启动构建后,我只收到命令python --version的错误,因为python仍然无法在路径上找到,而且我没有得到任何MY_PYTHONPATH我得到所有预定义的路径除了我想添加的路径。

卡住了,所以任何帮助将不胜感激!

environment {
MY_PYTHON='D:ProgramDataAnaconda3'
PATH='%MY_PYTHON%;%MY_PYTHON%Scripts;%PATH%' <----
}

我不认为 Jenkins 能够扩展环境块中的变量,我认为它会让您的 PATH 变量完全为空。您可以通过添加在 Windows 中打印所有环境变量的步骤bat 'set'来检查这一点。我试过了,詹金斯实际上无法执行set因为 PATH 必须为空。

对于您的情况,也许您更愿意执行以下操作:

node {
environment {
MY_PYTHON='D:\ProgramData\Anaconda3'
}
stage ('Checkout and Build') {
bat '%MY_PYTHON%\python --version'
}
}

(我不是 python 开发人员,所以我不确定这条路径是否真的正确(。

我还注意到,您可以按如下方式使用变量:

  • bat 'echo var: %VARIABLE_NAME%'<-- 单引号,变量的 %var%
  • bat "echo var: $VARIABLE_NAME"<-- 双引号,变量$var

单引号和$var的组合似乎不起作用,我认为双引号使 Jenkins 扩展变量(我猜是 Groovy 变量(而不是操作系统。

要扩展变量,您必须使用双引号:

PATH="${MY_PYTHON};${MY_PYTHON}Scripts;${PATH}"

无论如何,看起来在窗口中设置PATH特别存在问题,因为"PATH"也是一个命令。

你要做的是这样的:

node {
environment {
MY_PYTHON='D:ProgramDataAnaconda3'
}
stage ('Checkout and Build') {
bat '''
set PATH = "%MY_PYTHON%;%MY_PYTHON%Scripts;%PATH%"
echo %MY_PYTHON%
echo %PATH%
python --version
'''
}
}

试试: MY_PYTHON='D:\\ProgramData\\Anaconda3'

最新更新