Назад к гайдам

CI/CD с GitHub Actions: Автоматизация развертывания

DevOps Средний CI/CD DevOps Docker GitHub Actions
5 мин чтения 21 просмотров

# CI/CD с GitHub Actions: Автоматизация развертывания

## Введение

GitHub Actions позволяет автоматизировать рабочие процессы прямо в репозитории GitHub. Это мощный инструмент для CI/CD.

## Основы

### Создание workflow

Создайте файл `.github/workflows/ci.yml`:

```yaml
name: CI

on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]

jobs:
test:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

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

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

- name: Run tests
run: |
python manage.py test
```

## Docker Build и Push

```yaml
name: Build and Push Docker Image

on:
push:
branches: [ main ]

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .

- name: Push to Registry
run: |
echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
docker push myapp:${{ github.sha }}
```

## Деплой на сервер

```yaml
name: Deploy

on:
push:
branches: [ main ]

jobs:
deploy:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Deploy to server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/myapp
git pull
docker-compose up -d --build
```

## Матричные сборки

```yaml
strategy:
matrix:
python-version: [3.9, 3.10, 3.11]
django-version: [4.1, 4.2]

steps:
- name: Test with Python ${{ matrix.python-version }} and Django ${{ matrix.django-version }}
run: |
pip install django==${{ matrix.django-version }}
python manage.py test
```

## Кэширование

```yaml
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
```

## Лучшие практики

1. Используйте секреты для чувствительных данных
2. Кэшируйте зависимости для ускорения
3. Разделяйте workflow на отдельные jobs
4. Используйте matrix для тестирования на разных версиях
5. Настраивайте уведомления о статусе

## Заключение

GitHub Actions упрощает автоматизацию CI/CD. Правильная настройка экономит время и снижает количество ошибок.