如何在 Travis CI 中为 C++ 项目并行运行多个构建,每个构建都有单独的脚本?

Posted

技术标签:

【中文标题】如何在 Travis CI 中为 C++ 项目并行运行多个构建,每个构建都有单独的脚本?【英文标题】:How can I run multiple builds in parallel in Travis CI, each with a separate script, for a C++ project? 【发布时间】:2019-03-03 18:42:38 【问题描述】:

我有一个 C++ 项目,我想使用 Travis CI 自动构建它。

该项目使用 GNU make 构建。有多个构建目标,它们彼此独立,我想使用 Travis CI 自动检查每个目标的构建是否成功。所以,我希望每次提交都运行多个 Travis 构建,每个目标一个。

我可以这样做的一种方法是:

script:
    - make target1
    - make target2
    - make target3

但是,这可能会隐藏一些问题,例如 target2 的构建只有在 target1 已经构建时才会成功。

那么替代方案可能是:

script:
    - make target1
    - make clean
    - make target2
    - make clean
    - make target3

这看起来有点难看,而且可能需要比需要更多的时间。直到target1target2构建成功后才能发现target3的构建错误。

更好的方法可能是使用 Travis 的构建矩阵功能,这是我一直无法做到的。我尝试了以下方法:

matrix:
    - script: make target1
    - script: make target2
    - script: make target3

但这不起作用。 C++ 的 Travis 文档建议矩阵可以交错不同的environments and compilers,我无法找到任何方法来分别运行不同的脚本。这可以通过某种方式与环境一起指定吗?

这可能吗?如果是这样,这样做的正确方法是什么?

谢谢。

【问题讨论】:

投反对票的能解释一下吗? 这是一个很好的问题,我很惊讶它有 0 票。我现在刚刚投了赞成票,所以它是+1。我看到你为数学、计算机科学甚至物理堆栈交换做出了很多很好的贡献。我想知道您是否可以帮助我们启动材料建模(太阳能电池、锂电池、储能材料等建模中的大规模计算软件)的堆栈交换。我们有一个 Area51 提案,绝对可以使用您的帮助!我将在下一条评论中提供一个链接: [cot'd]:Materials Modeling Stack Exchange 【参考方案1】:

我找到了解决方案。 Travis Docs here 中提供了这方面的信息,而 Makefile 的特定信息则在 here 中提供。

对我有用的解决方案是:

env:
    matrix:
      - TARGET="target1"
      - TARGET="target2"
      - TARGET="target3"
script:
    - make $TARGET

这会创建三个并行运行的作业。

【讨论】:

以上是关于如何在 Travis CI 中为 C++ 项目并行运行多个构建,每个构建都有单独的脚本?的主要内容,如果未能解决你的问题,请参考以下文章

GitHub项目加入Travis-CI的自动集成

如何将 Travis-CI 与 C# 或 F# 一起使用

如何在 Travis-CI 配置文件 (YAML) 中正确使用 curl?

github pages与travis ci运作原理

如何使用 travis ci 配置 SSH 连接?

为GitHub项目加入Travis-CI的自动集成