【问题标题】:Is it possible to run a test-suite in a vagrant box started from Jenkins?是否可以在从 Jenkins 开始的 vagrant box 中运行测试套件?
【发布时间】:2014-01-10 13:40:12
【问题描述】:

目前,我们的开发人员都使用配置有特定软件集的 VirtualBox VM 的克隆,我们希望将持续集成引入我们的开发堆栈。

我们正在考虑使用 Jenkins,最好将其配置为执行以下操作:

  1. 克隆我们都用于开发的基础虚拟机(因为它经常更新)
  2. 启动此 VM 的实例
  3. 将脚本复制/下载到实例中
  4. 执行脚本,它将安装我们的开发环境并运行测试
  5. 收集测试结果
  6. 报告测试是否成功

我很确定我们可以让 1-4 工作,这是我们关心的第 5 步和第 6 步。

这可以实现吗?如果有,怎么做?

【问题讨论】:

    标签: python jenkins continuous-integration virtual-machine vagrant


    【解决方案1】:

    这当然是可能的,我们有一个非常相似的设置。

    收集结果

    为了收集测试结果,您可以利用 Vagrant's synced folders,即在与您的主机同步的目录中的 VM 上运行测试(在这种情况下运行 Jenkins)。

    报告测试是否成功

    我相信您知道 Jenkins 进程只需要退出非零即可失败。我们设置测试的方式如下:

    vagrant ssh -c 'cd /synced-folder/ && grunt test-report --force && npm test'
    

    首先我们使用Grunt 收集结果。我们刚刚生成了 xunit XML 报告(然后我们将其作为构建后操作发布)。请注意,我们 --force 这以便即使我们的测试失败,我们也可以收集结果。然后我们使用npm test 运行测试。 npm test 进程的退出代码将用于 Jenkins 作业,因此如果失败,Jenkins 作业也将使用。

    【讨论】:

      【解决方案2】:

      有很多 Jenkins 插件专门设计用于处理这种情况。

      特别是,Jenkins 有一个从属执行器的基本概念,并为您处理文件的复制、远程触发和收集结果(这实际上是 Jenkins 的核心功能 - 处理大量运行的管理开销跨多台机器的计划任务)。除了启动从属机器(在您的场景中使用 Vagrant 提供)并告诉 Jenkins 您的构建应该在该特定从属机器上运行之外,您实际上不需要做任何事情。

      这是文档的相关入口点:

      https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds

      【讨论】:

        猜你喜欢
        • 2012-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-02
        • 1970-01-01
        • 2020-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多