Maven 只有使用Jenkins的Tomcat WAR部署

Maven 只有使用Jenkins的Tomcat WAR部署,maven,tomcat,jenkins,ant,jenkins-plugins,Maven,Tomcat,Jenkins,Ant,Jenkins Plugins,仅使用Jenkins的Tomcat WAR部署: 以下是用于部署的scinario: 3环境生产、预生产和鉴定 2个War文件,如app1和app2 每个环境点1有2台Tomcat服务器,如Server1和Server2 战争档案scinario: 开发者提供类似于app120171122.war和APP20171122.war的war文件 app1和app2设置文件不是war的一部分。 每个环境生产、预生产和鉴定的设置文件都不同 部署app1和app2后,我们将设置文件放在webapps/ap

仅使用Jenkins的Tomcat WAR部署:

以下是用于部署的scinario:

3环境生产、预生产和鉴定 2个War文件,如app1和app2 每个环境点1有2台Tomcat服务器,如Server1和Server2 战争档案scinario:

开发者提供类似于app120171122.war和APP20171122.war的war文件 app1和app2设置文件不是war的一部分。 每个环境生产、预生产和鉴定的设置文件都不同 部署app1和app2后,我们将设置文件放在webapps/app120171122/config/Application.settings和webapps/app220171122/config/Application.settings 最后,app1和app2开始使用tomcat管理器

以下是我想对詹金斯做的事情:

使用Mavin部署或任何其他工具:

注意:这里的War文件大小超过450MB

詹金项目App1:

我们将把app120171122.war文件放在Jenkins服务器上 我们应该能够自动选择要部署的war文件以及war版本 我们应该能够在多台服务器Server1和Server2上部署war文件 在webapps/app120171122/config/Application.settings下部署app1的设置文件 启动app1 注意:应用程序尚未准备好从webapps外部读取配置

简言之: Jenkins服务器:App1 war文件及其设置文件==部署在远程VM==>Tomcat服务器上

Jenkins服务器:自动选择App1 war==在远程VM上部署==>Tomcat服务器

Jenkins服务器:App1设置文件==远程VM上的部署设置==>Tomcat服务器


Jenkins服务器:Start App1 command==Send command to remote VM==>Tomcat服务器

您是否询问如何让Jenkins将应用程序及其配置部署到Tomcat实例

我认为使用Maven部署插件可能是物理部署文件的最佳选择

当我需要将一个应用程序的多个副本/版本部署到多个Tomcat服务器时,我所做的是创建一个新的目录wars来包含.war文件,并使用Tomcat 配置各个应用程序实例。像这样:

$CATALINA_HOME/conf/Catalina/localhost/app1.xml
$CATALINA_HOME/conf/Catalina/localhost/app2.xml
$CATALINA_HOME/wars/app1-1.0.0.war
$CATALINA_HOME/wars/app1-1.0.1.war
$CATALINA_HOME/wars/app2-1.0.1.war
当您将.war文件部署到../webapps时,Tomcat将每个.war视为单独的应用程序。我想你可以为这些应用程序提供额外的配置,但我不记得怎么做了


但是,如果使用上下文容器文件,多个应用程序实例可以使用同一个.war文件。您可以保留.war文件的多个修订版,以防需要回滚到早期版本,或希望继续运行旧版本。

以下是您可以执行的操作:

在jenkins中通过ssh配置目标服务器。 以参数作为输入;什么目标、什么.war、什么.settings文件等 通过jenkins和执行以下操作的脚本,通过SCP/SSH将.war和.settings文件复制到目标服务器。 爆炸,战争,解开拉链 复制必需的.war中的设置文件 启动雄猫 我已经构建了.war,使用Jenkins作为构建作业,下游作业用于部署在基于tomcat的环境中,该环境的详细信息作为构建参数获取

开发者提供类似于app120171122.war和APP20171122.war的war文件

您还没有提到开发人员如何为您提供这些war文件。如果它们是构建的,我建议创建一个作业来使用ant/maven等构建这些战争,这样就可以知道这些战争所在的位置。
如果要提供它们,您可以将它们上传到任何集中位置的FTP服务器,或通过JFrog/Nexu等人工工具,并直接在tomcat服务器上下载。

我创建了以下方法来解决此问题:

马文:

已安装Maven并按照pom.xml创建 创建了一个解压war的小shell脚本,将与特定环境相关的设置文件放入,然后再次创建war文件 詹金斯:

与此项目一起使用的Jenkins文件系统列表参数插件是参数化选项。 使用从构建中调用顶级Maven目标选项,并使用以下Maven命令 配置文件系统参数时,请使用以下WAR-NAME

deploy-Papp1-Papp2-DwarFile=${WAR-NAME}

Pom.xml:

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.app1.app</groupId>
<artifactId>app1</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>my-webapp Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
    <warFile>none</warFile>
</properties>
<profiles>
    <profile>
        <id>app1</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.7</version>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                        <execution>
                            <id>regex-property</id>
                            <goals>
                                <goal>regex-property</goal>
                            </goals>
                            <configuration>
                                <name>warFilename</name>
                                <value>${warFile}</value>
                                <regex>.war$</regex>
                                <replacement></replacement>
                                <failIfNoMatch>false</failIfNoMatch>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.6.0</version>
                    <executions>
                        <execution>
                            <id> unzip, put setting file and zip again </id>
                            <phase>deploy</phase>
                            <goals>
                                <goal>exec</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <commandlineArgs>${warFile}</commandlineArgs>
                        <executable>${basedir}/make_war.sh</executable>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <executions>
                        <execution>
                            <id>deploy-app1-1</id>
                            <goals>
                                <goal>deploy-only</goal>
                            </goals>
                            <phase>deploy</phase>
                            <configuration>
                                <username>admin</username>
                                <password>adminpass</password>
                                <warFile>${basedir}/deploy/${warFile}</warFile>
                                <url>http://localhost:9090/manager/text</url>
                                <server>Tomcat</server>
                                <path>/app1</path>
                                <update>true</update>
                                <ignorePackaging>true</ignorePackaging>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>app2</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.7</version>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <executions>
                        <execution>
                            <id>deploy-app1-2</id>
                            <goals>
                                <goal>deploy-only</goal>
                            </goals>
                            <phase>deploy</phase>
                            <configuration>
                                <username>admin</username>
                                <password>adminpass</password>
                                <warFile>${basedir}/deploy/${warFile}</warFile>
                                <url>http://localhost:8080/manager/text</url>
                                <server>Tomcat</server>
                                <path>/app1</path>
                                <update>true</update>
                                <ignorePackaging>true</ignorePackaging>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

我已经添加了更多的信息在最后一部分简短
#!/usr/bin/sh
if [ $# -lt 1 ]; then
  echo 1>&2 "$0: not enough arguments. Please pass the WAR file name !!!"
  exit 2
elif [ $# -gt 1 ]; then
  echo 1>&2 "$0: too many arguments. Please only pass the WAR file name !!!"
  exit 2
fi

war_file_name=$1
file_name=$(basename "$war_file_name")
extension="${war_file_name##*.}"
file_name="${file_name%.*}"

if [ $extension != "war" ]; then
  echo 1>&2 "$0: Invalid arguments. Please pass valid WAR file with version name !!!"
  exit 2
fi

echo "Cleaning up the deploy folder ..."
/usr/bin/rm -rf ./deploy/*
/usr/bin/unzip $war_file_name -d ./deploy/$file_name
/usr/bin/cp -f Application.settings ./deploy/$file_name/config/Application.settings
/usr/local/java/latest/bin/jar -cvf ./deploy/$war_file_name -C ./deploy/$file_name .