2017-06-12 121 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}。另外,您可以調用完整的腳本路徑,避免每次都複製它們。

相關問題