【转】jenkins自动化部署项目7 -- 新建job(将服务代码部署在windows上)
关于构建结束后jenkins会kill所有衍生子进程的官方解决方案:https://wiki.jenkins.io/display/JENKINS/Spawning+processes+from+build
jenkins(windows)----------->应用服务(windows):2个服务部署在一台windows机器上
公司项目是前后端分离的。web前端+java后台服务,因此项目分为两类
1.前端使用tomacat启动服务:只有一些静态文件,因此新建项目的时候直接选择【构建一个自由风格的软件项目】
<1>项目名称根据需要填写,git源码配置如图,我点击add-jenkins后选择的是用户名和密码的方式去下载代码(kind处选择username and password,然后填上用户名和密码即可)

<2>构建:先关掉tomcat,再重启tomcat
ps:此处遇到的坑是,构建完成之后tomcat会随着构建结束被jenkins杀掉进程,为了解决这个问题,需要做下图的设置
另外,我在命令行里没有将jenkins下载的代码复制到tomcat的webapps目录下,是因为我在tomcat的配置文件里加了一行,server.xml
<Context path="" docBase="E:\Jenkins\workspace\sr_center\webapp" />
这里的命令可以根据需要做调整,只要注意以上标蓝的一点即可(sr_utils.bat脚本内容见下面java项目构建步骤)


