热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

jenkins自动化部署项目

jenkins自动化部署项目1--下载安装启动(windows)我的jenkins服务是是部署在windows上的一.下载安装

jenkins自动化部署项目1--下载安装启动(windows)

我的jenkins服务是是部署在windows上的

一.下载安装:

我安装的是当时最新版本的jenkins2.89.4,直接官网下载zip文件,解压之后点击jenkins.msi文件傻瓜式安装(这个msi文件不要删掉,后面如果jenkins遇到一些无法解决的插件安装问题等等,可以试着用它repair,会保留已有的job和配置)

Ps:jenkins是默认开机自启的,但是如果jenkins默认的8080端口被占用服务起不来,则需要更改默认端口。

  1.网上找到的方法是在jenkins目录下执行java -jar jenkins.war --ajp13Port=-1 --httpPort=8082这条命令,我尝试了这种方法但是cmd命令窗口不能关闭,只要关闭服务就会停掉

   针对此种方式可以start javaw -jar jenkins.war --ajp13Port=-1 --httpPort=8082 以后台服务的方式启动jenkins。但是每次重启都要指定端口

  2.(推荐)直接找到jenkins\jenkins.xml文件修改第41行httpPort为8082,此时如果直接使用命令start javaw -jar jenkins.war,会发现启动的jenkins服务还是用的默认端口8080,正确的启动方式是:net start jenkins


jenkins自动化部署项目2 --插件的选择和安装

一.安装插件:

我选择的安装建议的插件,也可以自定义安装自己想要的插件,在不敢保证自己确定要用的插件是完全正确的情况下建议按推荐安装

我理解的jenkins+tomcat完成自动化部署maven项目需要如下插件:Maven Integration(安装此插件可以使用maven),Publish Over SSH(安装此插件可以使用ssh将代码部署到远程服务器上去),Deploy to container(ssh不能登录windows,因此如果项目需要部署在windows上时可以考虑使用这个插件或者ftp的插件),GitHub(此插件可以去git下载代码),SSH plugin(远程执行ssh命令)

 

Gitlab Hook(需要提交代码即可触发项目构建需要安装此插件,并在git服务器用管理员帐户在【设置-webhook】配置jenkins访问地址,由于我们的代码是放在外网git服务器上的,jenkins无法被外网访问,因此不考虑该构建方式)

 

*按照上面所说,后面在【系统管理-插件管理-可选插件】下搜索并安装如下几个插件(其他插件已经被推荐安装):Maven Integration(安装此插件可以新建maven风格的job)   , Publish Over SSH(用来远程部署代码到linux服务器上,ssh不能远程登录到windows上)

 

Ps:1.我两次在不同的机器上安装jenkins第一次进入系统管理,都遇到如下图所示报错,这种情况,我通过运行jenkins.msi,repair之后重新进入就好了

2.有时候安装插件会失败,重新安装几次就好,大部分原因可能是网络问题:

 

 

 


jenkins自动化部署项目3 -- 安装和配置jdk、maven、git

Jenkins提供了自动安装jdk,maven,git的功能,在【系统设置-全局工具配置】里,但是我自动安装没反应,因此我是先手工安装和配置它们的环境变量然后再在【系统设置-全局工具配置】里配置:

1.jdk

 

2.git

 

3.maven


jenkins自动化部署项目4 -- 系统管理-系统设置ssh配置

【系统管理】-【系统设置】

如果应用服务(前端后台)要部署在linux服务器上,我选择的是用ssh

为了jenkins登录远程登录linux服务器可以免密登录,先配置公钥和私钥:

我是在windows上通过git的命令窗口先生成公钥和私钥

1.执行命令ssh-keygen -t rsa -P ''生成公钥和私钥

在jenkins所在服务器上面执行 ssh-keygen -t rsa -P '', -P后面两个单引号表示密码为空

之后会在/.ssh目录下创建两个文件id_rsa(私钥),id_rsa.pub(公钥)

2.接下来继续在jenkins所在windows服务器上通过git命令执行 

ssh-copy-id -i /C/Users/yangyuan/.ssh/id_rsa.pub root@xx.21.21.xxx(注意路径格式,不然会报错),表示将公钥发给远程linux服务器xx.21.21.xxx的~/.ssh目录下

上面命令中root为我要ssh远程登录的linux服务器上的用户名,一开始我没有加上root@,一直提示输入密码,怎样都报错,后来尝试着改了,输入root用户密码就可以了

错误操作:

正确操作:

 

 3.以上2步就配置好了ssh免密登录linux服务器了,接下来只需要在jenkins的【系统管理】-【系统设置】中配置好ssh就行如下图

 

 

4.配置完成后点击测试,成功就证明ok了,后面新建job时就可以在【Post Steps】&【构建后操作】那里选择使用ssh发送文件或者命令了

  

 

ps:关于Remote Directory

此配置的基本目录。

此目录必须存在,不会创建。

