使用maven分布式构建?

时间:2014-08-20 13:46:09

标签: maven build parallel-processing distributed

目前,我们有一个maven项目,有几千个测试需要两个小时才能运行。我们尝试并行运行这些,但由于它们是功能测试,因此每个测试都以特定方式配置系统,这会导致竞争条件和随机测试失败。我想要做的是在AWS上启动N个服务器,然后让maven划分我的测试并在这些服务器上运行它们(每个服务器将按顺序运行其测试,但所有服务器将并行运行),然后聚合结果。是否有任何插件可以做这样的事情?我已经看到了一些接近我希望在Jenkins中实现的东西,但是我更喜欢它被maven驱动,所以开发人员可以在没有安装Jenkins的情况下在本地使用它。

1 个答案:

答案 0 :(得分:0)

我不知道任何完全开箱即用的插件,但我相信这项工作可以完成。

我发现自己在分割工作时使用了一个迭代器插件。请参阅此处的示例: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>
...