文章引导
Jenkins配置自动化发布-简单优化
GitLab回调钩子Webhooks构建项目
Jenkins常用的几种触发器
Jenkins的cron表达式
Jenkins的Poll SCM构建项目
Jenkins配置自动化发布-简单优化
1. Jenkins构建环境中,因为一些命令执行可能会出现超时,来优化命令杜绝问题
在Linux终端执行命令中,若使用nohup等一些了等待结果命令,那么Jenkins的自动化任务就会有失败的可能,从而影响整个业务线。
示例:如下图直接运行java程序,然后命令行一直在卡住,其实jar包已经启动起来了,如果时间长了以后,Jenkins会认为一直没有完成,那么可能会提示任务失败。
[root@nexus ruoyi-master]# nohup java -jar ruoyi-admin.jar
nohup: 忽略输入并把输出追加到"nohup.out"
进行对命令的优化
##nohup语法(数据流量定向)
##那么需要对命令进行优化
< 覆盖写入 << 追加写入
> 覆盖输出 >> 追加输出
标准输入(stdin):代码为0,使用 < 或 <<
标准输出(stdout):代码为1,使用> 或 >>
标准错误输出(stderr):代码为2,使用2> 或者2>>
##nohup java -jar ruoyi-admin.jar > nohup.out 2>&1 &
##这段的意思是:直接覆盖写入文件nohup.out,2>&1将标准错误输出重定向到标准输出到一个文件里面
##第一种优化,使用优化好的启动命令,就不需要卡住命令行,这样Jenkins对于这条命令执行完成后,可以直接返回任务成功
[root@nexus ruoyi-master]# nohup java -jar ruoyi-admin.jar > nohup.out 2>&1 &
[1] 2395
##第二种优化,使用启动java包的shell脚本文件,启动和暂停。执行完成脚本后,Jenkins对于这条命令执行完成后,直接返回任务成功
[root@nexus ruoyi-master]# ./ry.sh start
Start ruoyi-admin.jar success...
[root@nexus ruoyi-master]# ./ry.sh stop
Stop ruoyi-admin.jar
ruoyi-admin.jar (pid:2618) exiting...
ruoyi-admin.jar exited.
对于执行命令的用时来配置Jenkins的超时时间,减少发布的失败问题
点击项目配置,摘到构建后操作框里,然后再点击高级
找到Exec timeout (ms)
,输入大概的时间(注意是毫秒)
2. 如:在使用Jenkins自动化操作发布一个程序的时候,肯定先要把需要更换程序包的程序杀死,不然后面再启动程序包会出来端口冲突,这样会导致发布失败,那么就需要用到Jenkins的项目配置中的Pre Steps
功能。如构建前需要对服务器什么操作,都可以使用。
示例:在执行更新程序包之前,先杀死需要更新的程序,避免出现端口占用问题
配置Jenkins,向目标服务器发送命令
找到在Jenkins全局配置里的服务器,选择需要发布的服务器来执行命令,然后保存
执行自动化任务,查看日志,发现在构建之前执行了杀死进程命令。
然后构建发布,执行成功
GitLab回调钩子Webhooks
自动构建项目
配置在开发过程中提交代码到GitLab后,合并到主分支后,然后调用Jenkins,来实现自动构建发布项目
1.GitLab的Webhooks(回调钩子)通过一个新的事件,来调用Jenkins接口。
在Jenkins的项目里面配置一个构建触发器
给的示例为: JENKINS_URL/job/ruoyi-master/build?token=TOKEN_NAME
编辑URL:jenkins为项目访问路径,job是固定死的,ruoyi-master为项目名字,build为固定死的,token为刚才设置的密码。然后访问
测试是否Jenkins收到Get请求,开始执行构建任务
因发送URL来执行构建任务,需要先登录Jenkins,下载安装以下插件来实现不用登录认证Jenkins来执行URL的请求构建任务
编辑使用插件形成的URL:buildByToken/build?job=NAME&token=SECRET
只需要把Name替换成项目名字,SECRET替换成设置的密码,这样就实现了免登录
Jenkins来执行URL请求来执行自动构建了
查看Jenkins有构建执行,
因webhook出站功能是默认是关闭的,需要去管理中心开启,然后保存
在Gitlab上找到需要配置的项目上的webhook(回调钩子),把URL放到Gitlab配置上。
填入自动构建的URL,选择有合并请求事件
取消SSL验证,因为用HTTP请求没有用HTTPS请求,然后点击添加webhook
然后右下角会出现添加的webhook
点击测试合并请求是否能执行Jenkins自动化发布任务
查看jenkins是否执行构建任务
2. 提交代码然后创建合并请求
Jenkins执行了构建操作
Jenkins常用项目构建的几种触发器
快照(依赖与某一些其他的快照的时候,产生构建)
如:当前依赖了其他的SNAPSHOT,当被依赖的SNAPSHOT发生了变化的时候,会把当前依赖的SNAPSHOT项目进行构建。
Job依赖构建
如:Job上下依赖的,可以有父项目,当Maven项目构建的时候会有父子项目,父项目构建的时候然后子项目要先被构建。
当一个子项目构建的时候,那么配置了关联子项目的夫项目也会进行构建
定期构建(使用Cron表达式,但也不是标准的表达式)
如:每天,哪天等
使用Github进行构建(生产环境不太可能,代码泄露。会使用自己搭建的Gitlab)
如:把代码提交到Github,然后使用GitHub hook来发送请求给Jenkins进行构建
主动式检查构建(定期、定时的主动去检查代码托管服务器如Gitlab或者Github中的源码是否发生变化,发生变化然后进行构建)
如:设置托管项目的每天下午6点进行发起给Gitlab进行检查源码是否发生了变化,如果发生了变化,进行执行一次构建。如果没有发生变化就不用构建,继续等待第二天检查
Jenkins的cron表达式
标准的cron表达式的地址为:在线生成的cron表达式
第一个 * 代表每个小时的第几分钟,取值0~59
H * * * *
H:每小时执行一次
第二个 * 表示小时,取值0~23
* 15 * * * 表示每天下午3点
* 1 * * * 表示每天凌晨1点
第三个 * 表示一个月的第几天,取值1~31
* 1 5 * * 表示每月5日凌晨1点
第四个 * 表示第几月,取值1~12
* 15 5 1 * 表示每年每月5日15时执行
第五个 * 表示一周中的第几天,取值0~7,0和7都代表时周日这一天
* * * * 1 表示每周1执行
特殊语法:
/ 表示每隔多长时间,比如 */10 * * * * 表示每隔10分钟
*/30 */2 * 1-6 * 表示从1到6月的每天每30分钟然后再隔2小时循环执行
H 表示hash散列
H/10 * * * * 其实时间不固定,步长固定10分钟执行一次,有可能是3,13,23
H (1-30) 2 * * 1-6 周一至周六,每天凌晨2点 (25) 1-30 之内取hash值,执行一次
Jenkins的主动式构建项目
主动式构建(Build periodically):配置周期性进行项目构建,这个是到指定的时间必须触发构建任务,不会受代码是否更变。
主动式构建(Poll SCM):配置周期性进行项目构建,这个是到指定的时间去gitlab上检查版本是否发生变化,如发生变化触发构建任务,如没有发生变化就不会触发构建任务。
被动式:使用Gitlab的webhook进程构建,这种方式是通过Jenkins暴露出接口,等待Gitlab中的项目构建来触发webhook然后来请求Jenkins的接口来进行构建。
主动式:使用Jenkins的Poll SCM/Build periodically构建项目是,定时主动去请求gitlab,来实现从gitlab拉取代码,进行构建
使用PollSCM来构建项目(两种构建方式配置都是cron表达式)
-
配置Poll SCM(找到项目的配置选项,让PollSCM每分钟执行一次),然后保存
图中的忽略钩子post-commit
是Apache Subversion的功能,这里是使用gitlab所以不需要勾选。 -
查看每分钟是否构建(定时检查源码变更,如果有更新就checkout最新code下来,然后执行构建动作。 如果没有更新就不会执行构建)