目录
背景介绍
Jenkins的旧版本不支持Send build artifacts over SSH,需求是Jenkins上传jar至Linux服务器后,自动执行一段shell脚本。
解决方案
在Linux服务器上利用inotifywait监听路径变化,当有文件上传后,自动执行一个脚本。
流程图
实现代码
测试服务器B : 开通ftp文件上传
路径B1 : /var/tmp/jenkins-android/apk
监听任务TaskB: 监听目录(/var/tmp/jenkins-android/apk )当文件上传修改时,将apk包上传至线上服务器C,并执行任务TaskC
#安装inotifywait
yum install inotify-tools -y
#查看安装目录
which inotifywait
#删除已有的监听任务
ps -ef|grep inotify|grep -v grep| awk '{print $2}'|xargs kill -9
#新建一个监听任务
nohup sh /var/tmp/jenkins-android/inotifywait.sh >> /var/tmp/jenkins-android/log-inotify.log 2>&1 &
#设置为开机启动
echo 'nohup sh /var/tmp/jenkins-android/inotifywait.sh >> /var/tmp/jenkins-android/log-inotify.log 2>&1 &' >> /etc/rc.local
inotifywait.sh 内容:
#!/bin/bash
#createby :lipp
#createtime:2021-03-16
#remark: inotify the file and execute the shell
#timefmt-指定时间格式;close_write-指定文件写关闭;指定监听路径;
inotifywait -mrq --timefmt '%y/%m/%d-%H:%M:%S' --format '%T%w%f' -e close_write /var/tmp/jenkins-android/apk |
while read event;
do
echo '---------EVENT START--------------'
echo $event
#执行自己的shell脚本
echo '---------EVENT END----------------'
done
inotifywait参数详情:
Options:
-h|--help 显示帮助文本.
@<file> 监听路径排除指定文件.
--exclude <pattern>
排除与扩展正则表达式匹配的文件上的所有事件.
--excludei <pattern>
类似 --exclude 但是大小写不敏感.
-m|--monitor 一直保持监听.除非一个事件被接受才退出。
-d|--daemon 类似 --monitor, 除了后台运行日志事件通过参数--outfile( 包括--syslog) 记录到文件
-r|--recursive 递归监听路径.
--fromfile <file>
从<file>或stdin的“-”读取要监视的文件.
-o|--outfile <file>
打印事件到 <file> 而不是 stdout.
-s|--syslog 发送错误到 syslog 而不是 stderr.
-q|--quiet 少打印(仅打印事件).
-qq 不打印(甚至不打印事件).
--format <fmt> 使用指定的printf-like格式字符串打印;有关详细信息,请阅读手册页.
--timefmt <fmt> strftime兼容格式字符串,用于--format string中的%T.
-c|--csv 以CSV格式打印事件.
-t|--timeout <seconds>
在侦听单个事件时,等待事件<seconds>秒后超时。如果<seconds>为0,inotifywait将永远不会超时.
-e|--event <event1> [ -e|--event <event2> ... ]
侦听特定事件。如果省略,则监听所有事件.
Exit status:
0 - 收到您请求监视的事件.
1 - 收到您没有要求观看的事件
(通常删除或卸载),或发生错误。.
2 - 提供了--timeout选项,在指定的时间间隔内,没有发生任何事件
Events:
access 已读取访问文件或目录内容
modify 修改文件或目录内容
attrib 属性文件或目录属性已更改
close_write 在可写模式下打开后,关闭写入文件或目录
close_nowrite 以只读模式打开后,关闭文件或路径
close 关闭文件或目录关闭,无论读/写模式
open 打开文件或目录
moved_to 移动到文件或目录移动到监视目录
moved_from 从文件或目录中移动\u从监视目录中移动
move 将文件或目录移入或移出监视的目录
create 在监视目录中创建的文件或目录
delete 监视目录中已删除的文件或目录
delete_self 文件或目录已被删除
unmount 包含已卸载文件或目录的文件系统