生命要用于尝试,给自己一个机会,没有试过怎么知道不行.

一:安装所需软件

jdk     Jenkins     Maven    svn

Jenkins 安装maven integration plugin   subversion plugin   Deploy to container

如果插件安装失败,请参考此篇博文 https://www.cnblogs.com/sxdcgaq8080/p/10489326.html

二:配置Jenkins

在Jenkins是全局工具配置中

1.配置maven的setting文件

2.配置jdk

3.配置maven

三:创建项目

第一步:创建maven项目

如果没有构建一个maven项目选项,需要安装插件: Maven Integration plugin

如果插件安装失败,请参考此篇博文 https://www.cnblogs.com/sxdcgaq8080/p/10489326.html

第二步:项目详细配置:general

第三步:源码管理

主要目的是从远程仓库拉取代码

第四步:构建触发器

Jenkins提供了6种构建触发器,分别是:

  1. build whenever a snapshot dependency is built ,当job依赖的快照版本被build时,执行本job;
  2. 触发远程构建 (例如,使用脚本);
  3. build after other projects are built 当本job依赖的job被build时,执行本job;
  4. build periodically 隔一段时间build一次,不管版本库代码是否发生变化,通常不会采用此种方式;
  5. GitHub hook trigger for GITScm polling 通过Github钩子触发;
  6. poll scm 隔一段时间比较一次源代码,如果发生变更,那么久build。否则,不进行build,通常采用这种方式。

第五步:增加构建步骤

如果项目不是父子多模块工程,则不需要这一步

项目有多个module,且都是父子pom,所以我们构建的时候直接选择 构建最顶层maven目标,这里需要注意的是,因为我们的项目有多个,所以需要将每个仓库目录下的pom打包一次,这就需要指定特定目录的pom,jenkins也可以实现这一功能,在高级选项中可以指定pom的位置

 

第六步:build

Root POM: pom.xml文件的路径是相对于工作空间的,如果没有下面的自定义工作空间就是相对于Jenkins默认的工作空间,反之是相对于自定义的工作空间

Goals and options:执行什么操作 

compile

clean    删除target/

test       test case junit/testNG

package 打包

install    把项目install到local repo

deploy    发本地jar发布到remot         

选择自定义空间,点击高级,输入目录,从svn检出的代码就会放在这个目录中

编译好的calss文件和打好的包会放在pom.xml文件同级目录target文件夹下

完成上述步骤就能对svn的项目进行编译,并且打包成war包.


接下来如何将生成的war包或class文件自动复制到Tomcat中(Tomcat会自动将war包解压成项目)

第七步:远程发布

方式①:Deploy war/ear to a container

配置tomcat(config/tomcat-user.xml) 配置一个manager用户

<role rolename="admin-gui"/>

<role rolename="manager-gui"/>

<role rolename="manager-script"/>

<role rolename="manager-status"/>

<role rolename="tomcat"/>

<role rolename="role1"/>

 <user password="admin" roles="admin-gui,manager-gui,manager-script,manager-status,tomcat,role1" username="admin"/>

修改context.xml(webapps\manager\META-INF\context.xml) 注释掉访问来源受限

注释掉server.xml中的Context标签

远程发布Tomcat ,先安装Deploy to container plugin   

方式②:Execute Windows batch command

jenkins和项目部署在同一台服务器上可以采用这种方式,且系统为Windows.

自动部署的思路:设置全局变量(项目名称,构建新包路径,配置文件路径,Tomcat路径等)->关闭Tomcat->删除Tomcat中旧项目->拷贝新文件到Tomcat应用目录->替换配置文件->启动Tomcat,

脚本文件:此脚本文件只做参考

@echo off

rem 设置全局变量
set project_name=jenkinstest
set service_name=EIP_JENKINSTEST

set package_path=F:\Jenkins\workspace
set config_path=F:\Jenkins\projectConfig
set project_base_path=E:

