记录windows sever配置jenkins远程发布

概要

本文配置基于 jenkins2.103 + svn + maven

远程发布基于 SSH

安装 jenkins 和 远程发布的机器都为windows sever  且在同一局域网(不在同一个局域网的没试过,有可能可以/不可以,检测下能不能访问ssh先就知道了)

1.下载安装

jenkins2.103 安装工具包CSDN下载地址:

SSH安装调试工具包  //download.csdn.net/download/qq_35532963/11983008

Jenkins2.103安装包  //download.csdn.net/download/qq_35532963/11983016

双击install  修改/不修改 安装路径—>完成安装

自动跳转到如下页面

 

输入密码,点“继续”

 

等待插件安装完毕

 

 

 2.全局配置

2.1 全局安全配置

登陆jenkins  http://localhost:8080

左侧主菜单

系统管理->全局工具配置

填写jdk的安装路径(环境变量中JAVA_HOME的值)

 

 填写maven的安装路径(环境变量中MAVEN_HOME的值)

3 新建、配置任务

为自己的任务起名称(一般都是项目名称),选择任务类型,确认。

 

为任务配置各项参数,进入到任务配置界面,跳转到配置页面,如下图

    

3.1 源码管理

源码管理工具选的Subversion

填写SVN代码地址

点击“Add”添加有这个地址的访问权限的用户名和密码(或者在用户列表菜单中添加有访问代码权限的用户(用户名/密码为svn用户名/密码))

添加完成后点击小三角选择刚刚添加的用户名和密码

其他项默认

3.2 构建触发器

3.3 构建环境

可不做选择

3.4 Pre Steps

构建之前的预处理,这里配置成构建之前关闭tomcat

说明:因为配置了构建war包后自动发布,自动启动tomcat,如果不关闭tomcat,开启的tomcat导致上一个解压的war包无法删除,二次构建后发布war包时会报错

 

将上图批处理文件放在目标机器(你要发布war包的机器)上图配置中的路径下(路径可以自己定)

@echo off

setlocal enabledelayedexpansion
for /f "delims=  tokens=1" %%i in ('netstat -aon ^| findstr "8089"') do (
set a=%%i
goto haha
)
:haha
taskkill /f /pid "!a!"

如果目标服务器没有tomcat在开启状态,报如下错误,但是可以看到后续构建动作仍在进行,所以不用管这个报错

如果目标服务器有正在开启状态的tomcat,预处理脚本会先kill掉此PID,然后再开始构建

疑问:为什么不直接调用shutdown.bat关闭tomcat?

经过很多次心酸的试验,通过SSH调用shutdown.bat只能关闭手动开启(手动执行startup.bat)的应用进程,不能关闭通过SSH调用startup.bat启动的后台进程(配置时设置了构建后自动执行startup.bat)。虽然可以使tomcat服务不能访问,但是不能kill后台进程。

PS:预处理脚本里是通过端口找到正在运行的tomcat,我配的是8089,这个参数需要跟自己tomcat-sever.xml里面配置的端口保持一致

3.5 Build、Post Steps

填写存放pom文件的路径(此路径与刚才填写的SVN路径为相对路径),如果只填pom.xml,可能会构建失败。所以要填写完整的路径。

Post Steps最好选第一个,构建失败不运行

3.6 构建设置

是一个邮件通知功能,先不设置

3.7 构建后操作(自动部署到本地tomcat)

使用插件发布项目,需要使用的插件是(Deploy to container),发布到本地tomcat中,要用到tomcat的用户名和密码,tomcat用户可以自己在tomcat中的conf/tomcat-users.xml文件中配置,加上以下几行,用户名和密码可以自己设置

如果配完上面的能deploy成功可不修改下面这项

如果报权限不足还需要修改如下内容  加上  |d+.d+.d+.d+

或者改成这样

设置好tomcat就可以去任务里面配置了

点击“Add Container”添加tomcat容器

点击“Add”按钮添加刚才配置的Tomcat的用户名和密码

点击小三角选择,设置完如图二

tomcat想配几个配几个,但是要选择对自己的tomcat的版本

设置完以上信息点击保存,现在可以开始构建war包了

构建完成后,war包会出现在tomcat-webapps文件夹下和jenkins安装目录下(..jenkins/workspace/...),输入访问地址可访问系统

3.8 构建后操作(自动部署到远程tomcat)

安装插件Publish over SSH

 

windows server安装测试SSH 服务

http://blog.sina.com.cn/s/blog_4a0a8b5d01015ao5.html

用上述工具测试通SSH后就可以去jenkins里面配置了

jenkins配置SSH,先去往全局配置界面

拉到最下面找到Publish over SSH

