仅使用Jenkins进行Tomcat WAR部署

时间:2017-11-22 13:28:29

标签: maven tomcat jenkins ant jenkins-plugins

仅使用Jenkins进行Tomcat WAR部署:

以下是部署的scinario:

  • 3环境生产,前期制作和资格认证
  • 2个战争文件,如app1和app2
  • 2个Tomcat服务器类似于每个环境的Server1和Server2(第1点)

战争文件scinario:

  • 开发人员提供战争文件,如app1 ## 20171122.war和app2 ## 20171122.war
  • app1和app2设置文件不是战争的一部分。
  • 每个环境(生产,预生产和资格认证)的设置文件都不同
  • 在部署app1和app2之后,我们将设置文件放在webapps / app1 ## 20171122 / config / Application.settings和webapps / app2 ## 20171122 / config / Application.settings
  • 最后app1和app2开始使用tomcat manager

    以下是我想对Jenkins做的事情:

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

    注意:此处War文件大小超过450MB

    Jenkin Project App1:

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

我已经创建了以下内容来解决这个问题:

的Maven:

  1. 安装Maven并创建以下pom.xml
  2. 创建了一个小的shell脚本来解压战,将设置文件与特定环境相关并再次创建war文件
  3. 詹金斯:

    1. 使用Jenkins 文件系统列表参数插件和"此项目已参数化"选项。
    2. 使用"调用顶级Maven目标"来自Build Option并使用以下maven命令
    3. 请使用以下" WAR-NAME"配置文件系统参数

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

    4. 的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>
      

      make_war.sh

      #!/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 .
      

答案 1 :(得分:0)

您是否在询问如何让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时,Tomcat会将每个.war视为一个单独的应用程序。我认为您可以为这些应用程序提供其他配置,但我不记得如何。

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

答案 2 :(得分:0)

以下是您可以做的事情:

  • 配置&#34;目标&#34;服务器通过jenkins中的ssh。
  • 以参数作为输入;什么目标,什么.war,什么.settings文件等
  • 通过jenkins将.war和.settings文件通过SCP / SSH复制到目标服务器以及执行以下操作的脚本。
  • 爆炸.war(解压缩)
  • 在爆炸战争中复制所需的.settings文件
  • 启动tomcat

我使用Jenkins构建.war作为构建作业,下游作业用于在基于tomcat的环境中进行部署,其详细信息被选为构建参数。

  

开发人员提供类似app1的战争文件## 20171122.war和app2 ## 20171122.war

您还没有提到开发人员如何提供&#34;你这些战争档案。如果它们是&#34;内置&#34;,我建议创建一个工作来使用ant / maven等来构建这些战争,以便这些战争所在的位置已经知道。 如果要提供它们,您可以将它们上传到任何集中位置(FTP服务器)或通过某些工件(如JFrog / Nexu)直接下载到tomcat服务器上。