簡體   English   中英

在Jenkins“ Execute Shell”中運行“ exec”命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM