gpt4 book ai didi

maven - 仅使用 Jenkins 部署 Tomcat WAR

转载 作者:行者123 更新时间:2023-11-28 22:16:27 26 4
gpt4 key购买 nike

仅使用 Jenkins 的 Tomcat WAR 部署:

这是部署场景:

  • 3 环境生产、生产前和资质
  • 2 个 War 文件,例如 app1 和 app2
  • 2 个 Tomcat 服务器,例如每个环境的 Server1 和 Server2(第 1 点)

war 文件情景:

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

    这是我想用 Jenkins 做的事情:

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

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

    Jenkin 项目 App1:

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

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

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

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

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

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

最佳答案

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

专家:

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

Jenkins :

  1. 使用带有“此项目已参数化”选项的 Jenkins 文件系统列表参数插件
  2. 使用构建选项中的“调用顶级 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>

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 .

关于maven - 仅使用 Jenkins 部署 Tomcat WAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47435963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com