代码之家  ›  专栏  ›  技术社区  ›  pankaj ghadge

只有使用Jenkins的Tomcat WAR部署

  •  1
  • pankaj ghadge  · 技术社区  · 7 年前

    只有使用Jenkins的Tomcat WAR部署:

    以下是用于部署的scinario:

    • 3环境生产、预生产和鉴定
    • 2个War文件,如app1和app2
    • 每个环境有2台Tomcat服务器,如Server1和Server2(第1点)

    War文件scinario:

    • 开发者提供了类似app1##20171122的war文件。war和app2##20171122。战争
    • app1和app2设置文件不是war的一部分。
    • 每个环境的设置文件都不同(生产、预生产和鉴定)
    • 部署app1和app2后,我们将设置文件放在webapps/app1##20171122/config/Application。设置和webapps/app2##20171122/config/Application。设置
    • 最后,app1和app2开始使用tomcat管理器

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

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

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

      Jenkin项目App1:

      1. 我们将把app1##20171122。Jenkins服务器上的war文件
      2. 我们应该能够自动选择要部署的war文件以及war版本
      3. 我们应该能够在多个服务器(Server1和Server2)上部署war文件
      4. 在webapps/app1##20171122/config/Application下部署app1的设置文件。设置
      5. 启动app1

    注: 应用程序尚未准备好从webapps外部读取配置

    简而言之:
    ( Jenkins服务器: App1 war文件;它们的设置文件)==(部署在远程VM上)==>(Tomcat服务器)

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

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

    ( Jenkins服务器: 启动App1命令)==(将命令发送到远程VM)==>(Tomcat服务器)

    3 回复  |  直到 7 年前
        1
  •  1
  •   pankaj ghadge    6 年前

    我创造了以下东西来解决这个问题:

    Maven公司:

    1. 创建了一个解压war的小shell脚本,将与特定环境相关的设置文件放入,然后再次创建war文件

    詹金斯:

    1. 文件系统列表参数插件
    2. 使用Build选项中的“调用顶级Maven目标”,并使用以下Maven命令
    3. 配置文件系统参数时,请使用以下“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 .
    
        2
  •  0
  •   Jarvis Cochrane    7 年前

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

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

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

    $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 ,雄猫款待每一个人。战争作为一个单独的应用。我想你可以为这些应用程序提供额外的配置,但我不记得怎么做了。

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

        3
  •  0
  •   saurabh14292    7 年前

    以下是您可以做的:

    • 在jenkins中通过ssh配置“目标”服务器。
    • 以参数作为输入;什么目标,什么。战争,什么。设置文件等
    • 复制战争和。通过jenkins通过SCP/SSH将设置文件发送到目标服务器,并附带执行以下操作的脚本。
    • 爆炸战争(不要解压缩)
    • 需要复制。分解战争中的设置文件
    • 启动tomcat

    我建造了。war使用Jenkins作为构建作业和下游作业,用于部署在基于tomcat的环境中,该环境的详细信息作为构建参数。

    开发者提供了类似app1##20171122的war文件。war和app2##20171122。战争

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