热门标签 | 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点定时构建


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 树莓派Linux基础(一):查看文件系统的命令行操作
    本文介绍了在树莓派上通过SSH服务使用命令行查看文件系统的操作,包括cd命令用于变更目录、pwd命令用于显示当前目录位置、ls命令用于显示文件和目录列表。详细讲解了这些命令的使用方法和注意事项。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
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社区 版权所有