我正在运行Jenkins,用户jenkins
已经$PATH
设置了某些内容,当我进入Jenkins网络界面时,在系统属性窗口中{{1} })我看到了不同的http://$host/systemInfo
。
我已经使用Jenkins网站上的原生rpm在Centos上安装了Jenkins。我正在使用$PATH
有人可以向我解释为什么会这样吗?
答案 0 :(得分:134)
迈克尔,
两件事:
当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
如果您使用第二个选项,系统信息仍然不会显示,但您的构建将看到添加的路径。
答案 1 :(得分:34)
我一直遇到这个问题,但现在我只是添加:
source /etc/profile
作为构建过程的第一步。现在我的所有后续规则都被加载,以便Jenkins顺利运行。
答案 2 :(得分:19)
您还可以编辑/etc/sysconfig/jenkins
文件以对环境变量等进行任何更改。我只需将source /etc/profile
添加到文件末尾。 /etc/profile
已设置所有正确的PATH
变量。执行此操作时,请确保重新启动Jenkins
/etc/init.d/jenkins restart
我们正在运行ZendServer CE,它在不同的路径中安装pear,phing等,所以这很有帮助。此外,我们不会得到我们过去使用Oracle客户端和Jenkins的LD_LIBRARY_PATH
错误。
答案 3 :(得分:14)
我尝试了/etc/profile
,~/.profile
和~/.bash_profile
,但没有一个有效。我发现为jenkins slave帐户编辑~/.bashrc
了。
答案 4 :(得分:9)
此答案的信息已过期。你需要去配置Jenkins>然后,您可以单击以从中添加环境变量键值对。
例如:export MYVAR=test
是MYVAR
是关键,test
是值。
答案 5 :(得分:5)
在我的新EC2实例上,只需将新值添加到Jenkins用户的.profile的PATH中,然后重新启动tomcat就可以为我工作。
在配置不同的旧实例上,使用Sagar's answer中的#2是唯一可行的(即.profile,.bash *不起作用)。
答案 6 :(得分:4)
我找到了两个插件。 一个加载文件中的值,另一个允许您在作业配置屏幕中配置值。
Envfile Plugin - 此插件允许您通过文件设置环境变量。文件的格式必须是标准的Java属性文件格式。
EnvInject Plugin - 此插件可以添加环境变量并执行设置脚本,以便为作业设置环境。
答案 7 :(得分:4)
你不能在Jenkins设置中将它添加为环境变量:
管理Jenkins - >全球属性>环境变量: 然后单击“添加”以将属性PATH及其值添加到您需要的内容。
答案 8 :(得分:4)
这就是我解决这个恼人问题的方法:
我更改了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
文件中的任何变量。
答案 9 :(得分:2)
在“/etc/init.d/jenkins force-reload”之后,我在这个问题上只取得了进展。我建议先尝试一下,然后使用它而不是重新启动。
答案 10 :(得分:2)
在我的Ubuntu 13.04上,我尝试了一些调整,然后才成功:
export PATH = $ PATH:/ some / new / path / bin
答案 11 :(得分:2)
Jenkins还支持格式[2018-07-10 15:40:30,168] INFO Reflections took 1 ms to scan 1 urls, producing 5 keys and 6 values [using 1 cores] (org.reflection
s.Reflections)
[2018-07-10 15:40:30,170] WARN could not get type for name org.jmock.Mockery from any class loader (org.reflections.Reflections)
org.reflections.ReflectionsException: could not get type for name org.jmock.Mockery
at org.reflections.ReflectionUtils.forName(ReflectionUtils.java:390)
at org.reflections.Reflections.expandSuperTypes(Reflections.java:381)
at org.reflections.Reflections.<init>(Reflections.java:126)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader$InternalReflections.<init>(DelegatingClassLoader.java:
365)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanPluginPath(DelegatingClassLoader.java:277)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanUrlsAndAddPlugins(DelegatingClassLoader.java:216)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.registerPlugin(DelegatingClassLoader.java:208)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initPluginLoader(DelegatingClassLoader.java:177)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initLoaders(DelegatingClassLoader.java:154)
at org.apache.kafka.connect.runtime.isolation.Plugins.<init>(Plugins.java:56)
at org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:77)
Caused by: java.lang.ClassNotFoundException: org.jmock.Mockery
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.reflections.ReflectionUtils.forName(ReflectionUtils.java:388)
... 10 more
来附加任何变量,不仅限于PATH:
全局环境变量或节点环境变量:
管道步骤PATH+<name>
中也支持此操作:
withEnv
请注意,它位于变量之前。如果必须附加它,则需要执行其他答案显示的内容。
请参阅管道步骤文档here。
您还可以使用语法PATH + WHATEVER = / something到$ PATH之前/ something
或者EnvVars here上的Java文档。
答案 12 :(得分:1)
source ~/.bashrc
我首先验证了Jenkins正在使用echo $SHELL
和echo $BASH
运行BASH(注意我明确地将#!/bin/bash
放在Jenkins的textarea上,我不确定这是否是一个要求得到BASH)。其他人建议的source
/etc/profile
无效。
查看/etc/profile
我找到了
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
,但事实证明我所需要的只是在~/.bashrc
中,所以只是source
它解决了这个问题。
答案 13 :(得分:1)
添加
/usr/bin/bash
at
詹金斯 - &gt;管理Jenkins - &gt;配置系统 - &gt;壳 - &GT;外壳 可执行
詹金斯使用sh,所以即使/ etc / profile也不适合我 当我添加它时,我拥有所有的环境。
答案 14 :(得分:0)
这就是我在詹金斯2.176.2上对Ubuntu 18.04 LTS所做的工作
我创建了.bash_aliases文件,并在其中添加了路径,代理变量等。
.bashrc的开头已经定义了。
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
因此,它正在检查是否要启动非交互式外壳,那么我们在这里什么也不做。
.bashrc的底部包含.bash_aliases的# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
所以我将.bash_aliases加载首先移到了非交互式检查上方的.bashrc上。
这首先没有起作用,但是随后我断开了从属并重新连接了它,因此它再次加载了变量。如果您要修改从属变量,则无需重新启动整个詹金斯。只需断开并重新连接即可。
答案 15 :(得分:0)
我尝试了上面的所有事情 - 对我不起作用。
我找到了两个解决方案(均为SSH-Slave)
转到从属设置
添加新的环境变量
“$ {HOME}”部分非常重要。这使得额外的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"
}
}
}
}
}
答案 16 :(得分:0)
我通过zypper(包管理器)在SLES 11 SP3上安装了Jenkins 1.639。 安装将jenkins配置为服务
/etc/init.d/jenkins
虽然/etc/sysconfig/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变量,因为它是在一个单独的登录shell中启动的,具有如下新环境:
.bashrc
我设法为jenkins流程设置env vars的方式是在其主目录/var/lib/jenkins
中通过/var/lib/jenkins/.bashrc
。我必须创建之前不存在的foreach ($html->find('h2[class="entry-title"] a') as $data)
{
echo $data->innertext;
};
。
答案 17 :(得分:0)
对我有用的是覆盖奴隶的PATH环境。
Set: PATH
To: $PATH:/usr/local/bin
然后断开并重新连接从属设备。
尽管系统信息显示它有效。
答案 18 :(得分:0)
运行带有环境变量的命令也很有效。当然,您必须为您运行的每个命令执行此操作,但您可能有一个作业脚本,因此每个构建可能只有一个命令。我的作业脚本是一个python脚本,它使用环境来决定使用哪个python,所以我仍然需要将/usr/local/bin/python2.7放在它的路径中:
PATH=/usr/local/bin <my-command>
答案 19 :(得分:0)
在Ubuntu上我只是编辑/ etc / default / jenkins并在最后添加source / etc / profile,它对我有用。
答案 20 :(得分:-1)
1-添加到您的个人档案文件&#34; .bash_profile&#34;文件
它位于&#34; / home / your_user /&#34;夹
vi .bash_profile
添加:
<div>
==&GT;它是e jenkins工作区
2-如果你使用码头: 转到jenkins.xml文件
并添加:
<img>