只有使用 Jenkins 的 Tomcat WAR 部署



仅使用 Jenkins 部署 Tomcat WAR:

以下是用于部署的 scinario:

  • 3 环境生产、预生产和认证
  • 2
  • 战争文件,如应用程序 1 和应用程序 2
  • 每个环境有 2 个 Tomcat 服务器,如 Server1 和 Server2(第 1 点)

战争档案:

开发人员提供像app1##20171122.war
  • 和app2##20171122.war这样的战争文件
  • App1 和 App2 设置文件不是战争的一部分。
  • 每个环境的设置文件都不同(生产、预生产和鉴定)
  • 部署 app1
  • 和 app2 后,我们将设置文件放在 webapps/app1##20171122/config/Application.settings 和 webapps/app2##20171122/config/Application.settings
  • 最后 app1 和 app2 开始使用雄猫管理器

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

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

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

    詹金项目应用1:

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

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

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

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

(詹金斯服务器:App1 设置文件) ==(在远程虚拟机上部署设置)==>(Tomcat 服务器)

(Jenkins Server:Start App1 命令) ==(Send Command to remote VM)==>(Tomcat server)

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

专家:

  1. 安装了 Maven 并创建了以下 pom.xml
  2. 创建了一个小的shell脚本来解压缩war,放置与特定环境相关的设置文件,然后再次创建war文件

詹金斯:

  1. 将 Jenkins文件系统列表参数插件与"此项目已参数化"选项一起使用。
  2. 从构建选项中使用了"调用顶级 Maven 目标",并使用以下 maven 命令
  3. 请在配置文件系统参数时使用以下"WAR-NAME"

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

绒球.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 .

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

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

当我需要将应用程序的多个副本/版本部署到多个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 将 .war 和 .settings 文件复制到 SCP/SSH 上的目标服务器,以及执行以下操作的脚本。
  • 爆炸 .war (解压缩)
  • 在爆炸战争中复制所需的 .settings 文件
  • 启动雄猫

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

开发人员提供像app1##20171122.war

和app2##20171122.war这样的战争文件

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

相关内容

  • 没有找到相关文章

最新更新