我有一个在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_PYTHON
和PATH
我得到所有预定义的路径除了我想添加的路径。
卡住了,所以任何帮助将不胜感激!
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'