jenkins/哈德森环境variables
我从用户jenkins运行jenkinsthats有$PATH
设置为东西,当我进入jenkins的Web界面,在系统属性窗口( http://$host/systemInfo
)我看到不同的$PATH
。
我已经在Jenkins网站上用Jenkins安装了Jenkins。 我正在使用sudo /etc/init.d/jenkins start
安装提供的启动脚本
任何人都可以向我解释为什么发生这种情况?
迈克尔,
两件事情:
当jenkins连接到一台计算机时,它会进入sh
shell,而不是bash
shell(至less这是我注意到的 – 我可能是错的)。 所以在你的bashrc文件中对$ PATH所做的任何修改都不被考虑。
另外,你在本地shell(你自己ssh到的那个)中对$ PATH所做的任何修改都不会在Jenkins中显示出来。
要更改Jenkins使用的path,您有两个选项(AFAIK):
1)编辑你的/etc/profile
文件并添加你想要的path
2)进入你的slave的configuration页面,添加一个环境variablesPATH
,值为: $PATH:/followed-by/paths/you/want/to/add
如果使用第二个选项,系统信息将不会显示,但是您的版本将会看到添加的path。
我一直在遇到这个问题,但现在我只是添加:
source /etc/profile
作为我的构build过程的第一步。 现在,我所有的后续规则都被加载到jenkins运行顺利。
您还可以编辑/etc/sysconfig/jenkins
文件来对环境variables等进行任何更改。我只是将source /etc/profile
添加到文件末尾。 /etc/profile
具有所有适当的PATH
variables设置。 当你这样做,确保你重新启动jenkins
/etc/init.d/jenkins restart
我们正在运行ZendServer CE,它在不同的path上安装了pear,phing等,所以这很有帮助。 另外,我们没有得到我们用Oracle客户端和Jenkins获得的LD_LIBRARY_PATH
错误。
我试过/etc/profile
, ~/.profile
和~/.bash_profile
,没有一个工作。 我发现编辑jenkins奴隶帐户~/.bashrc
做。
这个答案的信息是过时的。 你需要去configurationjenkins>然后你可以点击添加一个环境variables键值对。
例如: export MYVAR=test
将是MYVAR
是关键, test
是价值。
在我的新的EC2实例上,简单地将新值添加到Jenkins用户的.profile的PATH,然后重新启动tomcat为我工作。
在configuration不同的旧实例中,使用来自Sagar答案的 #2是唯一可行的(即.profile,.bash *不起作用)。
难道你不能在Jenkins设置中将它添加为一个环境variables:
pipe理jenkins – >全局属性>环境variables:然后点击“添加”添加一个属性path和它的值到你需要的。
我发现了两个插件。 一个从文件加载值,另一个让您在作业configuration屏幕中configuration值。
Envfile插件 – 这个插件使您可以通过文件设置环境variables。 该文件的格式必须是标准的Java属性文件格式。
EnvInject插件 – 这个插件可以添加环境variables并执行安装脚本,以便为作业设置一个环境。
这就是我解决这个烦人的问题的方法:
我改变了PATH
variables作为@sagar在他的第二个选项build议,但我仍然得到不同的PATH
值比我的预期。
最终我发现这是EnvInject
插件取代了我的PATH
variables!
所以我可以卸载EnvInject
或者只是用它来注入PATHvariables。
由于我们许多Jenkins作业使用该插件,我不想卸载它…
所以我在我的Jenkins主目录下创build了一个文件: environment_variables.properties
。
该文件包含我需要的path环境值: PATH=$PATH:/usr/local/git/bin/
。
从Jenkins的web界面: Manage Jenkins -> Configure System
。 在该屏幕中,我勾选了“ Prepare jobs environment
选项,然后在“ Properties File Path
字段中input了我的文件path: /var/lib/jenkins/environment_variables.properties
。
通过这种方式,我们所接收的每个Jenkins作业都会收到我在这个environment_variables.properties
文件中放置的任何variables。
在“/etc/init.d/jenkins force-reload”之后,我只能在这个问题上取得进展。 我build议先尝试一下,然后使用它而不是重新启动。
在我的Ubuntu 13.04上,我尝试了很多调整,然后才成功:
- 编辑/etc/init/jenkins.conf
- find“exec start-stop-server …”开始的位置
- 插入环境更新之前,即
export PATH = $ PATH:/ some / new / path / bin
解决scheme,为我工作
source ~/.bashrc
说明
我首先validation了Jenkins正在运行BASH, echo $SHELL
和echo $BASH
(注意,我明确地将#!/bin/bash
放在Jenkins的textarea上,我不确定是否需要获取BASH)。 source
/etc/profile
ing /etc/profile
像其他人所build议的不工作。
看着/etc/profile
我find了
if [ "$PS1" ]; then ...
并检查“$ PS1”发现它为空。 我试图欺骗$PS1
无济于事
export PS1=1 bash -c 'echo $PATH'
但是这并没有产生所需的结果(添加我期望看到的$PATH
的其余部分)。 但是如果我告诉bash是互动的
export PS1=1 bash -ci 'echo $PATH'
$PATH
被改变了,如我所料。
我试图找出如何正确地欺骗一个交互式shell来获取/etc/bash.bashrc
来加载,然而事实certificate,我所需要的只是在~/.bashrc
,所以只需简单的source
就可以解决问题。
在Ubuntu上,我只是编辑/ etc / default / jenkins,并在最后添加source / etc / profile并且对我有用。
使用环境variables集运行命令也是有效的。 当然,您必须为每个运行的命令执行此操作,但是您可能有一个作业脚本,因此每个构build可能只有一个命令。 我的作业脚本是一个使用环境来决定使用哪个python的python脚本,所以我仍然需要把/usr/local/bin/python2.7放在它的path中:
PATH=/usr/local/bin <my-command>
为我工作的是为奴隶重写PATH环境。
Set: PATH To: $PATH:/usr/local/bin
然后断开并重新连接从站。
尽pipe系统信息显示它的工作。
我通过zypper(包pipe理器)在SLES 11 SP3上安装了Jenkins 1.639。 安assembly置jenkins作为服务
# service jenkins Usage: /etc/init.d/jenkins {start|stop|status|try-restart|restart|force-reload|reload|probe}
尽pipe/etc/init.d/jenkins
源文件/etc/sysconfig/jenkins
,那里设置的任何envvariables都没有被jenkins进程inheritance,因为它是在一个单独的loginshell中启动的,像这样的新环境:
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 vars的方法是通过主目录 – /var/lib/jenkins
。 我必须创build/var/lib/jenkins/.bashrc
因为它以前不存在。
加
/usr/bin/bash
在
jenkins – >pipe理jenkins – >configuration系统 – >壳牌 – >壳牌可执行文件
jenkins使用sh,以便即使/ etc / profile不起作用我当我添加这个,我有所有的环境。