我的Jenkins
运行在Tomcat
中,它运行在userbuildman
下,因此所有作业都运行在该用户下(在CentOS
中)。我的一些作业依赖于我在. bashrc
中设置的环境变量。但是,Jenkins作业看不到该文件中设置的任何变量,即使该脚本应该是为非登录shell提供的,例如我认为Jenkins应该是(?)。
解决方法很简单:我只是将. bashrc中的所有变量复制并粘贴到Jenkins的build命令脚本中。但这不是很优雅。有没有办法让Jenkins来获取运行它的用户的.bashrc,以便它获得通常的配置,而不必在每个作业中单独设置它?
Jenkins为每个脚本部分创建一个临时sh-script(至少在使用“经典”项目时——对于Pipeline方法,我不确定)。这个临时脚本是用sh执行的。在大多数Linux系统上,这是bash的符号链接,这个SO提供了一些见解。
此外,根据bash使用sh调用bash的手册页,“试图尽可能接近地模仿sh历史版本的启动行为,同时也符合POSIX标准。”这意味着. bashrc根本没有被解释。然而,您可以尝试为每次shell调用获取bashrc…
所以,我尝试了一些事情,唯一有效的解决方案是:
在这两种情况下,都需要有一个可执行文件,其内容如下:
#!/usr/bin/env bash
...
使用sh""bash-c"……""""似乎不起作用
当我的Jenkins代理在redhat linux上SSH启动时,我看到它确实打印了. bashrc
中定义的环境变量。
我看不到. bashrc
更改的问题是因为我需要重新启动代理,所以它接受了更改。