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下查看生成满足条件的压缩包

此次自动清理功能已完成

 

posted @ 2021-03-01 15:26  鸣蝉  阅读(620)  评论(0)    收藏  举报