采购从另一个脚本的脚本上詹金斯
问题描述:
不起作用
我创造了一个詹金斯工作和两个shell脚本采购从另一个脚本的脚本上詹金斯
b.sh
======
sum()
{
echo "Sum called from b.sh"
}
a.sh
=======
echo "From Script A"
. ./b.sh
sum // Calling function of b.sh
当我执行詹金斯工作“脚本a.sh”获取调用,我希望“采购的” b.sh发生
然而,在功能上詹金斯错误‘如下
a.sh: line xx: sum: command not found
和’请提出的解决方案来克服这个
我将'b.sh'应用于$ WORKSPACE,并在'b.sh'中添加了'set -vx'并且发生了采购。
问题是与调用函数““从‘a.sh’。
答
b.sh::sum()我假设你使用‘在构建阶段执行shell脚本’编写脚本。这些脚本是一个临时目录中复制文件之前要执行,用户可通过登录看到了这种机制。你会看到类似[node_name] $ /bin/bash /tmp/jenkins210549930174147290.sh
这才是真正的脚本詹金斯执行。
所以,当你使用相对路径源b.sh
,没有任何追加,因为它没有找到任何脚本。
尝试使用绝对路径来搜索rce b.sh
。
答
Jenkins在名为workspace的文件夹下运行作业。 您可以通过在“执行shell脚本”构建阶段执行ls -l ${WORKSPACE}
来查看其内容,因此您可以确保脚本存在。
在尝试运行脚本之前,您应该确保将脚本复制到$ {WORKSPACE}。另外,您可以调用完整的脚本路径,避免每次都复制它们。
将'set -vx'放在'a.sh'的顶部,并将生成的日志合并到您的问题中。你应该从'b.sh'找到一个额外的错误,如果它确实没有被找到。 –
请再次包含*实际日志*,显示正在采购的内容。如果您的日志中包含您无法提供的内容,请确保问题在脚本被裁减到您可以提供并提供的内容时仍然发生 - 也就是说,提供[mcve]。 –
如果在你的* real *脚本中,内容源自一个子shell,然后你尝试在父shell中运行这个命令,那么这就是我们的问题 - 但是如果你只测试更大,更复杂的脚本而不是问题中的最小版本,那么该问题被掩盖了诊断。 –