我正在从用户 jenkins 运行Jenkins,因为 $PATH 设置为某些东西,当我进入Jenkins Web界面时,在系统属性窗口( http://$host/systemInfo )中,我看到了另一个 $PATH .
jenkins
$PATH
http://$host/systemInfo
我已经使用Jenkins网站上的原生rpm在Centos上安装了Jenkins . 我正在使用 sudo /etc/init.d/jenkins start 安装提供的启动脚本
sudo /etc/init.d/jenkins start
任何人都可以向我解释为什么会这样吗?
迈克尔,
两件事情:
当Jenkins连接到计算机时,它会转到 sh shell,而不是 bash shell(至少这是我注意到的 - 我可能错了) . 因此,不会考虑对bashrc文件中的$ PATH所做的任何更改 .
sh
bash
此外,您在本地shell中对$ PATH所做的任何更改(您个人搜索到的)都不会在Jenkins中显示 .
要更改Jenkins使用的路径,您有两个选项(AFAIK):
1)编辑 /etc/profile 文件并添加所需的路径
/etc/profile
2)转到从站的配置页面,并添加环境变量 PATH ,其值为: $PATH:/followed-by/paths/you/want/to/add
PATH
$PATH:/followed-by/paths/you/want/to/add
如果您使用第二个选项,系统信息仍然不会显示它,但您的构建将看到添加的路径 .
我一直遇到这个问题,但现在我只是添加:
source /etc/profile
作为构建过程的第一步 . 现在我的所有后续规则都被加载,以便Jenkins顺利运行 .
您还可以编辑 /etc/sysconfig/jenkins 文件以对环境变量等进行任何更改 . 我只需将 source /etc/profile 添加到文件末尾 . /etc/profile 已设置所有正确的 PATH 变量 . 执行此操作时,请确保重新启动Jenkins
/etc/sysconfig/jenkins
/etc/init.d/jenkins restart
我们正在运行ZendServer CE,它在不同的路径中安装pear,phing等,所以这很有帮助 . 此外,我们没有得到我们过去使用Oracle客户端和Jenkins的 LD_LIBRARY_PATH 错误 .
LD_LIBRARY_PATH
我试过 /etc/profile , ~/.profile 和 ~/.bash_profile ,但没有一个有效 . 我发现为jenkins slave帐户编辑了 ~/.bashrc .
~/.profile
~/.bash_profile
~/.bashrc
这个答案的信息已经过时了 . 您需要转到配置Jenkins>然后您可以单击以从中添加环境变量键值对 .
例如: export MYVAR=test 将是 MYVAR 是键, test 是值 .
export MYVAR=test
MYVAR
test
在我的新EC2实例上,只需将新值添加到Jenkins用户的.profile的PATH中,然后重新启动tomcat就可以了 .
在配置不同的旧实例上,使用Sagar's answer中的#2是唯一有效的(即.profile,.bash *不起作用) .
我发现了两个插件 . 一个加载文件中的值,另一个允许您在作业配置屏幕中配置值 .
Envfile Plugin - 此插件允许您通过文件设置环境变量 . 文件的格式必须是标准的Java属性文件格式 .
EnvInject Plugin - 此插件可以添加环境变量并执行设置脚本,以便为Job设置环境 .
你不能只在Jenkins设置中将它添加为环境变量:
管理Jenkins - >全局属性>环境变量:然后单击“添加”以将属性PATH及其值添加到您需要的值 .
这就是我解决这个烦人问题的方法:
我改变了 PATH 变量,因为@sagar在他的第二个选项中提出了这个变量,但我仍然得到了与我预期不同的 PATH 值 .
最终我发现是 EnvInject 插件替换了我的 PATH 变量!
EnvInject
所以我可以卸载 EnvInject 或者只是用它来注入PATH变量 .
由于我们的许多Jenkins工作都使用该插件,我不想卸载它...
所以我在Jenkins主目录下创建了一个文件: environment_variables.properties .
environment_variables.properties
该文件包含我需要的路径环境值: PATH=$PATH:/usr/local/git/bin/ .
PATH=$PATH:/usr/local/git/bin/
来自Jenkins网页界面: Manage Jenkins -> Configure System . 在那个屏幕中 - 我勾选了 Prepare jobs environment 选项,在 Properties File Path 字段中我输入了我的文件路径: /var/lib/jenkins/environment_variables.properties .
Manage Jenkins -> Configure System
Prepare jobs environment
Properties File Path
/var/lib/jenkins/environment_variables.properties
这样每个Jenkins作业我们都会收到我在这个 environment_variables.properties 文件中放入的任何变量 .
在“/etc/init.d/jenkins force-reload”之后,我在这个问题上只取得了进展 . 我建议在其他任何事情之前尝试,并使用它而不是重新启动 .
在我的Ubuntu 13.04上,我尝试了一些调整,然后才成功:
编辑/etc/init/jenkins.conf
找到"exec start-stop-server..."开始的位置
插入环境更新就在那之前,即
export PATH = $ PATH:/ some / new / path / bin
Jenkins还支持格式 PATH+<name> 前置任何变量,而不仅仅是PATH:
PATH+<name>
全局环境变量或节点环境变量:
管道步骤 withEnv 也支持此功能:
withEnv
node { withEnv(['PATH+JAVA=/path/to/java/bin']) { ... } }
请注意,它适用于变量 . 如果必须附加,则需要执行其他答案显示的操作 .
请参阅管道步骤文档here .
你也可以使用语法PATH WHATEVER = / something来/ $ to $ PATH
或者EnvVars上的java文档here .
source ~/.bashrc
我第一次验证Jenkins正在运行BASH,使用 echo $SHELL 和 echo $BASH (注意我明确地将 #!/bin/bash 放在Jenkins的textarea上,我需要获得BASH) . source ing /etc/profile 正如其他人所说的那样无效 .
echo $SHELL
echo $BASH
#!/bin/bash
source
看着 /etc/profile 我找到了
if [ "$PS1" ]; then ...
并检查"$PS1"发现它为空 . 我试过欺骗 $PS1 无济于事
$PS1
export PS1=1 bash -c 'echo $PATH'
但是这并没有产生预期的结果(加上我希望看到的其余部分) . 但是,如果我告诉bash是互动的
export PS1=1 bash -ci 'echo $PATH'
$PATH 按我的预期改变了 .
我试图弄清楚如何正确地欺骗交互式shell来加载 /etc/bash.bashrc 但是事实证明我所需要的只是 ~/.bashrc ,所以简单地说它解决了问题 .
/etc/bash.bashrc
加
/usr/bin/bash
在
Jenkins - >管理Jenkins - >配置系统 - > Shell-> Shell可执行文件
詹金斯使用sh,所以即使/ etc / profile对我不起作用当我添加它时,我有所有的env .
在Ubuntu上我只需编辑/ etc / default / jenkins并在最后添加source / etc / profile,它对我有用 .
使用环境变量set运行命令也很有效 . 当然,您必须为您运行的每个命令执行此操作,但您可能有一个作业脚本,因此每个构建可能只有一个命令 . 我的作业脚本是一个python脚本,它使用环境来决定使用哪个python,所以我仍然需要将/usr/local/bin/python2.7放在它的路径中:
PATH=/usr/local/bin <my-command>
对我有用的是覆盖奴隶的PATH环境 .
Set: PATH To: $PATH:/usr/local/bin
然后断开并重新连接从站 .
尽管系统信息显示它有效 .
我通过zypper(包管理器)在SLES 11 SP3上安装了Jenkins 1.639 . 安装配置jenkins作为服务
# service jenkins Usage: /etc/init.d/jenkins {start|stop|status|try-restart|restart|force-reload|reload|probe}
虽然 /etc/init.d/jenkins 来源 /etc/sysconfig/jenkins ,但是任何设置的env变量都不会被jenkins进程继承,因为它是在一个单独的登录shell中启动的,具有如下新环境:
/etc/init.d/jenkins
startproc -n 0 -s -e -l /var/log/jenkins.rc -p /var/run/jenkins.pid -t 1 /bin/su -l -s /bin/bash -c '/usr/java/default/bin/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --javaHome=/usr/java/default --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=8080 --ajp13Port=8009 --debug=9 --handlerCountMax=100 --handlerCountMaxIdle=20 &' jenkins
我设法为jenkins进程设置env变量的方法是在其主目录 /var/lib/jenkins 中通过 .bashrc . 我不得不创建 /var/lib/jenkins/.bashrc ,因为之前不存在 .
/var/lib/jenkins
.bashrc
/var/lib/jenkins/.bashrc
我尝试了上面所有的东西 - 对我不起作用 .
我找到了两个解决方案(均为SSH-Slave)
转到从站设置
添加新的环境变量
路径
$ :$ /.pub-cache / bin:$ /.local / bin
“$ ”部分非常重要 . 这使得额外的PATH绝对 . 相对路径对我不起作用 .
选项II(管道脚本)
pipeline { agent { label 'your-slave' } environment { PATH = "/home/jenkins/.pub-cache/bin:$PATH" } stages { stage('Test') { steps { ansiColor('xterm') { echo "PATH is: $PATH" } } } } }
1-添加到您的profil文件“.bash_profile”文件
它位于“/ home / your_user /”文件夹中
vi .bash_profile
加:
export JENKINS_HOME=/apps/data/jenkins export PATH=$PATH:$JENKINS_HOME
==>这是e jenkins工作区
2-如果使用jetty:转到jenkins.xml文件
并添加:
<Arg>/apps/data/jenkins</Arg>
20 回答
迈克尔,
两件事情:
当Jenkins连接到计算机时,它会转到
sh
shell,而不是bash
shell(至少这是我注意到的 - 我可能错了) . 因此,不会考虑对bashrc文件中的$ PATH所做的任何更改 .此外,您在本地shell中对$ PATH所做的任何更改(您个人搜索到的)都不会在Jenkins中显示 .
要更改Jenkins使用的路径,您有两个选项(AFAIK):
1)编辑
/etc/profile
文件并添加所需的路径2)转到从站的配置页面,并添加环境变量
PATH
,其值为:$PATH:/followed-by/paths/you/want/to/add
如果您使用第二个选项,系统信息仍然不会显示它,但您的构建将看到添加的路径 .
我一直遇到这个问题,但现在我只是添加:
作为构建过程的第一步 . 现在我的所有后续规则都被加载,以便Jenkins顺利运行 .
您还可以编辑
/etc/sysconfig/jenkins
文件以对环境变量等进行任何更改 . 我只需将source /etc/profile
添加到文件末尾 ./etc/profile
已设置所有正确的PATH
变量 . 执行此操作时,请确保重新启动Jenkins我们正在运行ZendServer CE,它在不同的路径中安装pear,phing等,所以这很有帮助 . 此外,我们没有得到我们过去使用Oracle客户端和Jenkins的
LD_LIBRARY_PATH
错误 .我试过
/etc/profile
,~/.profile
和~/.bash_profile
,但没有一个有效 . 我发现为jenkins slave帐户编辑了~/.bashrc
.这个答案的信息已经过时了 . 您需要转到配置Jenkins>然后您可以单击以从中添加环境变量键值对 .
例如:
export MYVAR=test
将是MYVAR
是键,test
是值 .在我的新EC2实例上,只需将新值添加到Jenkins用户的.profile的PATH中,然后重新启动tomcat就可以了 .
在配置不同的旧实例上,使用Sagar's answer中的#2是唯一有效的(即.profile,.bash *不起作用) .
我发现了两个插件 . 一个加载文件中的值,另一个允许您在作业配置屏幕中配置值 .
Envfile Plugin - 此插件允许您通过文件设置环境变量 . 文件的格式必须是标准的Java属性文件格式 .
EnvInject Plugin - 此插件可以添加环境变量并执行设置脚本,以便为Job设置环境 .
你不能只在Jenkins设置中将它添加为环境变量:
管理Jenkins - >全局属性>环境变量:然后单击“添加”以将属性PATH及其值添加到您需要的值 .
这就是我解决这个烦人问题的方法:
我改变了
PATH
变量,因为@sagar在他的第二个选项中提出了这个变量,但我仍然得到了与我预期不同的PATH
值 .最终我发现是
EnvInject
插件替换了我的PATH
变量!所以我可以卸载
EnvInject
或者只是用它来注入PATH变量 .由于我们的许多Jenkins工作都使用该插件,我不想卸载它...
所以我在Jenkins主目录下创建了一个文件:
environment_variables.properties
.该文件包含我需要的路径环境值:
PATH=$PATH:/usr/local/git/bin/
.来自Jenkins网页界面:
Manage Jenkins -> Configure System
. 在那个屏幕中 - 我勾选了Prepare jobs environment
选项,在Properties File Path
字段中我输入了我的文件路径:/var/lib/jenkins/environment_variables.properties
.这样每个Jenkins作业我们都会收到我在这个
environment_variables.properties
文件中放入的任何变量 .在“/etc/init.d/jenkins force-reload”之后,我在这个问题上只取得了进展 . 我建议在其他任何事情之前尝试,并使用它而不是重新启动 .
在我的Ubuntu 13.04上,我尝试了一些调整,然后才成功:
编辑/etc/init/jenkins.conf
找到"exec start-stop-server..."开始的位置
插入环境更新就在那之前,即
Jenkins还支持格式
PATH+<name>
前置任何变量,而不仅仅是PATH:全局环境变量或节点环境变量:
管道步骤
withEnv
也支持此功能:请注意,它适用于变量 . 如果必须附加,则需要执行其他答案显示的操作 .
请参阅管道步骤文档here .
或者EnvVars上的java文档here .
解决方案对我有用
source ~/.bashrc
解释
我第一次验证Jenkins正在运行BASH,使用
echo $SHELL
和echo $BASH
(注意我明确地将#!/bin/bash
放在Jenkins的textarea上,我需要获得BASH) .source
ing/etc/profile
正如其他人所说的那样无效 .看着
/etc/profile
我找到了并检查"$PS1"发现它为空 . 我试过欺骗
$PS1
无济于事但是这并没有产生预期的结果(加上我希望看到的其余部分) . 但是,如果我告诉bash是互动的
$PATH
按我的预期改变了 .我试图弄清楚如何正确地欺骗交互式shell来加载
/etc/bash.bashrc
但是事实证明我所需要的只是~/.bashrc
,所以简单地说它解决了问题 .加
在
詹金斯使用sh,所以即使/ etc / profile对我不起作用当我添加它时,我有所有的env .
在Ubuntu上我只需编辑/ etc / default / jenkins并在最后添加source / etc / profile,它对我有用 .
使用环境变量set运行命令也很有效 . 当然,您必须为您运行的每个命令执行此操作,但您可能有一个作业脚本,因此每个构建可能只有一个命令 . 我的作业脚本是一个python脚本,它使用环境来决定使用哪个python,所以我仍然需要将/usr/local/bin/python2.7放在它的路径中:
对我有用的是覆盖奴隶的PATH环境 .
然后断开并重新连接从站 .
尽管系统信息显示它有效 .
我通过zypper(包管理器)在SLES 11 SP3上安装了Jenkins 1.639 . 安装配置jenkins作为服务
虽然
/etc/init.d/jenkins
来源/etc/sysconfig/jenkins
,但是任何设置的env变量都不会被jenkins进程继承,因为它是在一个单独的登录shell中启动的,具有如下新环境:我设法为jenkins进程设置env变量的方法是在其主目录
/var/lib/jenkins
中通过.bashrc
. 我不得不创建/var/lib/jenkins/.bashrc
,因为之前不存在 .我尝试了上面所有的东西 - 对我不起作用 .
我找到了两个解决方案(均为SSH-Slave)
转到从站设置
添加新的环境变量
路径
$ :$ /.pub-cache / bin:$ /.local / bin
“$ ”部分非常重要 . 这使得额外的PATH绝对 . 相对路径对我不起作用 .
选项II(管道脚本)
1-添加到您的profil文件“.bash_profile”文件
它位于“/ home / your_user /”文件夹中
vi .bash_profile
加:
==>这是e jenkins工作区
2-如果使用jetty:转到jenkins.xml文件
并添加: