2017-06-12 123 views
0
不起作用

我创造了一个詹金斯工作和两个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’。

+0

将'set -vx'放在'a.sh'的顶部,并将生成的日志合并到您的问题中。你应该从'b.sh'找到一个额外的错误,如果它确实没有被找到。 –

+0

请再次包含*实际日志*,显示正在采购的内容。如果您的日志中包含您无法提供的内容,请确保问题在脚本被裁减到您可以提供并提供的内容时仍然发生 - 也就是说,提供[mcve]。 –

+0

如果在你的* real *脚本中,内容源自一个子shell,然后你尝试在父shell中运行这个命令,那么这就是我们的问题 - 但是如果你只测试更大,更复杂的脚本而不是问题中的最小版本,那么该问题被掩盖了诊断。 –

回答

0

b.sh::sum()我假设你使用‘在构建阶段执行shell脚本’编写脚本。这些脚本是一个临时目录中复制文件之前要执行,用户可通过登录看到了这种机制。你会看到类似[node_name] $ /bin/bash /tmp/jenkins210549930174147290.sh这才是真正的脚本詹金斯执行。

所以,当你使用相对路径源b.sh,没有任何追加,因为它没有找到任何脚本。

尝试使用绝对路径来搜索rce b.sh

0

Jenkins在名为workspace的文件夹下运行作业。 您可以通过在“执行shell脚本”构建阶段执行ls -l ${WORKSPACE}来查看其内容,因此您可以确保脚本存在。

在尝试运行脚本之前,您应该确保将脚本复制到$ {WORKSPACE}。另外,您可以调用完整的脚本路径,避免每次都复制它们。

相关问题