【问题标题】:continuous integration based on maven2基于maven2的持续集成
【发布时间】:2009-07-24 12:28:18
【问题描述】:

我正在尝试弄清楚如何使用 maven 设置持续集成。

我想要的是:

  1. 在 SVN 中检查新内容
  2. 如果检测到更改,请检查它们
  3. 构建和部署

我认为所有这些都可以被推送到一些 shell 脚本中,以使其被 cron 调用。因此,我们将拥有自动化的持续集成(例如,夜间构建)

我知道 maven 有用于版本控制系统的 SCM 插件,但我不知道如何让它检查存储库中的更改并根据结果启动检查。

所以我问观众:)

PS 我忘了提 - 我对任何现有的应用程序都不感兴趣!它们对我的 VPS 服务器来说太重了。请不要劝告他们

【问题讨论】:

    标签: svn maven-2 continuous-integration shell


    【解决方案1】:

    看看Hudson。它是免费的、开源的、积极开发的、有几十个有用的插件、有很好的 Maven2 支持,而且非常棒。

    在 Stack Overflow 上也是 frequently discussed

    【讨论】:

      【解决方案2】:

      我建议使用公认的 CI tool 来管理此问题,因为 CI 不仅仅是构建。

      但如果你决定自己动手,你可以使用 maven-scm-plugin 中的一些目标并捕获输出。

      假设您有项目的本地副本,因此您可以访问 pom,您可以运行 status 命令来检查更改,并解析输出以检查任何更改 使用目标是:

      mvn scm:status
      

      如果您看到任何更改的文件,则可以检查更改并调用您的构建。 但请注意,maven-scm-provider-svnlink text 中有一个错误,这意味着可以跳过更改的文件!你最好直接调用 Subversion 并解析它的输出。

      例如,以下将清除以前的构建,检查任何更改的内容,然后运行部署目标。

      mvn clean scm:checkout deploy
      

      如果您没有项目的工作副本,您可以使用scm:bootstrap 目标来获取它。如果你在 pom 中设置了一些属性,你可以重用 pom 来引导多个项目。

      例如,如果您将适当的命令行参数传递给它,下面的 pom 可以引导任何项目:

      mvn scm:bootstrap -DscmUserName=me -DscmPassword=mypass -DscmConnectionUrl=scm:svn:http://myserver/myproject/trunk
      
      <project>
        [...]
        <packaging>jar</packaging>
        <version>0.0.1</version>
        <name>SCM bootstrapper</name>
        <url>http://somecompany.com</url>
        <scm>
          <connection>${scmConnectionUrl}</connection>
          <developerConnection>${scmDeveloperConnectionUrl}</developerConnection>
          <url>${scmUrl}</url>
        <scm>
        [...]
        <build>
          [...]
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-scm-plugin</artifactId>
              <version>1.0</version>
              <configuration>
                <goals>install</goals>
                <username>${scmUsername}</username>
                <password>${scmPassword}</password>
              </configuration>
            </plugin>
          </plugins>
          [...]
        </build>
        [...]
        <properties>
          <scmDeveloperConnectionUrl>dummy</scmDeveloperConnectionUrl>
          <scmConnectionUrl>dummy</scmConnectionUrl>
          <scmUrl>dummy</scmUrl>
          <scmUsername>dummy</scmUsername>
          <scmPassword>dummy</scmPassword>
        </properties>
      </project>
      

      要使 Maven 与 subversion 一起工作,您需要配置 POM 的 scm 部分:

      <scm>
        <connection>scm:svn:http://path/to/project</connection>
        <developerConnection>scm:svn:http://path/to/project/tags/version</developerConnection>
        <url>scm:svn:http://path/to/project/tags/version</url>
      </scm>
      

      作为轮询更改的替代方法,请考虑添加hook to subversion,以便在进行更改时触发构建。 another question 可以为您提供指导。

      【讨论】:

      • >>如果您看到任何更改的文件这是我想自动化的要点:) 可能是由于您提到的错误,我不知道该怎么做。所以我得出的结论是,使用'svn update'命令可能会更容易,并且正如你所说,解析shell脚本中的输出以检测传入的更改。所以谢谢你!
      • 我在最后添加了一点关于使用 Subversion 挂钩来触发构建的内容,尽管频繁提交可能会导致这种方法出现问题,除非您实现队列或标志来检查当前构建。跨度>
      【解决方案3】:

      Maven 是一个用于存储代码和构建项目的存储库。我个人不会将它用作持续集成工具。

      看看hudson,我想你会找到更多你想要的东西。其他持续构建工具也适用于您。它将通过从您的存储库中获取最新版本的代码并按照您想要的任何计划(甚至是非计划的手动构建)构建它来工作。

      【讨论】:

        【解决方案4】:

        你看过hudson吗?

        【讨论】:

          【解决方案5】:

          下载并安装JetBrains TeamCity - 专业版是免费的。它是一个出色的持续集成服务器,支持 SVN 和 Maven(以及其他东西)。

          【讨论】:

            【解决方案6】:

            我们使用一个名为Luntbuild 的应用程序来管理类似的事情。

            • 首先创建一个项目
            • 指向您正在使用的 ant、maven 或其他构建器(我们只使用 ant 脚本)
            • 定义一个 SVN 适配器(或其他 VCS)

            然后应用程序监控 SVN 的更改并构建/部署您的应用程序...

            【讨论】:

              猜你喜欢
              • 2012-06-22
              • 1970-01-01
              • 2021-06-03
              • 2017-07-22
              • 2010-09-08
              • 1970-01-01
              • 1970-01-01
              • 2014-01-08
              • 1970-01-01
              相关资源
              最近更新 更多