通过Jenkins+Ansible+GitLab实现自动清理磁盘

一、前期准备

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流水线

  1. 安装插件:确保安装 GitLab、Ansible 插件。

  2. 创建一个Pipeline流水线

  3. 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、执行流水线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值