Подписывайтесь:

Блог AST-SoftPro

Python-утилиты для DevOps: автоматизация серверов и CI/CD

12.06.2026 8 мин чтения
Python-утилиты для DevOps: автоматизация серверов и CI/CD

Python-утилиты для DevOps: автоматизация серверов и CI/CD

В современной среде разработки и эксплуатации программного обеспечения автоматизация играет ключевую роль. Особенно актуальна она в DevOps-практиках, где важны стабильность, воспроизводимость процессов и снижение человеческой ошибки. Python — один из самых популярных языков для создания таких утилит благодаря своей читаемости, богатому стандартному набору библиотек и поддержке работы с сетевыми протоколами, файлами и системами.

В этой статье рассматриваются практические примеры Python-скриптов, применяемых в автоматизации серверного администрирования: управление конфигурацией серверов, создание бэкапов, мониторинг загрузки ресурсов. Все примеры не зависят от конкретной инфраструктуры — они могут быть адаптированы под различные среды (Linux/Unix-серверы через SSH).


Управление серверами по SSH с помощью Paramiko

Один из распространённых сценариев в DevOps — выполнение команд на удалённых серверах или сбор информации о них. Для этого можно использовать библиотеку paramiko, которая позволяет работать с SSH без установки дополнительных клиентских программ.

Пример: получение списка запущенных процессов на сервере:

import paramiko

def get_processes(host, port=22, user='admin', password='secret'):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        client.connect(hostname=host, port=port, username=user, password=password)
        stdin, stdout, stderr = client.exec_command('ps aux')
        output = stdout.read().decode()
        if 'No such file or directory' in str(stderr.read()):
            raise Exception('SSH failed: check credentials')
        return output
    except Exception as e:
        print(f"Error connecting to {host}: {e}")
        return None
    finally:
        client.close()

Такой скрипт можно использовать в составе более сложных систем, например, для периодической проверки здоровья серверов или анализа нагрузки.


Автоматическое создание бэкапов конфигурационных файлов

Резервное копирование — важный элемент DevOps. Часто требуется не просто делать резервные копии данных, но и управлять жизненным циклом этих копий: хранить их определённое время, удалять старые версии, проверять целостность.

Пример скрипта для создания бэкапа /etc/nginx/nginx.conf с последующим архивированием:

import os
import shutil
from datetime import datetime

def backup_config_file(source_path, backup_dir='/backups', max_backups=5):
    if not os.path.exists(backup_dir):
        os.makedirs(backup_dir)

    filename = f"nginx_conf_{datetime.now().strftime('%Y%m%d_%H%M')}.tar.gz"
    archive_path = os.path.join(backup_dir, filename)

    try:
        # Создаём архив
        shutil.make_archive(base_name=os.path.basename(filename), 
                            format='gztar',
                            root_dir=source_path,
                            base_dir="/etc/nginx/")
        print(f"Backup created: {archive_path}")
    except Exception as e:
        print(f"Failed to create backup: {e}")

    # Удаляем старые бэкапы, если их больше max_backups
    files = [f for f in os.listdir(backup_dir) if f.startswith('nginx_conf_')]
    while len(files) > max_backups:
        oldest_file = min(files)
        shutil.rmtree(os.path.join(backup_dir, oldest_file))
        print(f"Removed old backup: {oldest_file}")
        files.remove(oldest_file)

Этот подход легко масштабируется — можно добавить поддержку логирования, уведомлений по email или отправку архива в облачное хранилище (например, S3 через boto3).


Мониторинг нагрузки сервера: CPU и память

Для обеспечения стабильности приложений важно отслеживать использование ресурсов. Python позволяет собирать метрики с локальной системы без внешних зависимостей.

Пример получения информации о загрузке CPU и использовании памяти:

import psutil
from datetime import datetime

def get_server_metrics() -> dict:
    return {
        "timestamp": datetime.utcnow().isoformat(),
        "cpu_percent": psutil.cpu_percent(interval=1),
        "memory_percent": psutil.virtual_memory().percent,
        "disk_usage_percent": psutil.disk_usage('/').percent
    }

Функция возвращает словарь с ключевыми метриками. Эти данные могут быть отправлены в систему мониторинга (например, через HTTP POST на сервер Grafana или Prometheus) для построения графиков и алертингов.


Интеграция скриптaв CI/CD: запуск тестов перед развёртыванием

Автоматизация процесса Continuous Integration and Deployment (CI/CD) может включать проверку состояния сервера до деплоя. Например, можно проверить доступность сервиса или свободную память на production-сервере.

Пример проверки свободного места на диске:

import psutil

def check_disk_space(min_free_gb: float = 2.0):
    total, used, free = map(int, os.popen('df / | tail -1').read().split())[:3]
    # Переводим в ГБ
    free_gb = round(free / (1024**3), 2)
    if free_gb < min_free_gb:
        return False, f"Not enough disk space: {free_gb} GB available"
    return True, "Sufficient disk space"

Такой скрипт может быть частью pre-deploy-чека в GitLab CI или Jenkins. Он не выполняет деплой сам, но блокирует его при несоответствии условий.


Рекомендации по безопасности и надёжности

При использовании Python для DevOps-автоматизации важно учитывать следующие аспекты:

Аспект Рекомендация
Хранение паролей Использовать переменные окружения или секреты из системы (например, Hashicorp Vault)
Обработка ошибок Добавлять try/except и логирование с указанием уровня ошибки (INFO/WARNING/ERROR)
Логирование Записывать действия скрипта в файл или систему аудита для отладки и анализа инцидентов
Проверка прав доступа Убедиться, что пользователь на сервере имеет минимальные необходимые права

Например, вместо прямого использования пароля:

password = os.getenv('SSH_PASSWORD')

И включение логирования в logging модуль Python.


Заключение

Python предоставляет мощные возможности для автоматизации задач DevOps: от простых скриптов до сложных систем мониторинга и управления конфигурациями. Ключ к успеху — модульный подход, использование проверенных библиотек (paramiko, psutil) и внимание к вопросам безопасности и отказоустойчивости. Приведённые примеры можно адаптировать под конкретные нужды организации без необходимости внедрения специализированных инструментов или платформ.


AI-Помощник