仅使用Jenkins进行Tomcat WAR部署:
以下是部署的scinario:
战争文件scinario:
最后app1和app2开始使用tomcat manager
以下是我想对Jenkins做的事情:
使用Mavin部署或任何其他工具:
注意:此处War文件大小超过450MB
Jenkin Project App1:
注意:应用程序尚未准备好从webapps外部读取配置
简而言之:
( Jenkins服务器: App1 war文件及其设置文件)==(在远程VM上部署)==>(Tomcat服务器)
( Jenkins服务器:自动选择App1战争)==(在远程VM上部署)==>(Tomcat服务器)
( Jenkins服务器: App1设置文件)==(在远程VM上部署设置)==>(Tomcat服务器)
( Jenkins服务器:启动App1命令)==(向远程VM发送命令)==>(Tomcat服务器)
答案 0 :(得分:1)
我已经创建了以下内容来解决这个问题:
的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>
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)
以下是您可以做的事情:
我使用Jenkins构建.war作为构建作业,下游作业用于在基于tomcat的环境中进行部署,其详细信息被选为构建参数。
开发人员提供类似app1的战争文件## 20171122.war和app2 ## 20171122.war
您还没有提到开发人员如何提供&#34;你这些战争档案。如果它们是&#34;内置&#34;,我建议创建一个工作来使用ant / maven等来构建这些战争,以便这些战争所在的位置已经知道。 如果要提供它们,您可以将它们上传到任何集中位置(FTP服务器)或通过某些工件(如JFrog / Nexu)直接下载到tomcat服务器上。