Jenkins 无法访问 shell 别名



我已经配置了一个Jenkins作业来获取一个bash脚本,该脚本会获取另一个bash脚本。该脚本会向其用户的.bashrc添加一个别名,并获取.bashrc本身,然后原始脚本会尝试使用该别名(由秒设置)。然而,它似乎找不到它刚刚创建的别名。除了使用"通过SSH发送文件或执行命令"构建步骤来获取脚本外,我没有使用任何脚本插件。

工作是这样做的:

source ./test_script.sh

test_script.sh看起来像这样:

echo "In test_script.sh"
echo $USER
echo $HOME
source ./setup_env.sh
echo "nBack in test_script.sh"
alias foo
foo

最后,setup_env.sh看起来是这样的:

echo "nIn setup_env.sh"
echo "alias foo="echo foobar"" >> $HOME/.bashrc
source $HOME/.bashrc 2>/dev/null
cat $HOME/.bashrc

我从Jenkins工作中收到的输出如下:

In test_script.sh
my_user
/home/my_user
nIn setup_env.sh
...all of my bashrc...
alias foo="echo foo"
nBack in test_script.sh
alias foo='echo foo'
./test_script.sh: line 7: foo: command not found

我不明白为什么会发生这种情况,因为我可以很高兴地在命令行上自己运行它并看着它成功。为什么Jenkins不能使用新的别名,而它显然可以找到它(正如alias foo命令的输出所示)?

对于其他有此问题的人,您可能需要设置expand_aliases shell选项,Jenkins:默认情况下该选项似乎处于关闭状态

shopt expand_aliases # check if it's on
shopt -s expand_aliases # set expand_aliases option to true
shopt expand_aliases # it should be on now
# test with a simple alias, should print 1
alias x="python -c 'print 1'"
x

echo命令输出中显示的n
建议这不是在bash下运行的,正如您所期望的那样。

请检查jenkins用户的设置
(或与您一起运行Jenkins的任何其他用户)-
特别是默认shell的设置

要测试这一点,请在脚本的开头添加其中一行:

env

env | grep -i shell

还应该考虑确保脚本在正确的shell下运行,
添加"shebang"行作为每个脚本的第一行
例如,在"bash"的情况下,您应该添加以下第一行:

#!/bin/bash

(这不是一个评论,尽管自动语法高亮器可能会怎么想…)

最新更新