发布者只能将文件放在这个目录下面。

 注意,没有任何东西阻止执行程序创建、删除或移动文件,只要用户有权限。

 ps:也尝试过用ssh远程连接windows服务器,但是查阅很多资料都没有成功:https://www.cnblogs.com/chenmingjun/p/8535067.html

先在要连接的远程服务器上安装并启动ssh的服务,如链接的操作,之后再用随笔里的方法去配置公钥和私钥,最后还是失败了,和链接最后一张图一样,一直提示密码错误

也试过直接将注册的公钥authorized_keys放到指定目录下,还是不能正常链接,遂放弃(后来求证了一些同事,都没这么用过,死心)

 


jenkins自动化部署项目5 --STMP服务发送邮件配置

【系统管理】-【系统设置】里

1.系统管理员邮件地址:和后面SMTP配置认证的邮箱要一致,即发件箱   --------切记

 

2.配置SMTP认证的前提是需要在sohu搜狐邮箱开通SMTP/POP3,方法这里就不说了,贴个链接参考下,很简单:https://www.yiyisoft.com/news/457.html

 

 

做完以上操作之后,选择测试配置,成功即可

 


jenkins自动化部署项目6 -- 新建job(将服务代码部署在windows上)

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

jenkins(windows)----------->应用服务(windows):2个服务部署在一台windows机器上 

公司项目是前后端分离的。web前端+java后台服务,因此项目分为两类

1.前端使用tomacat启动服务:只有一些静态文件,因此新建项目的时候直接选择【构建一个自由风格的软件项目】

<1>项目名称根据需要填写&#xff0c;git源码配置如图&#xff0c;我点击add-jenkins后选择的是用户名和密码的方式去下载代码&#xff08;kind处选择username and password&#xff0c;然后填上用户名和密码即可&#xff09;

 

<2>构建&#xff1a;先关掉tomcat&#xff0c;再重启tomcat

ps&#xff1a;此处遇到的坑是&#xff0c;构建完成之后tomcat会随着构建结束被jenkins杀掉进程&#xff0c;为了解决这个问题&#xff0c;需要做下图的设置

另外&#xff0c;我在命令行里没有将jenkins下载的代码复制到tomcat的webapps目录下&#xff0c;是因为我在tomcat的配置文件里加了一行&#xff0c;server.xml

这里的命令可以根据需要做调整&#xff0c;只要注意以上标蓝的一点即可(sr_utils.bat脚本内容见下面java项目构建步骤)

 

 

2.后端通过java -jar命令行的方式启动服务

<1>新建的时候选择构建一个MAVEN项目&#xff08;需要强调的是项目的pom.xml文件要能正常使用&#xff0c;我们的项目一开始是用eclipse启动的&#xff0c;后面更改启动服务方式时遇到一些问题&#xff09;

源码管理如上面前端&#xff0c;构建触发器看业务需要自由选择&#xff0c;

<2>build&#xff1a;使用默认的pom.xml即可&#xff0c;不需要更改

&#xff08;如果项目使用的一些jar包在maven中央仓库找不到。或者测试环境无法访问外网&#xff0c;无法在线下载一些jar包&#xff0c;有2点要注意&#xff1a;1.Goals and options处可以配置本地仓库路径&#xff1b;2.要提前手工下载安装一些jar包到本地maven仓库。具体操作方法见&#xff1a;https://www.cnblogs.com/yy-cola/p/9664598.html&#xff09;

下图步骤是&#xff1a;杀掉要正在运行的此项目进程 ------ 删掉项目jar包&#xff08;我特意新建了一个目录存放jar包&#xff0c;在此启动服务&#xff09; ------ 将新下载打包的jar包复制到存放项目的目录 ------以后台启动的方式启动服务

杀进程的sr_utils.bat脚本是我自己写了之后放在jenkins目录下使用的&#xff1a;通过项目端口找到项目进程&#xff0c;找到则杀掉进程&#xff0c;找不到则忽略。脚本内容如下&#xff1a;

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

 

 

 

 ps:这里需要注意的是&#xff0c;如果将所有命令都写在一个步骤里&#xff0c;执行完一个bat脚本之后&#xff0c;后面的命令将不会被执行&#xff0c;因此这个地方我分了两步。

 

问题&#xff1a;

最近在使用jenkins部署服务过程中遇到一个问题&#xff0c;那就是通过start javaw -jar 以后台启动的方式启动服务&#xff0c;如果服务没有成功启动&#xff0c;这个时候jenkins还是显示构建成功&#xff0c;因为对于jenkins来说这个命令本身是成功执行完成了的&#xff0c;jenkins不会继续判断服务是否真的启动成功构建就结束了。

解决方案&#xff1a;

jenkins认为非零返回就是job失败