我采用的是密码方式访问SSH服务,windows系统远程路径前一点要加  /cygdrive,不然访问不到(还有一种是通过认证的方式,感兴趣的小伙伴可以自行研究,不感兴趣的同学可以不研究)

配置完可点击 Test Configuration 测试下,出现SUCCESS表示SSH服务可用

回到任务配置页面

 

Source files—构建后war包的存放目录

即F: /tools/Jenkins/workspace/xRPl/EE/target

Remove prefix—上述目录需要去的前缀

这里因为jenkins war包构建后的目录是

F: /tools/Jenkins/workspace/xRPl/EE/target,Remove prefix 填EE/target/

Remote directoty—发布的目录(全局配置的tomcat目录的相对目录,因为全局配置里已经配到了D:/apache-tomcat-8.5.41/,所以只写webapps即可)

Exec command—发布完执行的命令

这里配置的是war包传输过来之后,自动启动tomcat服务的命令

配置完上述步骤后,就可以开始构建了

完成之后war包拷贝到目标服务器webapps下,tomcat服务已经开启(后台运行,没有启动界面),输入访问地址可直接访问系统

3.9 构建

可在下图两处开始构建

查看控制台输出信息,SUCCESS表示构建成功。

打好的war包在之前设置好的target路径下,目标服务器tomcat-webapps下面也有

构建状态

≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]-----我是分割线-----≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]

Jenkins定时构建

1. 定时构建语法: 

* * * * * 1 2

第一个*表示分钟,取值0~59

第二个*表示小时,取值0~23

第三个*表示一个月的第几天,取值1~31

第四个*表示第几月,取值1~12

第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日

2. 常用定时构建举例:    

由于项目的代码一般存在放SVN中,而一个SVN往往是有多个项目组在提交代码,而每个项目组又有多人组成,其中每个人也都在对自己的那块代码不停地在进行维护,所以说对于一个公司而言,SVN的提交记录往往是很频繁的,正因为如此,Jenkins在执行自动化构建时往往是以天为单位来执行的,下面举的例子就是在一天中常用的定时构建示例。    

每隔5分钟构建一次  H/5 * * * *   

每两小时构建一次  H H/2 * * *   

每天中午下班前定时构建一次  0 12 * * *    

每天下午下班前定时构建一次  0 18 * * *

3. 定时构建设置    

本文是接前面章节中的构建项目的基础上写的,如果不清楚,请看前面的章节  在Jenkins中新建项目(Job)   

在Jenkins的主页面中,点击构建的项目

在【配置】页面中,下拉到【构建触发器】,在这里有两个可选选项,分别是“Build periodically”和“Poll SCM”,它们的特点如下:

  • Build periodically

  无论SVN中数据有无变化,均执行定时化的构建任务

  • Poll SCM

  定时轮询SVN,查看SVN中是否有数据变化,如果有变化,则执行构建任务

 

* * * * *

每个部分代表的含义以及取值范围   

分钟,取值范围(0~59):若其他值不做设定,则表示每个设定的分钟都会构建 如:5 * * * * ,表示每个小时的第5分钟都会构建一次   

小时,取值范围(0~23):若其他值不做设定,则表示每个设定小时的每分钟都会构建 如:* 5 * * * ,表示在每天5点的时候,一小时内每一分钟都会构建一次   

日期,取值范围(1~31):若其他值不做设定,则表示每个月的那一天每分钟都会构建一次 如:* * 5 * *,表示在每个月5号的时候,0点开始每分钟构建一次    月份,取值范围(1~12):若其他值不做设定,则表示每年的那个月每分钟都会构建一次 如:* * * 5 *,表示在每年的5月份,1号0点开始每分钟构建一次   

星期,取值范围(0 ~ 7):若其他值不做设定,则表示每周的那一天几每分钟都会构建一次 如:* * * * 5,表示每周五0点开始每分钟构建一次

每一部分的表达方式   

*:表示任意合理的数  a-b:表示一个范围,比如:5-8 * * * * OR * 5-8 * * *。具体表达的意思参考上面的含义 

a-b/c OR */c:表示一个范围内每个c构建一次,比如:5-10/2 * * * * OR * */3 * * * 具体表达的意思参考上面的含义 

a,b,c:表示为a、b、c时构建一次,比如:7,8,9 * * * * OR * * 13,5 * * 具体表达的意思参考上面的含义

忘记jenkins管理员密码

如果忘记管理员密码了请:

首页到目录里/Users/ucsapp/.jenkins 先备份 config.xml 为 config.xml.bak,

而后打开 config.xml 配置文件,修改“<useSecurity>true</useSecurity>”为“<useSecurity>false</useSecurity>”;

同时把“<authorizationStrategy ...>...</authorizationStrategy>”配置删除。

重启之后我们会发现 Jenkins 已经无需登录了。然后,直接找到“系统管理”的“管理用户”菜单,把管理员的密码改回来!