set startup_command=%project_base_path%\%project_name%\tomcat\bin\startup.bat
set shutdown_command=%project_base_path%\%project_name%\tomcat\bin\shutdown.bat

rem 改变进程ID,保证执行完毕后jenkins不会杀掉所有进程
set BUILD_ID=dontKillMe

rem 关闭tomcat
cd /d %project_base_path%\%project_name%\tomcat\bin
call shutdown.bat

rem 暂停10s
ping -n 5 127.0.0.1

rem 备份旧版本并且删除旧版本
if exist %project_base_path%\%project_name%\eip goto exsit_back_file
if exist %project_base_path%\%project_name%\eip_back goto remove_backfile_no_copy
goto copy_file

:exsit_back_file
if exist %project_base_path%\%project_name%\eip_back goto remove_backfile
echo on 没有back文件
md %project_base_path%\%project_name%\eip_back
xcopy %project_base_path%\%project_name%\eip %project_base_path%\%project_name%\eip_back /s/e
rd /s/q %project_base_path%\%project_name%\eip
goto copy_file

:remove_backfile
rd /s/q %project_base_path%\%project_name%\eip_back
md %project_base_path%\%project_name%\eip_back
xcopy %project_base_path%\%project_name%\eip %project_base_path%\%project_name%\eip_back /s/e
rd /s/q %project_base_path%\%project_name%\eip
goto copy_file

:remove_backfile_no_copy
rd /s/q %project_base_path%\%project_name%\eip_back
goto copy_file

:copy_file
rem 复制编译文件到项目文件夹
md %project_base_path%\%project_name%\eip
rem 前端文件
xcopy %package_path%\eip-web\target\eip-web %project_base_path%\%project_name%\eip /s/e/y

rem 复制module(eip-application) class文件
xcopy %package_path%\eip-application\target\classes %project_base_path%\%project_name%\eip\WEB-INF\classes /s/e/y

rem 复制module(eip-bpm) class文件
xcopy %package_path%\eip-bpm\target\classes %project_base_path%\%project_name%\eip\WEB-INF\classes /s/e/y

rem 复制module(eip-business) class文件
xcopy %package_path%\eip-business\target\classes %project_base_path%\%project_name%\eip\WEB-INF\classes /s/e/y

rem 复制module(eip-common) class文件
xcopy %package_path%\eip-common\target\classes %project_base_path%\%project_name%\eip\WEB-INF\classes /s/e/y

rem 复制module(eip-core) class文件
xcopy %package_path%\eip-core\target\classes %project_base_path%\%project_name%\eip\WEB-INF\classes /s/e/y

rem 复制module(eip-project) class文件
xcopy %package_path%\eip-project\target\classes %project_base_path%\%project_name%\eip\WEB-INF\classes /s/e/y

rem 复制module(eip-system) class文件
xcopy %package_path%\eip-system\target\classes %project_base_path%\%project_name%\eip\WEB-INF\classes /s/e/y

rem 复制配置文件
xcopy %config_path%\%project_name%\eip %project_base_path%\%project_name%\eip /s/e/y

rem 启动tomcat
cd /d %project_base_path%\%project_name%\tomcat\bin
call startup.bat

rem 关闭窗口
:end
exit

根据需求可以采用上面其中一种方式进行远程发布

Q&A:

1.采用第二种方式,脚本启动Tomcat失败

Jenkins执行命令会杀掉进程及其衍生进程,需要在脚本中添加一行命令

rem 改变进程ID,保证执行完毕后jenkins不会杀掉所有进程

set BUILD_ID=dontKillMe

2.采用第二种方式:windows下启动tomcat没有cmd窗口

jenkins启动tomcat是直接在后台启动的,没有cmd的黑窗口,如果想要窗口的话需要自己去配置一个jenkins节点.

可以参考此篇博文:https://blog.csdn.net/liu_gang_/article/details/107837710

第八步:点击构建

Q&A:

1.远程部署成功,启动失败

原因:程序包本身有问题,比如数据库的连接等

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