在启动服务之后新增一步检查服务是否真的成功启动的步骤&#xff0c;即通过端口查找该服务的进程&#xff0c;如果找到了在返回给jenkins 0表示服务正常启动&#xff0c;如果没找到该服务的进程&#xff0c;则返回给jenkins 1.具体的bat脚本如下&#xff1a;

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

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

等待10秒
ping /n 10 127.1 >nul

 

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

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

 


jenkins自动化部署项目7 -- 新建job&#xff08;服务代码部署在linux上&#xff09;

jenkins&#xff08;windows&#xff09; ----> 应用服务器&#xff08;linux&#xff09;&#xff1a;

1。后台java服务&#xff1a;

与部署在windows上不同的是&#xff0c;这里我选择了在【构建后操作】中使用ssh向远程linux服务器传送jar包和需要执行的命令

 

sh /root/home/scripts/demo.sh 8007
cp -r /home/soft/project/sr_f5_manage/sr_f5_manage-0.0.1-SNAPSHOT.jar /home/soft/jarpackage
#每次构建都会有日志&#xff0c;为了不越来越多&#xff0c;每次运行项目之前会清空下这个文件nohup.out
cp /dev/null nohup.out
cd /home/soft/jarpackage
nohup java -jar sr_f5_manage-0.0.1-SNAPSHOT.jar &
sleep 10
#此处之所以加上sleep 10 是因为一开始虽然构建成功&#xff0c;但是netstat -nlp | grep 8007查看进程发现找不到进程,因为项目启动需要时间&#xff0c;尝试着sleep发现就好了

BUILD_ID&#61;dontKillMe&#xff1a;网上很多人说构建结束&#xff0c;服务进程会被kill&#xff0c;需要加上这个才行。我试了下&#xff0c;不要这个时进程也不会被kill

#这个就是上面的demo.sh脚本&#xff0c;根据项目端口查找进程&#xff0c;然后kill掉
port&#61;$1
if [ "${port}" &#61;&#61; "" ];then
exit 1
fi
#根据端口号查询对应的pid,端口号在执行脚本时做为参数
pid&#61;$(netstat -nlp | grep :$port | awk &#39;{print $7}&#39; | awk -F "/" &#39;{ print $1 }&#39;);#杀掉对应的进程&#xff0c;如果pid不存在&#xff0c;则不执行
if [ -n "$pid" ]; thenkill -9 $pid;
fi

 

ps:这样配置之后,构建还是会有问题&#xff0c;如图。jenkins不会正常结束构建&#xff0c;而是直到超时&#xff1a;

 

这时就需要在【高级】选项那里勾选上Exec in pty,这样就可以正常了。参考地址&#xff1a;  https://blog.csdn.net/u013066244/article/details/52788407

 

 

 

 2.前端&#xff1a;我们前端使用tomcat&#xff0c;和后端没什么不一样&#xff0c;只有配置的脚本不一样。如图&#xff0c;因为比较简单&#xff0c;就不单独贴出来了

图中第一行命令是关掉tomcat服务&#xff0c;如果tomcat本身没有运行则构建会报错&#xff0c;因此需要先判断下tomocat服务是否正在运行&#xff0c;我直接用上面的demo.sh脚本去代替这一步

sh /root/home/scripts/demo.sh 8080

 

Source files的匹配规则可以了解下&#xff1a;

* matches zero or more characters, ? matches one character.

 


jenkins自动化部署项目8 --定时构建

举几个例子&#xff1a;
每隔5分钟构建一次
H/5 * * * *

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

每天中午12点定时构建一次
H 12 * * *

每天下午18点定时构建一次
H 18 * * *

在每个小时的前半个小时内的每10分钟
H(0-29)/10 * * * *

每两小时45分钟&#xff0c;从上午9:45开始&#xff0c;每天下午3:45结束
45 9-16/2 * * 1-5

每两小时一次&#xff0c;每个工作日上午9点到下午5点(也许是上午10:38&#xff0c;下午12:38&#xff0c;下午2:38&#xff0c;下午4:38)
H H(9-16)/2 * * 1-5

 

我设置的是每天凌晨3点定时构建


推荐阅读
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • win10系统搭建Java开发环境的操作方法
    本文介绍了win10系统搭建Java开发环境的详细操作方法,包括下载Windows10系统和Java SE,安装Java开发环境,设置变量等步骤。操作简单,只需按照指导进行即可。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 修复安装win10失败并提示“磁盘布局不受UEFI固件支持”的方法
    本文介绍了修复安装win10失败并提示“磁盘布局不受UEFI固件支持”的方法。首先解释了UEFI的概念和作用,然后提供了两种解决方法。第一种方法是在bios界面中将Boot Mode设置为Legacy Support,Boot Priority设置为Legacy First,并关闭UEFI。第二种方法是使用U盘启动盘进入PE系统,运行磁盘分区工具DiskGenius,将硬盘的分区表设置为gpt格式,并留出288MB的内存。最后,通过运行界面输入命令cmd来完成设置。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
author-avatar
有心人php
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有