使用maven进行分布式构建?

use*_*364 5 parallel-processing distributed build maven

目前,我们有一个 Maven 项目,有几千个测试,需要 2 个小时才能运行。

我们尝试并行运行这些测试,但由于它们是功能测试,每个测试都以特定的方式配置系统,这会导致竞争条件和随机测试失败。

我想在 AWS 上启动 N 个服务器,然后让 Maven 将我的测试分开,并在这些服务器上运行它们(每个服务器将按顺序运行其测试,但所有服务器将并行运行),然后汇总结果。

有没有什么插件可以做这样的事情?

我已经看到了一些与我想要在 Jenkins 中实现的东西很接近的东西,但我更喜欢它是 Maven 驱动的,这样开发人员就可以在本地使用它,而无需安装 Jenkins。

Nie*_*sen 1

我不知道有哪个插件可以完全完成所有这些开箱即用的工作,但我相信这项工作可以完成。

我发现自己在必须拆分工作时使用迭代器插件。请参阅此处的示例:http ://khmarbaise.github.io/iterator-maven-plugin/

要进行实际的上传和执行,一种建议可能是使用 ant 插件来 scp 项目,然后使用 sshexec 来执行它。

   <build>
    ...
    <plugins>
    ...
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <configuration>
          <tasks>
            <scp todir="${scp.user}:${scp.password}@${scp.host}:/${scp.dirCopyTo}" trust="true" failonerror="false">
              <fileset dir="${bundle.dir}" />
            </scp>
            <sshexec host="${scp.host}"
                username="${scp.user}"
                keyfile="${user.home}/.ssh/id_dsa"
                command="touch somefile"/>
          </tasks>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>ant</groupId>
            <artifactId>ant-jsch</artifactId>
            <version>1.6.5</version>
          </dependency>
          <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.42</version>
          </dependency>
        </dependencies>
      </plugin>
...
Run Code Online (Sandbox Code Playgroud)