Jenkins+ansible实现日志自动清理策略
前提:jenkins和ansible均已安装完毕
1.编写yml文件
环境准备:以zxyh测试环境为例
1.wasup登录服务器,新建文件夹
mkdir -p /home/wasup/auto/logClean
2.切换到新建目录下,新建logClean.yml
cd /home/wasup/auto/logClean
vim logClean.yml
[注:directoryAge:30d表示大于等于30天的数据,生产实际情况跟项目经理定压缩时间。
logPath: /log 表示zxyh的日志路径,生产根据实际情况修改
]
此次方案文字叙述为:自动清理日志目录下大于等于30天的文件夹,以及删除大于等于90天的压缩包
文件内容如下:
--- - hosts: zxyh_ip remote_user: wasup vars: - directoryAge: 30d - tarAge: 90d - logPath: /log - systemName: zxyh tasks: - name: 找到日志目录下时间大于directoryAge的文件夹,并排除lost+found,cfca未知用处的文件夹 find: path: "{{ logPath }}" age: "{{ directoryAge }}" file_type: directory exclude: - "lost+found" - "cfca" register: logFiles - name: 将符合条件的文件夹压缩并删除源文件夹 shell: tar -zcvf "{{ item.path }}.tar.gz" "{{ item.path }}" --remove-files with_items: - "{{ logFiles.files }}" - name: 找到符合条件的压缩包 find: path: "{{ logPath }}" age: "{{ tarAge }}" file_type: any patterns: "*.tar.gz" register: tarFiles - name: 删除日志目录下时间大于tarAge的压缩包 file: path: "{{ item.path }}" state: absent with_items: - "{{ tarFiles.files }}"
2. jenkins新建自动清理任务
登录jenkins--新建任务--输入任务名称(因为我已经操作过一次,所以提示已存在)--选择构建一个自由风格的软件项目--点击确定

跳转后输入任务描述

2.1. 构建触发器
点击构建触发器--构建定时触发器,H H 1 * * 表示每个月1号执行一次,语法参考下面介绍

Jenkins采用了著名的UNIX任务调度工具CRON所使用的配置方式,用5个字段代表5个不同的时间单位(中间用空格隔开),语法如下:
| 字段 | * | * | * | * | * |
| 含义 | 分钟 | 小时 | 日期 | 月份 | 星期 |
| 取值范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 |
| 示例 | |||||
| 每隔15分钟执行一次 | H/15 | * | * | * | * |
| 每隔2小时执行一次 | H | H/2 | * | * | * |
| 每隔3天执行一次 | H | H | H/3 | * | * |
| 每隔3天执行一次(每月的1-15号) | H | H | 1-15/3 | * | * |
| 每周1/3/5执行一次 | H | H | * | * | 1,3,5 |
| 每天3点执行一次 | H | 3 | * | * | * |
| 每天8/12/22点执行一次 | H | 8,12,22 | * | * | * |
| 规则 | 备注 | ||||
| 指定时间范围 | x-y | ||||
| 指定时间间隔 | / | ||||
| 指定变量取值 | x,y,z | |
2.2 构建环境--执行shell
点击构建环境--选择执行shell命令--命令如下
#1. SSH ansible服务器
ssh -p 22 ansible@ansible_ip << remotessh
#2.新建文件夹
mkdir -p /home/ansible/apps/zxyh/logClean
#3. 将logClean.yml复制到/home/ansible/apps/zxyh/logClean下
ansible zxyh_ip -m fetch -a 'src=/home/wasup/auto/logClean/logClean.yml dest=/home/ansible/apps/zxyh/logClean/logClean.yml flat=true' -u wasup
#4.执行 logClean.yml [-e directoryAge=1d 这个表示修改directoryAge变量的值为1d,不添加则按照yml中定义的directoryAge:30d去执行]
ansible-playbook /home/ansible/apps/zxyh/logClean/logClean.yml -e directoryAge=1d
exit
remotessh

最后点击保存即可。
点击立即构建--控制台查看输出。完成后到zxyh服务器日志路径/log下查看生成满足条件的压缩包
此次自动清理功能已完成
浙公网安备 33010602011771号