zoukankan      html  css  js  c++  java
  • 记录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包的任务

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

     

  • 相关阅读:
    1、1、2、3、5、8、13、21、34...... 求第X位数是多少,2种实现方式
    数据库设计的三大范式
    Parse与TryParse的区别
    常用Lambda范例
    【转载】说说JSON和JSONP,
    Lambda表达式
    Winform部署时强名称签名mshtml.dll无效的解决方案
    .net面试问答(大汇总)
    Asp.net MVC3 一语道破
    在asp.net中使用 log4net
  • 原文地址:https://www.cnblogs.com/Nicloe2333/p/11855163.html
Copyright © 2011-2022 走看看