Jenkins+maven+SVN+Tomcat一键自动打包war部署到Linux或windows应用服务器
一、准备2台服务器(CentOS 7+),一台用于jenkins构建用,一台用于项目 tomcat应用部署
二、安装jenkins服务器
2.1 安装JDK1.8(/usr/java/jdk1.8.0_131)、安装apache-maven-3.6.3-bin.tar.gz(/home/apache-maven-3.6.3)
2.2 编辑 /etc/profile 文件:
export JAVA_HOME=/usr/java/jdk1.8.0_131 export JRE_HOME=${JAVA_HOME}/jre export MAVEN_HOME=/home/apache-maven-3.6.3 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
执行:source /etc/profile 命令生效
2.3 下载jenkins war 包上传至/home 目录下(地址:https://www.jenkins.io/download/ 选择Generic Java package (.war))
启动jenkins服务:
cd /home
nohup java -jar jenkins.war --httpPort=8080 &
访问jenkins: http://服务器IP:8080/
三、配置jenkins
3.1 进入“系统管理”-“插件管理”-“可选插件”中搜索安装以下3类插件:
(1)Subversion Revert Plugin、Subversion Workspace Cleaner、SVN 1.4 Compatibility Plugin
(2)Maven Integration plugin、Deploy to container Plugin、WebSphere Deployer Plugin
(3)Publish Over SSH、SSH Build Agents plugin、SSH plugin
3.2 进入“系统管理”-“全局工具配置”
(1)Maven 配置
默认 settings 提供:文件系统中的settings文件, 文件路径:/home/apache-maven-3.6.3/conf/settings.xml
默认全局 settings 提供:文件系统中的全局settings文件,文件路径:/home/apache-maven-3.6.3/conf/settings.xml
(2)JDK配置
别名:jdk1.8.0_131
JAVA_HOME:/usr/java/jdk1.8.0_131
(3)Maven
name:maven3.6.3
MAVEN_HOME:/home/apache-maven-3.6.3
3.3 进入“系统管理”-“系统配置”
(1)Maven项目配置
全局MAVEN_OPTS:-Xms128m -Xmx512m
(2)Publish over SSH
3.4 进入“新建任务”-“构建一个自由风格的软件项目”
(1)源码管理
选择Subversion,设置Repository URL、Credentials
(2)构建触发器
(3)构建-增加构建步骤-执行shell 命令:
cd $WORKSPACE MAVEN_BIN=/home/apache-maven-3.6.3/bin $MAVEN_BIN/mvn clean install -Dmaven.test.skip=true
(4)构建后操作-增加构建后操作步骤-send build artifacts over SHH
name:服务器IP
Source files:target/jjdemo.war
Remove prefix:target
Exec command:
#jdk环境 export JAVA_HOME=/usr/java/jdk-11.0.4 export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$PATH #进入sh文件目录 cd /home #执行该sh文件 dos2unix autoDeploy.sh sh autoDeploy.sh
3.5 配置pom.xml文件
进入/root/.jenkins/workspace/jjdemo2 任务文件夹目录:
(1)创建resource文件夹,将一些项目配置资源文件(如.properties、.xml等)统一放到此目录;
(2)创建pom.xml文件,内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- 模型版本。maven2.0必须是这样写,现在是maven2唯一支持的版本 --> <modelVersion>4.0.0</modelVersion> <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.winner.trade,maven会将该项目打成的jar包放本地路径:/com/winner/trade --> <groupId>com.xrh</groupId> <!-- 本项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 --> <artifactId>jjdemo</artifactId> <!-- 本项目目前所处的版本号 --> <version>1.0</version> <!-- 打包的机制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar --> <packaging>war</packaging> <!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} --> <properties> <file.encoding>UTF-8</file.encoding> <java.source.version>1.8</java.source.version> <java.target.version>1.8</java.target.version> <java.home>/usr/java/jdk1.8.0_131</java.home> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <!-- 产生的构件的文件名,默认值是${artifactId}-${version}。 --> <finalName>jjdemo</finalName> <!-- 构建产生的所有文件存放的目录,默认为${basedir}/target,即项目根目录下的target --> <directory>${basedir}/target</directory> <!--项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 --> <sourceDirectory>${basedir}/src</sourceDirectory> <!--被编译过的应用程序class文件存放的目录。 --> <outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory> <!--描述存放资源的目录,该路径相对POM路径--> <resources> <resource> <!--描述存放资源的目录,该路径相对POM路径 --> <directory>resource</directory> <!--包含的模式列表 --> <includes> <include>*.properties</include> <include>*.json</include> <include>*.xml</include> </includes> <!--排除的模式列表 如果<include>与<exclude>划定的范围存在冲突,以<exclude>为准 <excludes> <exclude>jdbc.properties</exclude> </excludes> --> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId>
<!-- https://repo.maven.apache.org/maven2/org/apache/maven/plugins/ 查询可用的版本号 --> <version>3.6.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> <compilerArguments> <!-- <bootclasspath><extdirs>两个标签 如果配置多个数据,mac、linux用冒号(:),而windows用分号(;) windows路径用(\),mac、linux用(/) --> <extdirs>${basedir}/WebRoot/WEB-INF/lib</extdirs> <bootclasspath>${java.home}/jre/lib/rt.jar:${java.home}/jre/lib/jce.jar:${java.home}/jre/lib/servlet-api.jar</bootclasspath> </compilerArguments> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.1</version> <configuration> <webResources> <resource> <directory>${basedir}/WebRoot</directory> <targetPath></targetPath> <!-- 排除jar包,以加快网络传输部署效率; 相关的jar包调整至web服务器tomcat的 /home/tomcat-8.5.46-jjdemo/applib 目录下, 同时修改 /home/tomcat-8.5.46-jjdemo/conf/catalina.properties的common.loader=配置,增加,"${catalina.home}/applib","${catalina.home}/applib/*.jar" --> <excludes> <exclude>/WEB-INF/lib/*.jar</exclude>
<exclude>/page/**</exclude> </excludes> </resource> </webResources> </configuration> </plugin> </plugins> </build> </project>
目录结构,如下所示:
四、配置远程应用服务器
(1)编辑autoDeploy.sh 并上传至/home 目录下,sh内容如下:
#tomcat路径 TOMCAT_HOME=/home/tomcat-8.5.46-jjdemo #查看进程并杀掉进程 ID=`ps -ef | grep "$TOMCAT_HOME" | grep -v "$0" | grep -v "grep" | awk '{print $2}'` echo $ID for id in $ID do kill -9 $id echo "killed $id" done
#删除日志文件
cd $TOMCAT_HOME/logs
rm -rf *
#删除缓存文件
cd $TOMCAT_HOME/work
rm -rf *
#删除旧的war包等 cd $TOMCAT_HOME/webapps rm -rf jjdemo* #拷贝新war包到Tomcat下 cd /home cp jjdemo.war $TOMCAT_HOME/webapps cd /home/tomcat-8.5.46-jjdemo/bin #启动tomcat nohup ./startup.sh
tomcat 部署目录结构:
五、自动构建部署
进入任务界面,点击“立即构建”,顺利的话控制台输出可以看到如下效果:
这样就可以体验最新版本的web应用服务了!
六、注意事项
应用服务器执行sh出现错误信息:
sh autoDeploy.sh] ...
autoDeploy.sh: line 2: $'\r': command not found
autoDeploy.sh: line 4: $'\r': command not found
autoDeploy.sh: line 6: $'\r': command not found
autoDeploy.sh: line 10: syntax error near unexpected token `$'do\r''
autoDeploy.sh: line 10: `do
'
SSH: EXEC: completed after 201 ms
SSH: Disconnecting configuration [47.107.86.152] ...
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [2]]
Build step 'Send build artifacts over SSH' changed build result to UNSTABLE
Finished: UNSTABLE
处理方法:
Linux下有命令dos2unix
你只要输入dos2unix *.sh就可以完成转换工作了
如果命令不存在的话就用如下命令在远程web服务器上安装:
yum install dos2unix -y
=====================================================================================
部署到windows server 服务器:
1、在windows 服务器安装 openSSH windows版
下载包后解压至 C:\Program Files\OpenSSH 不要放在别的路径下
cmd到openSSH路径下,执行 powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 安装sshd服务
开放TCP 22 端口,并在系统服务面版中启动服务即可。
2、配置Jenkins构建后操作
3、windows 服务器上的autoDeploy.bat内容:
@echo off >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' NEQ '0' (goto UACPrompt) else ( goto gotAdmin ) :UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" exit /B :gotAdmin if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) pushd "%CD%" CD /D "%~dp0" ::cd /d "C:\Tomcat 8.5_xrh_api_test\bin" cd /d "C:\Tomcat 8.5_xrh_api_test\bin" title Tomcat重新启动脚本 net stop xrh_api_test ping -n 6 127.1 >nul wmic process where name="java.exe" get processid,commandline |findstr /i "xrh_api_test" ># setlocal enabledelayedexpansion for /f "delims=*" %%i in (#) do ( set var=%%i set var=!var:start =#! for /f "tokens=2 delims=#" %%a in ("!var!") do ( set tomcatpid=%%a ) ) del # >nul if defined tomcatpid taskkill /pid !tomcatpid! echo 删除tomcat中的旧文件 rd /q /s "C:\Tomcat 8.5_xrh_api_test\logs\" >nul md "C:\Tomcat 8.5_xrh_api_test\logs\" rd /q /s "C:\Tomcat 8.5_xrh_api_test\work\" >nul md "C:\Tomcat 8.5_xrh_api_test\work\" rd /q /s "C:\Tomcat 8.5_xrh_api_test\webapps\" >nul md "C:\Tomcat 8.5_xrh_api_test\webapps\" if errorlevel 0 ( echo 删除完成。 ) else ( echo 删除失败了! pause exit ) echo 拷贝新war包到Tomcat下 xcopy "D:\autodeploy\ROOT.war" "C:\Tomcat 8.5_xrh_api_test\webapps\" /e /y >nul if errorlevel 0 ( echo 拷贝完成。 ) else ( echo 拷贝失败了! pause exit ) ping -n 3 127.1 >nul net start xrh_api_test exit
结束
------ create by 李小家 2020-09-11