2.后端通过java -jar命令行的方式启动服务
<1>新建的时候选择构建一个MAVEN项目(需要强调的是项目的pom.xml文件要能正常使用,我们的项目一开始是用eclipse启动的,后面更改启动服务方式时遇到一些问题)
源码管理如上面前端,构建触发器看业务需要自由选择,
<2>build:使用默认的pom.xml即可,不需要更改
(如果项目使用的一些jar包在maven中央仓库找不到。或者测试环境无法访问外网,无法在线下载一些jar包,有2点要注意:1.Goals and options处可以配置本地仓库路径;2.要提前手工下载安装一些jar包到本地maven仓库。具体操作方法见:https://www.cnblogs.com/yy-cola/p/9664598.html)

下图步骤是:杀掉要正在运行的此项目进程 ------ 删掉项目jar包(我特意新建了一个目录存放jar包,在此启动服务) ------ 将新下载打包的jar包复制到存放项目的目录 ------以后台启动的方式启动服务
杀进程的sr_utils.bat脚本是我自己写了之后放在jenkins目录下使用的:通过项目端口找到项目进程,找到则杀掉进程,找不到则忽略。脚本内容如下:

::demo
@echo off
::延迟环境变量扩展
setlocal enabledelayedexpansion
for /f "delims= tokens=1" %%i in ('netstat -aon ^| findstr %1') do (
set a=%%i)
::判断服务是否已经启动,如果启动则杀掉进程
if defined a (taskkill /F /pid "!a:~71,5!") else (echo Service does not exist)
::等待你按任意键结束
pause>nul
::执行时后面带上端口即可


ps:这里需要注意的是,如果将所有命令都写在一个步骤里,执行完一个bat脚本之后,后面的命令将不会被执行,因此这个地方我分了两步。
问题:
最近在使用jenkins部署服务过程中遇到一个问题,那就是通过start javaw -jar 以后台启动的方式启动服务,如果服务没有成功启动,这个时候jenkins还是显示构建成功,因为对于jenkins来说这个命令本身是成功执行完成了的,jenkins不会继续判断服务是否真的启动成功构建就结束了。
解决方案:
jenkins认为非零返回就是job失败
在启动服务之后新增一步检查服务是否真的成功启动的步骤,即通过端口查找该服务的进程,如果找到了在返回给jenkins 0表示服务正常启动,如果没找到该服务的进程,则返回给jenkins 1.具体的bat脚本如下:

@echo off
setlocal enabledelayedexpansion
for /f "delims= tokens=1" %%i in ('netstat -aon ^| findstr %1') do (
set a=%%i
goto js
)
:js
::判断服务是否已经启动,如果启动则返回给jenkins信号0
if defined a (exit 0) else (exit 1)
pause>nul
::在执行bat脚本的时候在命令后加上参数也就是端口即可

另外在启动服务的命令执行之后,需要等待几秒再去判断进程是否存在。windows和linux不一样没有类似sleep这样的命令,查阅资料之后我用这一句实现
等待10秒
ping /n 10 127.1 >nul

部署java后端项目的时候可能会遇到一个问题,项目引用的jar包在maven中央仓库找不到,解决方法可以参考我另一篇随笔:
https://www.cnblogs.com/yy-cola/p/9664598.html
https://www.cnblogs.com/yy-cola/p/9435938.html
【转】jenkins自动化部署项目7 -- 新建job(将服务代码部署在windows上)的更多相关文章
- jenkins自动化部署项目8 -- 新建job(服务代码部署在linux上)
jenkins(windows) ----> 应用服务器(linux): 1.后台java服务: 与部署在windows上不同的是,这里我选择了在[构建后操作]中使用ssh向远程linux服务器 ...
- 1.tomcat部署项目的几种方式和weblogic部署方式及一点通讯
第一种部署方式: 直接使用myeclipse 找到server服务 添加要部署的项目Add Deployment ,然后选中某个项目,首选Exploded Archive(development ...
- 远程部署项目,修改catalina.bat文件 完美解决在代理服务器上HttpURLConnection 调接口超时的问题
远程给客户部署项目,运行时程序调外部接口时总是出不去,经过不懈努力,后来发现客户那边的网络走的是代理,于是在代码中加下面代码: //设置代理 System.setProperty("http ...
- jenkins自动化部署项目7 -- 新建job(将服务代码部署在windows上)
关于构建结束后jenkins会kill所有衍生子进程的官方解决方案:https://wiki.jenkins.io/display/JENKINS/Spawning+processes+from+bu ...
- 用Jenkins集成ios项目设置多scheme,同一代码自动输出多个环境包 实现便捷切换API环境
Jenkins 安装使用参考我的博客http://www.cnblogs.com/zhujin/p/9064820.html Xcode 配置:说明 一个schema 对应一套环境(如生产,测试),一 ...
- Azure 项目构建 - 用 Azure 认知服务在微信公众号上搭建智能会务系统
通过完整流程详细介绍了如何在Azure平台上快速搭建基于微信公众号的智慧云会务管理系统. 此系列的全部课程 https://school.azure.cn/curriculums/11 立即访问htt ...
- Jenkins安装部署项目
Jenkins安装部署项目 配置JDK git maven 部署到服务器 一.新建任务 二.配置jenkins 三.添加构建信息 四.应用.保存 五.踩坑填坑记录 5.1没有jar包的情况 5.2无法 ...
- Docker安装Jenkins打包Maven项目为Docker镜像并运行【保姆级图文教学】
一.前言 Jenkins作为CI.CD的先驱者,虽然现在的风头没有Gitlab强了,但是还是老当益壮,很多中小公司还是使用比较广泛的.最近小编经历了一次Jenkins发包,感觉还不错,所以自己学习了一 ...
- Maven项目搭建(三):Maven直接部署项目
上一章给大家讲解了如何使用Maven搭建SSM框架项目. 这次给大家介绍一下怎么使用Maven直接部署项目. Maven直接部署项目 1.新建系统变量CATALINA_HOME,值为:Tom ...
随机推荐
- 一文搞定scrapy爬取众多知名技术博客文章保存到本地数据库,包含:cnblog、csdn、51cto、itpub、jobbole、oschina等
本文旨在通过爬取一系列博客网站技术文章的实践,介绍一下scrapy这个python语言中强大的整站爬虫框架的使用.各位童鞋可不要用来干坏事哦,这些技术博客平台也是为了让我们大家更方便的交流.学习.提高 ...
- XIV Open Cup named after E.V. Pankratiev. GP of Europe
A. The Motorway 等价于找到最小和最大的$L$满足存在$S$使得$S+(i-1)L\leq a_i\leq S+i\times L$ 即 $S\leq\min((1-i)L+a_i)$ ...
- Python 之map、filter、reduce
MAP 1.Python中的map().filter().reduce() 这三个是应用于序列的内置函数,这个序列包括list.tuple.str. 格式: 1>map(func,swq1[,s ...
- [LeetCode] Convert Binary Search Tree to Sorted Doubly Linked List 将二叉搜索树转为有序双向链表
Convert a BST to a sorted circular doubly-linked list in-place. Think of the left and right pointers ...
- Java课程2019年3月开学测试
一.登录界面 模板的验证方式已经写在了function里面,我们只需要在提交的过程中进行验证. 我们这里需要注意到的是在login文件夹中,有一个randcode的验证码生成文件,打开代码我们可以看到 ...
- Java中的字符串截取(substring)的使用
import java.util.*; public class ZiFu { public static void main(String args[]){ System.out.println(& ...
- bitmap 合并图片
把两张bitmap覆盖合成为一张图 /** * 把两个位图覆盖合成为一个位图,以底层位图的长宽为基准 * @param backBitmap 在底部的位图 * @param frontBitmap 盖 ...
- 课堂动手动脑String
一 public class StringPool { public static void main(String args[]) { String s0="Hello"; St ...
- 解决archlinux下QT程序,以及wineQQ无法输入中文(.xinitrc)
昨天安了i3wm,发现fcitx在很多程序中无法输入中文,nixnote2,还有ss-qt5 查了wiki,明明有在~/.xinitrc中加入 export XMODIFIERS=@im=fcitx ...
- 内置函数-max、min、round、sorted、ord、chr、any、all、dir、eval、exec、map、filter、reduce
http://www.nnzhp.cn/archives/152 1.max,min,round print(max([3,4.563,3,6,2.5])) #取最大值,可循环参数即可,int类型的, ...