publish超时机制
在配置界面,可以去设置超时,如下
可以在这里设置超时
运行命令优化
还有一个地方需要注意,如下,命令可能在服务器上没有运行成功
比如,我在服务器上直接运行这行命令,如下
我们会发现,运行是会失败的
所以,我们需要将这一行命令进行优化,如下:将日志输出到mylog.log文件里面
nohup java -jar /root/xxoo/demo*.jar >mylog.log 2>&1 &
命令说明:博客
将其修改为下面的内容
Pre Steps设置(运行shell脚本)
之前,我们需要在每次启动前都去kill掉之前的进程,现在可以在Pre Steps
里面去设置启动前去清理进程等内容
进入任务的配置。如下,选择Pre Steps
在这里,我们在运行项目前面,将之前运行的jar包删除掉,进程关闭掉,将之前运行的数据和痕迹删除掉
首先,点击选项,选择红框内容
过后,会出现下面的内容
在红框里面,其已经自动选择了之前我们设置的目标服务器地址,现在我们便需要在下面的Exec command
里面输入一些命令,由于命令有多行,所以在这里我们便需要去写一些shell脚本,如下:
脚本内容为:
#!/bin/bash
#删除历史数据
rm -rf xxoo
#获取传入的参数,
appname=$1
echo "arg:$1"
#获取正在运行的jar包pid
pid=`ps -ef | grep $1 | grep 'java -jar' | awk '{printf $2}'`
echo $pid
#如果pid为空,提示一下,否则,执行kill命令
if [ -z $pid ];
#使用-z 做空值判断
#为空的话
then
echo "$appname not started"
else
kill -9 $pid
echo "$appname stoping...."
# 精确匹配
check=`ps -ef | grep -w $pid | grep java`
if [ -z $check ];
then
echo "$appname pid:$pid is stop"
else
echo "$appname stop failed"
fi
fi
-
删除历史数据:
-
获取现在正在运行的pid
-
获取传入的参数
返回之前的Pre Steps ,去配置参数,如下:
保存完之后,进行运行,如下:
这样在运行之前,会将之前的痕迹给删除掉
注:现在每次提交了(Push)代码后,过后再在git上将代码合并到Jenkins上配置的分支上,最后重新运行一下构建,这样提交的代码才会正式生效
自动构建
简单说明
那么,如果想要在这个过程中完成自动化的构建,即只要我提交了代码,将代码合并到对应的分支,Jenkins便去完成自动化的构建,不需要再去点一下构建,这种功能的实现可以使用git的钩子机制
- 钩子机制:一旦git上提交了代码,就会去回调一下Jenkins,Jenkins再去完成构建
进入之前项目的配置,选择“构建触发器”,如下:在这里可以去选择在什么条件下去构建
将“触发远程构建XX”这个选项勾选上,然后会出现需要输入的一个框,在这个里面去配置一个url,去进行调用
上面标记的url,需要在git上进行配置,表示代码一旦提交,这样git那边便会去向这个url去发起回调的钩子去,如下
如上,git上有一个事件机制,去进行回调Jenkins上的一个接口,去进行构建
完成自动构建
提交代码到git仓库后去进行自动构建
首先,我们需要在Jenkins上进行配置
进入任务的配置中,选择“构建触发器”,将“触发远程构建XXX”勾选上,配置一个身份令牌,下面提示的url便是在git上需要使用的url
- JENKINS_URL:当前Jenkins的地址(192.168.44.101)
- TOKEN_NAME:身份令牌,即上面输入框中输入的内容(123123)
对这个url进行演示,
第一步:简单请求(登陆情况下)
- 如果还没有对上面端的url进行请求,Jenkins上面的任务队列还是空闲的,如下:
- 发起请求后,在Jenkins的页面的构建队列便出来了
- 这种情况是因为当前浏览器已经是登陆的情况,所以才能正确的发起请求,如果换一个浏览器或者是PostMan去请求的话,是会报错的(需要登陆)
新浏览器
postman
那么为了解决这个问题,便需要去安装一个插件
第二步:安装插件使未登陆情况下还可以去发起请求
按以前的步骤,进入插件管理里面,安装下面的插件
勾选上后,进行安装,实现免登陆
安装上后,查看其文档,后面去发起请求的话,便需要去调用下面的接口:buildByToken/build>job=first&token=xxx
现在使用postman发起请求
现在便可以匿名的去访问了
第三步:配置gitlab
进入对应项目的设置里面,点击webhooks
在其右边进行对应的配置
过后,点击Add webhook
有可能会出现下面的报错
这个并不是地址报错了,而是这个请求不支持,
解决如下
- 切换管理员的身份
- 配置网络的一些参数,按下面的配置,过后保存更改
- 按之前的步骤重新去添加webhook即可
添加上后,该页面的下面便会出现如下的内容
测试
-
发起push请求,结果如下
-
再次发起一个merge请求
-
上面的测试都成功了,下面便正式去提交代码,通过测试,结果是没有问题的(测试过程便不展示了),反正就是本地的idea等工具进行commit后,便会自动去启动,和上面的测试结果都差不多
代码commit后,内容还是之前的,因为代码是还没有合并的,需要再去合并后,才是最新的结果
这里便有一个问题,将代码commit,push的时候,会去创建一次任务;在合并分支的过程中还会去创建一次任务,合并成功后,需要admin去进行真正的合并,这里又会创建一次任务;一共创建了三次任务
这里便比较重复和多余
常见的几种构建方式(如在git服务器上进行合并时去做自动化的构建)
快照依赖构建
有下面几种构建方式:
- 快照依赖构建/Build whenever a SNAPSHOT dependency is built
- 当依赖的快照被构建时执行本job
- 这个需要在下面的界面进行配置,该选项勾选上的意思是:当当前这个job里依赖了其他的SNAPSHOT(快照),当这个SNAPSHOT发生变化时,会把当前这个项目一起构建一下
触发远程构建
- 触发远程构建 (例如,使用脚本)
- 远程调用本job的restapi时执行本job
- 这个已经在上面演示过了,这里便不继续说明了
job依赖构建
- job依赖构建/Build after other projects are built
- 当依赖的job被构建时执行本job
定时构建
- 定时构建/Build periodically
- 使用cron表达式定时构建本job
向GitHub提交代码时触发
- 向GitHub提交代码时触发Jenkins自动构建/GitHub hook trigger for GITScm polling
- Github-WebHook出发时构建本job
将项目关联到GitHub上,与之前关联gitlab有点类似
定期检查代码变更
- 定期检查代码变更/Poll SCM
- 使用cron表达式定时检查代码变更,变更后构建本job
这个是Jenkins去主动发起请求,去检查
corn表达式:博客
邮件通知
当项目构建失败或出问题了,去通知相关的人员
第一步:配置邮箱服务器
在这里使用163的SMTP服务器,作为发件的邮箱
将上面的密码保存下来
在这里,使用QQ邮箱作为收件邮箱
第二步:在Jenkins里面配置
第一步:进入配置界面
第二步:配置Jenkins Location
第三步:配置Extended E-mail Notification (这是一种比较个性化的通知,在这里可以去配置触发了什么事件才会去进行发送邮件)
- 配置服务器地址
- 添加凭证
填入账号密码(密码是之前获取到的凭证,并不是登陆的密码)
- 下面还有一些其他的个性化的配置,里面有选项可以去设置邮件的模板等
- 事件触发器,当发生勾选上的事件后,才去发送邮件
第四步:配置(这是一种系统的通知,当一种比较严重的问题出现时,才会发送邮件),这里的配置与之前的配置差不多
第三步:测试发送
配置完成后,可以进行测试
收到的邮件
如果没有发送正确,可以看上面的日志
第四步:设置用户组
在这里去设置一下用户组的内容,这里发邮件的动作便会往这些用户进行发送