Jenkins旧版本实现文件上传并执行shell

目录

 

背景介绍

解决方案

流程图如下:

实现代码


背景介绍

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         包含已卸载文件或目录的文件系统

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值