一、前期准备
1、部署Jenkins、ansible、gitlab(跳过)
| 服务器类型 | 职责 |
|---|---|
| Jenkins | 任务调度中心 |
| GitLab | 代码存储 |
| Ansible | 配置管理节点 |
2、准备两台以上服务器(完成ssh免密登录)
192.168.60.129(充当生产集群)
192.168.60.130(充当测试集群)
二、编写脚本
1.定义清理规则
vim disk_cleanup.sh
#!/bin/bash
# 输入参数:server_type(production 或 testing)
SERVER_TYPE=$1
LOG_FILE="/var/log/disk_cleanup.log"
# 检查参数合法性
if [[ "$SERVER_TYPE" != "production" && "$SERVER_TYPE" != "testing" ]]; then
echo "错误:无效的服务器类型 '$SERVER_TYPE',应为 production 或 testing"
exit 1
fi
# 定义清理路径
if [ "$SERVER_TYPE" = "production" ]; then
CLEAN_PATH="/data"
elif [ "$SERVER_TYPE" = "testing" ]; then
CLEAN_PATH="/opt"
fi
# 获取磁盘使用率(仅检查目标路径所在分区)
USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
# 判断是否需要清理
if [ $USAGE -gt 80 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - 磁盘使用率 $USAGE% > 80%,开始清理 $CLEAN_PATH" >> $LOG_FILE
# 清理策略(示例:删除7天前的日志文件,按需修改)
# find $CLEAN_PATH -type f -name "*.log" -mtime +7 -delete
# 清理所有文件(为了便于测试,使用rm -rf清理全部文件)
rm -rf $CLEAN_PATH/*
echo "$(date '+%Y-%m-%d %H:%M:%S') - 清理完成" >> $LOG_FILE
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - 磁盘使用率 $USAGE%,无需清理" >> $LOG_FILE
fi
2.配置 Ansible Inventory
vim hosts
[production]
prod-server1 ansible_host=192.168.60.129
[testing]
test-server1 ansible_host=192.168.60.130
3.编写 Ansible Playbook
vim cleanup.yml
---
- name: 清理生产环境磁盘
hosts: production
become: yes
tasks:
- name: 上传清理脚本
copy:
src: ./disk_cleanup.sh
dest: /usr/local/bin/disk_cleanup.sh
mode: 0755
- name: 执行生产环境清理
command: /usr/local/bin/disk_cleanup.sh production
register: cleanup_output
- name: 打印清理结果
debug:
var: cleanup_output.stdout_lines
- name: 清理测试环境磁盘
hosts: testing
become: yes
tasks:
- name: 上传清理脚本
copy:
src: ./disk_cleanup.sh
dest: /usr/local/bin/disk_cleanup.sh
mode: 0755
- name: 执行测试环境清理
command: /usr/local/bin/disk_cleanup.sh testing
register: cleanup_output
- name: 打印清理结果
debug:
var: cleanup_output.stdout_lines
4、上传gitlab
// 本文跳过git类的一些前置步骤 直接到推送阶段
git add *
git commit -m "清理磁盘脚本"
git push origin main
三、Jenkins流水线
-
安装插件:确保安装 GitLab、Ansible 插件。
-
创建一个Pipeline流水线

-
Pipeline配置
pipeline { agent any triggers { cron('*/30 * * * *') // 每半小时执行一次 准确的时间 方便排查问题 } stages { stage('Checkout Code') { steps { // 需要使用自己的git密码和项目路径 git branch: 'main', credentialsId: '6c729093-6713-4263-b9eb-fa26d6b12b5c', url: 'http://192.168.60.129/root/disk-cleanup-scripts.git' } } stage('Run Ansible Playbook') { steps { ansiblePlaybook( playbook: 'cleanup.yml', inventory: 'hosts', credentialsId: 'ansible-ssh-key', colorized: true ) } } } }
5.生成Jenkinsfile语句(可跳过)
a)在遇到不会写的语句时可以点击“流水线语句”按钮

b)生成脚本

选择不会写的模块,按照规范填好对应数据后直接生成(因我把gitlab机器关了,所以会提示无法连接)
四、测试
1、创建数据
# 分别到两个机器上创建文件夹
mkdir -p /data/test
mkdir -p /opt/test
2、执行流水线

3215

被折叠的 条评论
为什么被折叠?



