Awesome Sysadmin运维自动化脚本:Python实战案例

Awesome Sysadmin运维自动化脚本:Python实战案例

【免费下载链接】awesome-sysadmin A curated list of amazingly awesome open-source sysadmin resources. 【免费下载链接】awesome-sysadmin 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-sysadmin

在日常运维工作中,系统管理员(System Administrator,简称Sysadmin)常常需要处理大量重复性任务,如服务器监控、日志分析、备份管理等。这些任务如果手动完成,不仅效率低下,还容易出错。借助Python脚本实现自动化,能显著提升工作效率,降低人为错误风险。本文将以Awesome Sysadmin项目中的实战案例为基础,介绍如何编写实用的运维自动化脚本。

自动化场景与痛点分析

运维工作中常见的自动化场景包括:

  • 服务器状态监控与告警
  • 日志收集与分析
  • 文件备份与同步
  • 系统资源清理(如Git分支、临时文件)
  • 批量任务执行(如软件安装、配置更新)

以Git仓库管理为例,随着项目迭代,本地和远程会积累大量过时分支,手动清理不仅耗时,还可能误删重要分支。Awesome Sysadmin项目提供了git-branch-cleanup.sh脚本解决这一痛点,我们将基于此案例,演示如何用Python实现更灵活的自动化方案。

Python实现Git分支清理脚本

脚本功能设计

一个完善的Git分支清理脚本应具备以下功能:

  1. 检查当前目录是否为Git仓库
  2. 拉取远程最新代码
  3. 列出所有本地分支
  4. 保护重要分支(如main、master、dev)不被删除
  5. 显示待删除分支并确认
  6. 执行分支删除操作
  7. 清理远程跟踪分支

核心代码实现

以下是基于Python的Git分支清理脚本(tmp_repo/git_cleanup.py)核心逻辑:

import os
import subprocess
import sys

def is_git_repo():
    """检查当前目录是否为Git仓库"""
    return os.path.isdir('.git')

def pull_latest_code():
    """拉取远程最新代码"""
    print("正在拉取最新代码...")
    result = subprocess.run(['git', 'pull', 'origin', 'main'], capture_output=True, text=True)
    if result.returncode != 0:
        print(f"拉取失败: {result.stderr}")
        sys.exit(1)

def list_local_branches():
    """列出所有本地分支"""
    result = subprocess.run(['git', 'branch'], capture_output=True, text=True)
    branches = [line.strip() for line in result.stdout.split('\n') if line.strip()]
    return branches

def get_branches_to_delete(protected_branches=None):
    """获取待删除分支列表"""
    if protected_branches is None:
        protected_branches = ['main', 'master', 'dev']
    
    branches = list_local_branches()
    current_branch = [b for b in branches if b.startswith('*')][0][2:]
    protected_branches.append(current_branch)  # 保护当前分支
    
    to_delete = []
    for branch in branches:
        branch_name = branch.replace('*', '').strip()
        if branch_name not in protected_branches:
            to_delete.append(branch_name)
    
    return to_delete

def delete_branches(branches):
    """删除指定分支"""
    if not branches:
        print("没有可清理的分支")
        return
    
    print("\n将要删除的分支:")
    for branch in branches:
        print(f"- {branch}")
    
    confirm = input("\n确定要删除这些分支吗? (y/N) ")
    if confirm.lower() != 'y':
        print("取消删除")
        return
    
    print("\n正在删除分支...")
    for branch in branches:
        result = subprocess.run(['git', 'branch', '-D', branch], capture_output=True, text=True)
        if result.returncode == 0:
            print(f"已删除: {branch}")
        else:
            print(f"删除失败 {branch}: {result.stderr}")

def cleanup_remote_tracking():
    """清理远程跟踪分支"""
    print("\n正在清理远程跟踪分支...")
    subprocess.run(['git', 'fetch', '-p'], check=True)
    print("远程跟踪分支清理完成")

def main():
    if not is_git_repo():
        print("错误: 当前目录不是Git仓库")
        sys.exit(1)
    
    pull_latest_code()
    to_delete = get_branches_to_delete()
    delete_branches(to_delete)
    cleanup_remote_tracking()
    print("\n分支清理完成!")

if __name__ == "__main__":
    main()

脚本使用流程

使用该脚本的步骤如下:

  1. 将脚本保存为git_cleanup.py
  2. 赋予执行权限:chmod +x git_cleanup.py
  3. 在Git仓库目录中运行:./git_cleanup.py

脚本执行流程如图所示: mermaid

脚本扩展与优化建议

参数化配置

为提高脚本灵活性,可通过配置文件或命令行参数自定义保护分支列表:

import argparse

def parse_args():
    parser = argparse.ArgumentParser(description='Git分支清理工具')
    parser.add_argument('--protected', nargs='+', help='保护分支列表')
    return parser.parse_args()

if __name__ == "__main__":
    args = parse_args()
    protected = args.protected if args.protected else ['main', 'master', 'dev']
    # 后续使用protected变量

日志记录与告警

添加日志记录功能,将操作结果保存到文件,并在出现异常时发送邮件或系统通知:

import logging

logging.basicConfig(
    filename='git_cleanup.log',
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

# 操作时记录日志
logging.info(f"已删除分支: {branch}")

跨平台兼容性

使用pathlib模块处理路径,确保脚本在Windows和Linux系统都能运行:

from pathlib import Path

def is_git_repo():
    return Path('.git').is_dir()

项目资源与学习路径

Awesome Sysadmin项目提供了丰富的运维自动化资源,除了Git分支清理脚本,还包括:

  • 系统监控工具:可监控CPU、内存、磁盘等资源使用情况
  • 日志分析脚本:快速定位系统异常信息
  • 自动化部署工具:实现应用的一键部署与回滚

要深入学习运维自动化,建议参考以下资源:

总结与展望

本文以Git分支清理为例,展示了如何用Python实现运维自动化脚本。通过Python的subprocess模块调用Git命令,结合逻辑控制和用户交互,实现了安全高效的分支管理。相比Bash脚本,Python版本具有更好的跨平台性和扩展性,适合处理更复杂的自动化任务。

未来,我们可以进一步探索:

  • 集成CI/CD流程,实现分支自动清理
  • 开发GUI界面,降低使用门槛
  • 添加智能分析功能,优化分支管理策略

希望本文能帮助你开启运维自动化之旅,更多实用脚本和工具请关注Awesome Sysadmin项目。如果你有好的自动化方案或脚本,欢迎通过项目贡献指南参与社区建设!

【免费下载链接】awesome-sysadmin A curated list of amazingly awesome open-source sysadmin resources. 【免费下载链接】awesome-sysadmin 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-sysadmin

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值