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具有所有适当的PATHvariables设置。 当你这样做,确保你重新启动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并执行安装脚本,以便为作业设置一个环境。

这就是我解决这个烦人的问题的方法:

我改变了PATHvariables作为@sagar在他的第二个选项build议,但我仍然得到不同的PATH值比我的预期。

最终我发现这是EnvInject插件取代了我的PATHvariables!

所以我可以卸载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上,我尝试了很多调整,然后才成功:

  1. 编辑/etc/init/jenkins.conf
  2. find“exec start-stop-server …”开始的位置
  3. 插入环境更新之前,即

export PATH = $ PATH:/ some / new / path / bin

解决scheme,为我工作

source ~/.bashrc

说明

我首先validation了Jenkins正在运行BASH, echo $SHELLecho $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不起作用我当我添加这个,我有所有的环境。