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")
Автоматизация с помощью библиотек #
schedule
: Планирование задач.paramiko
: Управление удалёнными серверами по SSH.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 #
Шаги: #
- Установите Jenkins и добавьте плагин Pipeline.
- Напишите
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"' } } } }
- Добавьте репозиторий в Jenkins и настройте пайплайн.
Советы по DevOps с Python #
- Используйте Python для написания скриптов управления инфраструктурой.
- Применяйте Docker для создания контейнеризованных приложений.
- Настройте CI/CD для автоматизации сборки и доставки вашего кода.