Maven部署到多个Tomcat服务器

cgp*_*cgp 19 tomcat build-process maven-2

使用可编写的maven将战争部署到多个tomcat服务器的最小例子是什么?

我已经尝试了以下网址并询问了邮件列表,但没有提出任何简短而简单的工作.

该示例应该具有在示例中定义的服务器(带有示例用户名/密码)

Rom*_*las 25

Markus Lux的想法也适用于Maven2解决方案,配置文件管理:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
        </plugin>
    </plugins>
    ...
</build>
<profiles>
    <profile>
        <id>env-foo1</id>
        <!-- Activated when -Denv=foo1 is given as parameter. -->
        <activation>
            <property>
                <name>env</name>
                <value>foo1</value>
            </property>
        </activation>
        <properties>
            <deploy.env>xxx</deploy.env>
            <tomcat.manager>http://foo1/manager</tomcat.manager>
            <tomcat.manager.username>foo</tomcat.manager.username>
            <tomcat.manager.password>bar</tomcat.manager.password>
        </properties>
    </profile> 
    <profile>
        <id>env-foo2</id>
        <!-- Activated when -Denv=foo2 is given as parameter. -->
        <activation>
            <property>
                <name>env</name>
                <value>foo2</value>
            </property>
        </activation>
        <properties>
            <deploy.env>dev</deploy.env>
            <tomcat.manager>http://foo2/manager</tomcat.manager>
            <tomcat.manager.username>foo</tomcat.manager.username>
            <tomcat.manager.password>bar</tomcat.manager.password>
        </properties>
    </profile>
    ... 
</profiles>    
Run Code Online (Sandbox Code Playgroud)

然后,您只需要使用足够的参数(-Denv = foo1,-Denv = foo2,...)运行X次mvn命令


除此之外,您还可以使用Hudson Continuous Integration服务器的Matrix功能来增强此解决方案.我在这里简要介绍了这个功能.

基本上,您只需在Hudson中定义"普通"Maven2作业,并且使用Matrix功能,您可以要求Hudson多次运行此作业,每个环境一个.换句话说,您创建了Hudson作业,然后使用env参数的所有可能值定义"环境轴" :

  • foo1
  • foo2的
  • foo3
  • ...

然后Hudson将使用mvn命令和参数-Denv = foo1构建应用程序.一旦完成此构建,它将使用参数-Denv = foo2构建相同的应用程序,依此类推......

这样,Hudson将在每个环境中部署您的应用程序......

我希望我的解决方案能帮助您实现目标......

  • 有没有办法做到这一点,而不必调用maven X次?在我看来,再次构建只是为了部署是耗时的,如果在这些构建期间有一个新的更改提交给代码,它可能会导致在集群中进行不一致的部署 (2认同)

小智 8

关于使用多个配置文件,生命周期似乎复制了某些步骤 - 例如,当使用由变量激活的配置文件时,测试的数量增加了一倍.我们发现使用catalina-ant库更有效;)它更"有用".使用"executions"元素将"运行"目标附加到生命周期阶段以简化它,或者在包之后运行:mvn package antrun:run

您可以使用ant-contrib库获得更多花哨,并创建一个带有服务器列表的for循环,但这里是2个硬编码服务器URL的静态配置.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <configuration>
        <target>
            <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/>
            <deploy url="http://tc-app-01:8080/manager" username="manager" password="pass"
                    path="/app-path" war="file:${project.build.directory}/${project.build.finalName}.${project.packaging}" update="true"/>

            <deploy url="http://tc-app-02:8080/manager" username="manager" password="pass"
                    path="/app-path" war="file:${project.build.directory}/${project.build.finalName}.${project.packaging}" update="true"/>
        </target>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>tomcat</groupId>
            <artifactId>catalina-ant</artifactId>
            <version>6.0.29</version>
        </dependency>
    </dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)

上面使用的catalina-ant的特定版本被手动部署到我们的分布式maven存储库,它可以在tomcat发行版的lib目录中找到.