[英]Running the “exec” command in Jenkins “Execute Shell”
我在Linux主機上運行Jenkins。 我正在自動執行C ++應用程序的構建。 為了構建該應用程序,我需要使用4.7版本的g ++,其中包括對c ++ 11的支持。 為了使用此版本的g ++,我在命令提示符處運行以下命令:
exec /usr/bin/scl enable devtoolset-1.1 bash
因此,我創建了一個“執行外殼”構建步驟,並放置了以下命令,該命令可以在命令提示符下正確構建C ++應用程序:
exec /usr/bin/scl enable devtoolset-1.1 bash
libtoolize
autoreconf --force --install
./configure --prefix=/home/tomcat/.jenkins/workspace/project
make
make install
cd procs
./makem.sh /home/tomcat/.jenkins/workspace/project
問題在於,詹金斯將不會在“ exec / usr / bin / scl enable devtoolset-1.1 bash”命令之后運行任何命令,而是僅運行“ exec”命令,終止並標記構建成功。
關於如何重新構造上述內容以便讓詹金斯運行所有命令的任何想法?
謝謝!
在“執行外殼”腳本的開始處,執行source /opt/rh/devtoolset-1.1/enable
以在外殼內部啟用devtoolet。
這使:
source /opt/rh/devtoolset-1.1/enable
libtoolize
autoreconf --force --install
./configure --prefix=/home/tomcat/.jenkins/workspace/project
make
make install
cd procs
./makem.sh /home/tomcat/.jenkins/workspace/project
我需要查看scl的實際功能。
Examples
scl enable example 'less --version'
runs command 'less --version' in the environment with collection 'example' enabled
scl enable foo bar bash
runs bash instance with foo and bar Software Collections enabled
因此,您正在執行的是運行bash shell。 我猜想,由於您處於非交互模式,因此bash shell立即返回。 exec
在外殼程序內運行命令而不創建新的外殼程序。 這意味着如果新打開的bash結束,它也會過早地結束您的shell。 我建議將所有構建步驟放入bash腳本(例如run_my_build.sh)中,並通過以下方式進行調用。
exec /usr/bin/scl enable devtoolset-1.1 run_my_build.sh
這種事情通常在“查找”命令中起作用,但在這里可能起作用。 而不是運行兩個或三個進程,而是運行一個執行多個任務的“ sh”,如下所示:
exec sh -c“事物1;事物2;事物3”
如果您要求每個步驟在下一步之前都成功,請用雙“&”號代替分號:
exec sh -c“事物1 &&事物2 &&事物3”
我不知道您希望一起執行哪個步驟,因此我希望您可以修改該概念以適合您的需求。
或者,您可以將全部內容放入腳本中並執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.