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 ) 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上)的更多相关文章
- 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 ...
随机推荐
- PrintWriter out = response.getWriter();乱码解决
resopnse request的乱码问题 今天在改项目时,发现这个简单又容易忽视在问题.说起这个问题,比较简单,但也比较容易忽视.下面就具体讲讲这个问什么会出现乱码问题. request乱码指的 ...
- CSS布局:元素水平垂直居中
CSS布局:元素水平垂直居中 本文将依次介绍在不同条件下实现水平垂直居中的多种方法 水平垂直居中是在写网页时经常会用到的需求,在上两篇博客中,分别介绍了水平居中和垂直居中的方法.本文的水平垂直居中就是 ...
- Leetcode之深度优先搜索(DFS)专题-547. 朋友圈(Friend Circles)
Leetcode之深度优先搜索(DFS)专题-547. 朋友圈(Friend Circles) 深度优先搜索的解题详细介绍,点击 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递 ...
- 【故障公告】阿里云 RDS 数据库服务器 CPU 100% 造成全站故障
非常非常抱歉,今晚 19:34 ~ 21:16 园子所使用的阿里云 RDS 数据库服务器突然出现 CPU 100% 问题,造成全站无法正常访问,由此您带来了很大的麻烦,请您谅解. 故障经过是这样的.1 ...
- HDU-10240Max Sum Plus Plus+动态规划+滚动数组
Max Sum Plus Plus 题意:题意理解了老半天,这里是说在给定数列中,取m组子数列,不能有重复,使得这些子序列的和最大: 就比如m=2时候,1 /2/-4/5/6.可以不用拿-4的意思: ...
- codeforce#483div2D-XOR-pyramid+DP
题意:求给定区间中最大的连续异或和: 思路:DP的思想,先dp求出每个区间的异或和,再dp更新成当前这个dp[i][j]和dp[i-1][j].dp[i-1][j+1]中的最大值: 这样可以保证是同一 ...
- Codeforces Round #483 (Div. 2) B. Minesweeper
题目地址:http://codeforces.com/contest/984/problem/B 题目大意:扫雷游戏,给你一个n*m的地图,如果有炸弹,旁边的八个位置都会+1,问这幅图是不是正确的. ...
- codeforces 755D. PolandBall and Polygon(线段树+思维)
题目链接:http://codeforces.com/contest/755/problem/D 题意:一个n边形,从1号点开始,每次走到x+k的位置如果x+k>n则到x+k-n的位置,问每次留 ...
- CodeForces 760 C. Pavel and barbecue(dfs+思维)
题目链接:http://codeforces.com/contest/760/problem/C 题意:一共有N个烤炉,有N个烤串,一开始正面朝上放在N个位子上.一秒之后,在位子i的串串会移动到pi位 ...
- 为什么你应该学习Go语言?
终于等到你!Go语言--让你用写Python代码的开发效率编写C语言代码. 为什么互联网世界需要Go语言 世界上已经有太多太多的编程语言了,为什么又出来一个Go语言? 硬件限制:摩尔定律已然失效 摩尔 ...