Linux 如何使Jenkins脚本中的$PATH与运行Jenkins的用户下的$PATH匹配?

Linux 如何使Jenkins脚本中的$PATH与运行Jenkins的用户下的$PATH匹配?,linux,jenkins,path,environment-variables,amazon-linux,Linux,Jenkins,Path,Environment Variables,Amazon Linux,我正在使用AmazonLinux。我创建了一个jboss用户,作为该用户登录后,我可以看到他们的$PATH [myuser@mymachine ~]$ sudo su - jboss [sudo] password for myuser: Last login: Sun Nov 5 18:19:43 UTC 2017 on pts/0 ... [jboss@mymachine ~]$ which firefox /usr/local/bin/firefox [jboss@myuser ~]$

我正在使用AmazonLinux。我创建了一个jboss用户,作为该用户登录后,我可以看到他们的$PATH

[myuser@mymachine ~]$ sudo su - jboss
[sudo] password for myuser:
Last login: Sun Nov  5 18:19:43 UTC 2017 on pts/0
...
[jboss@mymachine ~]$ which firefox
/usr/local/bin/firefox
[jboss@myuser ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/maven/bin:/usr/java/latest/bin:/home/jboss/.local/bin:/home/jboss/bin
注意,“firefox”在我的路径上。我有一个在用户jboss下运行的Jenkins WAR文件,我的Jenkins作业中有一个脚本(构建后步骤)。但是,在运行该脚本时,Jenkins中的$PATH似乎与jboss用户不匹配

+ whoami
jboss
+ which firefox
which: no firefox in (/usr/local/maven/bin:/usr/java/latest/bin:/usr/java/latest/bin:/sbin:/usr/sbin:/bin:/usr/bin)

在jboss用户下运行Jenkins时,如何获得$PATH以匹配终端上以jboss身份登录时的$PATH?

由于firefox未在全局范围内安装,因此出现此问题。我对Jenkins用户和Ubuntu用户也有同样的问题。在ubuntu用户中,我安装了npm,并试图在jenkins中获取npm,尽管我遇到了相同的错误。始终尝试在全球范围内安装软件包或软件,以防其他用户使用相同的软件包

您并没有真正说过,所以我假设您正在jboss用户下运行Jenkins,否则,您无法真正期望环境匹配

交互式会话与非交互式会话的加载环境不同。谷歌并没有试图解释这一切,而是很快找到了答案,这似乎解释了正在发生的事情

当Jenkins运行作业时,它可能会生成一个非交互或非登录shell,从而导致不同的环境。一般来说,firefox只需要在登录shell中使用是有道理的。但是如果您需要更改,您可以找到链接文章中提到的哪些文件正在将firefox添加到路径中,您可以在您的脚本中找到该文件的源代码(
source/path/to/.profile\u file


或者,如果您以其他用户的身份运行Jenkins,或者另一种方法是在启动作业时修改路径,并将您知道需要的路径添加到环境中

谢谢,但我不知道如何解决这个问题。我如何配置Jenkins从用户所在的位置读取相同的$PATH?在我的Jenkins shell中运行“whoami”就是在显示用户是谁,不是吗?无论如何,我读了你提到的链接,但它是关于在ashell中运行不同的主脚本的一般性讨论,但没有提到如何让Jenkins从JBoss用户那里继承它的路径,在该用户下运行它。啊。正确的。错过了。只需在用户的主目录中找到将firefox添加到路径的文件。这似乎不是非登录shell的源代码。仅适用于交互式shell。只需在jenkins作业中查找该文件,它就会修复路径。或者,将添加firefox到路径的行移动到非登录shell的源文件之一。据我所知,源文件是/etc/profile,由所有用户调用。因此,我仍然不知道如何让Jenkins加载该文件或Jenkins正在加载什么文件。
/etc/profile
通常只对交互式shell执行。Jenkins不运行交互式shell,因此这可以解释为什么您无法获得设置。您有3种选择:源代码/etc/profile(
Source/etc/profile
),将您想要的/etc/profile设置放入为非交互式shell(即/etc/bashrc)执行的文件中,或者直接在管道中设置设置。