DevOps и автоматизация

19. DevOps и автоматизация #

Python является одним из самых популярных языков в области DevOps, поскольку он сочетает простоту, гибкость и мощные библиотеки для автоматизации, работы с контейнерами и организации процессов CI/CD.


19.1. Написание скриптов для автоматизации #

Автоматизация рутинных задач — одна из сильных сторон Python. Это может включать управление файлами, работу с системными процессами и сетями.

Пример: автоматизация резервного копирования #

import os
import shutil
from datetime import datetime

def backup_files(source, destination):
    if not os.path.exists(destination):
        os.makedirs(destination)
    
    backup_name = f"backup_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
    backup_path = os.path.join(destination, backup_name)
    shutil.copytree(source, backup_path)
    print(f"Резервная копия создана: {backup_path}")

source_dir = "/path/to/source"
destination_dir = "/path/to/destination"
backup_files(source_dir, destination_dir)

Пример: управление системными процессами #

Модуль subprocess позволяет управлять командами в командной строке.

import subprocess

def execute_command(command):
    result = subprocess.run(command, shell=True, capture_output=True, text=True)
    if result.returncode == 0:
        print("Команда выполнена успешно:")
        print(result.stdout)
    else:
        print("Ошибка выполнения команды:")
        print(result.stderr)

execute_command("ls -l")

Автоматизация с помощью библиотек #

  1. schedule: Планирование задач.
  2. paramiko: Управление удалёнными серверами по SSH.
  3. fabric: Выполнение команд на удалённых серверах.

19.2. Работа с Docker #

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

Использование Python для работы с Docker #

Библиотека docker предоставляет API для управления контейнерами.

Установка #
pip install docker
Пример: запуск контейнера #
import docker

client = docker.from_env()

# Запуск контейнера
container = client.containers.run("nginx:latest", detach=True, ports={'80/tcp': 8080})
print(f"Контейнер запущен: {container.id}")

# Остановка контейнера
container.stop()
print("Контейнер остановлен")

Создание Dockerfile для Python-приложения #

Пример: Dockerfile #
# Используем базовый образ Python
FROM python:3.10-slim

# Устанавливаем зависимости
COPY requirements.txt .
RUN pip install -r requirements.txt

# Копируем код приложения
COPY app /app
WORKDIR /app

# Запускаем приложение
CMD ["python", "main.py"]
Построение и запуск #
docker build -t my-python-app .
docker run -p 5000:5000 my-python-app

19.3. Введение в CI/CD #

Континуальное интеграция и доставка (CI/CD) автоматизируют сборку, тестирование и деплой приложений.

CI/CD с GitHub Actions #

Пример: .github/workflows/main.yml #
name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: 3.10

      - name: Install Dependencies
        run: |
          pip install -r requirements.txt          

      - name: Run Tests
        run: |
          pytest tests/          

  deploy:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy Application
        run: |
          echo "Deployment step (настройте под свои нужды)"          

CI/CD с Jenkins #

Шаги: #
  1. Установите Jenkins и добавьте плагин Pipeline.
  2. Напишите Jenkinsfile:
    pipeline {
        agent any
    
        stages {
            stage('Build') {
                steps {
                    sh 'pip install -r requirements.txt'
                }
            }
            stage('Test') {
                steps {
                    sh 'pytest tests/'
                }
            }
            stage('Deploy') {
                steps {
                    sh 'echo "Deploying application"'
                }
            }
        }
    }
    
  3. Добавьте репозиторий в Jenkins и настройте пайплайн.

Советы по DevOps с Python #

  • Используйте Python для написания скриптов управления инфраструктурой.
  • Применяйте Docker для создания контейнеризованных приложений.
  • Настройте CI/CD для автоматизации сборки и доставки вашего кода.