然后,用之前备份的 config.xml.bak 文件覆盖 config.xml 配置文件。

再次重启 Jenkins,终于发现管理员又可以正常登录了。

≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]-----我是分割线-----≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]

 番外

for /f 的用法

【a.txt的内容】

【第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列】

1 for /f %%i in (a.txt) do echo %%i   //这个会显示a.txt里面的内容,因为/f的作用,会读出a.txt中的内容。
2 for %%i in (a.txt) do echo %%i    //而这个只会显示a.txt这个名字,并不会读取其中的内容。

我们发现for /f会默认以每一行来作为一个元素,但是如果我们还想把每一行再分解更小的内容,该怎么办呢?不用担心,for命令还为我们提供了更详细的参数,使我们将每一行分为更小的元素成为可能。
它们就是:delims和tokens

1 for /f "delims= " %%i in (a.txt) do echo %%i

显示的结果是:
第1行第1列
第2行第1列
第3行第1列

for /f "tokens=2 delims= " %%i in (a.txt) do echo %%i

执行结果:
第1行第2列
第2行第2列
第3行第2列

所以我配的远程kill  tomcat进程的脚本里的 "delims=  tokens=" 应该可以删掉(我没试,感兴趣的小伙伴可以去调试一下)

那为什么我的脚本里有呢?

故事发生在很久很久以前。。。

当时查这个关闭tomcat的问题查急了眼,刚开始还调用的自带的shutdown.bat,任务管理器里面的进程就是杀不掉,直到一个很神奇的举动的发生,局面才有所缓解

这个划时代意义的举动就是:点到任务管理器的详细信息这一栏,之前很傻,一直对着进程看

纳尼!?这里怎么有两个java.exe,很可疑鸭!

经过几次试验,确认了这个pid非1344的java.exe 是导致进程杀不掉的罪魁祸首

手动结束这个任务后,进程一栏的tomcat进程也就自动消失了

那么问题来了

我要怎么知道正在运行的tomcat是哪个pid呢?

emmm 

最后就查到了这个脚本,直接ctrl c ,ctrl v 

还真能确认pid 并kill !后面还要配别的,也就没细究脚本

≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]-----我是分割线-----≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]≡•ิ.•≡[。。]

此次配置jenkins远程发布总结的小技巧

官方文档最为致命

遇到问题可能一直百一直百,百不着,所有人都去百度,那第一次配这个的人该怎么知道怎么用啊 ?

就是官方文档

配远程脚本的时候,我只想要脚本执行,不想要构建war包这个动作

每试一次都要构建一次,很费时间,而且点了构建之后,看着那个闪动的进度条,心跳很是加速,呼吸很是急促啊,特别不利于身体健康

所以就想单独建一个测试脚本的任务

那一直百,又百不到别人的经验,这时候,又一个具有划时代意义的举动出现了

让我们来点击一下这个可爱的小问号

出现了!!!你没有看错!!

反正之前填参数都是百别人的经验,哪会看这个啊,抄别人的不行就试着改改看,这个问题的配置改了好多次,这里的每个参数改了很多次,都不能让脚本运行(其实当时脚本运行了,只是shutdown.bat不能远程关闭tomcat后台运行的进程,所以就不能确定是配置的问题还是脚本的问题)

反正现在又百不到,就到处点点看看

鉴于英语水平还行,重点就是最后两句嘛

如果你想在文件传输(搬运构建好的包到目标服务器嘛)之前执行脚本,就将执行命令设置移到文件传输设置之前

这下就很确定了

如果只想执行命令,前面的那几个都不用填,只填Exec commond这一项就好了(反正之前一直在试各种排列组合试这四项怎么填,我也很无奈呀。最搞笑的是百到别人的配置cmd 后面跟了个/c,又看了人家后面路径写的C盘,还自以为是地把/c 改成了/d!!??我自己的路径是D嘛!哈哈哈  好搞笑一女的。现在看看,感觉是没有常识啊,cmd命令需要学习https://blog.csdn.net/icanlove/article/details/37567253

这个脚本的调用方式确定了之后,后面才确认脚本不是没调用,是调用了没起作用

反正就是一步一步,化解问题为另外一个问题,解决问题,达到目的

 可能你跟着我的配置方法来配,并不能出现跟我一样的结果,不会遇到同样问题,反正就是根据现象提炼问题,到处参考嘛,试着试着就好了

 第二个小技巧就是单独新建一个调试脚本的任务,这样就不用每次调试脚本都花时间构建一次了,看图,节省不少时间,最下面的是构建war包的任务

只需要配 构建 这一项就好了。需要注意的是选构建任务的类型时,选的是构建一个自由风格的项目

 

原文地址:https://www.cnblogs.com/Nicloe2333/p/11855163.html