基于maven2的持续集成

时间:2009-07-24 12:28:18

标签: svn maven-2 continuous-integration shell

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

我想要的是:

  1. 检查SVN中的新内容
  2. 如果检测到更改,请将其签出
  3. 构建和部署
  4. 我认为所有这些都可以推送到一些shell脚本中,以便cron调用它。因此,我们将实现自动化持续集成(例如夜间构建)

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

    所以我问观众:)

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

6 个答案:

答案 0 :(得分:3)

看看Hudson。它是免费的,开源的,积极开发的,有许多有用的插件,有很棒的Maven2支持,并且非常棒。

Stack Overflow上也是frequently discussed

答案 1 :(得分:2)

我建议使用公认的CI tool进行管理,因为CI不仅仅是构建。

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

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

mvn scm:status

如果您看到任何已更改的文件,则可以查看更改并调用构建。 请注意,maven-scm-provider-svn link 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可以指示你这样做。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

你看过hudson吗?

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我们使用名为Luntbuild的应用程序来管理这样的外包。

  • 首先制作一个项目
  • 指向你正在使用的ant,maven或其他一些构建器(我们只使用ant-scripts)
  • 定义SVN适配器(或其他VCS)

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