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

时间:2013-12-04 15:23:23

标签: c++ linux bash c++11 jenkins

我在Linux主机上运行Jenkins。我正在自动构建C ++应用程序。为了构建应用程序,我需要使用4.7版本的g ++,其中包括对c ++ 11的支持。为了使用这个版本的g ++,我在命令提示符下运行以下命令:

exec /usr/bin/scl enable devtoolset-1.1 bash

所以我创建了一个“Execute shell”构建步骤并输入以下命令,这些命令在命令提示符下正确构建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

问题是Jenkins不会在“exec / usr / bin / scl enable devtoolset-1.1 bash”命令之后运行任何命令,而只是运行“exec”命令,终止并将构建标记为成功

关于如何重构上述内容以便Jenkins运行所有命令的任何想法?

谢谢!

3 个答案:

答案 0 :(得分:3)

在你的"执行shell"开始时脚本,执行source /opt/rh/devtoolset-1.1/enable以启用devtoolet" inside"你的贝壳。

给出了:

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

答案 1 :(得分:1)

我需要查看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在shell中运行该命令而不创建新shell。这意味着如果新打开的bash结束,它也会过早地结束你的shell。我建议将所有构建步骤放入bash脚本(例如run_my_build.sh)并按以下方式调用它。

exec /usr/bin/scl enable devtoolset-1.1 run_my_build.sh

答案 2 :(得分:0)

这种东西通常用于“查找”命令,但可以在这里工作。你可以运行一个执行多项操作的“sh”,而不是运行两个或三个进程,如下所示:

exec sh -c“thing1; thing2; thing3”

如果您需要在下一步之前成功完成每个步骤,请将双冒号替换为双号&符号:

exec sh -c“thing1&& thing2&& thing3”

我不知道你希望一起运行哪些步骤,所以我希望你能够根据自己的需要调整这个概念。

或者你可以把全部内容放到一个脚本中并执行它。

相关问题