前提: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下查看生成满足条件的压缩包
此次自动清理功能已完成