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

posted @ 2020-09-11 18:17  李小加  阅读(848)  评论(0编辑  收藏  举报