关于构建结束后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 ) else (exit )
pause>nul
::在执行bat脚本的时候在命令后加上参数也就是端口即可

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

等待10秒
ping /n 127.1 >nul

部署java后端项目的时候可能会遇到一个问题,项目引用的jar包在maven中央仓库找不到,解决方法可以参考我另一篇随笔:

https://www.cnblogs.com/yy-cola/p/9664598.html

jenkins自动化部署项目7 -- 新建job(将服务代码部署在windows上)的更多相关文章

  1. jenkins自动化部署项目8 -- 新建job(服务代码部署在linux上)

    jenkins(windows) ----> 应用服务器(linux): 1.后台java服务: 与部署在windows上不同的是,这里我选择了在[构建后操作]中使用ssh向远程linux服务器 ...

  2. 1.tomcat部署项目的几种方式和weblogic部署方式及一点通讯

      第一种部署方式: 直接使用myeclipse 找到server服务 添加要部署的项目Add Deployment ,然后选中某个项目,首选Exploded Archive(development ...

  3. 远程部署项目,修改catalina.bat文件 完美解决在代理服务器上HttpURLConnection 调接口超时的问题

    远程给客户部署项目,运行时程序调外部接口时总是出不去,经过不懈努力,后来发现客户那边的网络走的是代理,于是在代码中加下面代码: //设置代理 System.setProperty("http ...

  4. 【转】jenkins自动化部署项目7 -- 新建job(将服务代码部署在windows上)

    关于构建结束后jenkins会kill所有衍生子进程的官方解决方案:https://wiki.jenkins.io/display/JENKINS/Spawning+processes+from+bu ...

  5. 用Jenkins集成ios项目设置多scheme,同一代码自动输出多个环境包 实现便捷切换API环境

    Jenkins 安装使用参考我的博客http://www.cnblogs.com/zhujin/p/9064820.html Xcode 配置:说明 一个schema 对应一套环境(如生产,测试),一 ...

  6. Azure 项目构建 - 用 Azure 认知服务在微信公众号上搭建智能会务系统

    通过完整流程详细介绍了如何在Azure平台上快速搭建基于微信公众号的智慧云会务管理系统. 此系列的全部课程 https://school.azure.cn/curriculums/11 立即访问htt ...

  7. Jenkins安装部署项目

    Jenkins安装部署项目 配置JDK git maven 部署到服务器 一.新建任务 二.配置jenkins 三.添加构建信息 四.应用.保存 五.踩坑填坑记录 5.1没有jar包的情况 5.2无法 ...

  8. Docker安装Jenkins打包Maven项目为Docker镜像并运行【保姆级图文教学】

    一.前言 Jenkins作为CI.CD的先驱者,虽然现在的风头没有Gitlab强了,但是还是老当益壮,很多中小公司还是使用比较广泛的.最近小编经历了一次Jenkins发包,感觉还不错,所以自己学习了一 ...

  9. Maven项目搭建(三):Maven直接部署项目

    上一章给大家讲解了如何使用Maven搭建SSM框架项目.   这次给大家介绍一下怎么使用Maven直接部署项目.   Maven直接部署项目  1.新建系统变量CATALINA_HOME,值为:Tom ...

随机推荐

  1. .NET Core 小程序开发零基础系列(1)——开发者启用并牵手成功

      最近几个月本人与团队一直与小程序打交道,对小程序的实战开发算比较熟悉,也因一些朋友经常问我各种小程序问题,无不能一一回答,想了很久,决定还是空余时间来写写文章吧,偶尔发现一个人安静的时候写文章特爽 ...

  2. 学会了这些技术,你离BAT大厂不远了

    每一个程序员都有一个梦想,梦想着能够进入阿里.腾讯.字节跳动.百度等一线互联网公司,由于身边的环境等原因,不知道 BAT 等一线互联网公司使用哪些技术?或者该如何去学习这些技术?或者我该去哪些获取这些 ...

  3. think in java 泛型

    曾几何时,我们对java的泛型充满了好奇,但是感觉用起来有很爽,但又会在spring类型泛型的地方,遇到问题. 我第一次的遇到泛型是在使用别人的BaseDao的时候,这是一个java封装hiberna ...

  4. 设计模式(C#)——02工厂模式

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321       在简单工厂模式中讲到简单工厂模式的缺点:难以扩展,一旦添加新运算就必须修改简单工厂方法.       工厂方法模式: ...

  5. ES5新增数组的一些方法

    1.Array.indexof(value1,value2) Tip:用于返回某个数组或字符串中规定字符或者字符串的位置. (1)当Array.indexof(value1);里面只有一个值的时候,表 ...

  6. P2805 [NOI2009]植物大战僵尸 + 最大权闭合子图 X 拓扑排序

    传送门:https://www.luogu.org/problemnew/show/P2805 题意 有一个n * m的地图,你可以操纵僵尸从地图的右边向左边走,走的一些地方是有能量值的,有些地方会被 ...

  7. 2017福建省赛 L Tic-Tac-Toe 模拟

    Kim likes to play Tic-Tac-Toe. Given a current state, and now Kim is going to take his next move. Pl ...

  8. poj 1177 Picture(线段树周长并)

    题目链接:http://poj.org/problem?id=1177 题意:给你n个矩形问你重叠后外边缘总共多长. 周长并与面积并很像只不过是处理的时候是   增加的周长=abs(上一次的线段的长度 ...

  9. MAC下安装REDIS和REDIS可视化工具RDM并连接REDIS

    实验环境:一台mac V:10.13.6 一.安装redis brew install redis 二.安装RDM 直接下载安装rdm dmg文件 链接: https://pan.baidu.com/ ...

  10. win、mac 设置 php上传文件大小限制

    修改php.ini win平台WAMP修改 步骤 左键点击wamp 选择php 在弹出的窗口中选择php.ini 在打开的文件中进行修改(修改步骤如下) 修改完毕,保存并重启wamp mac  MAM ...