CI/CD с GitHub Actions: Автоматизация развертывания
# 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. Правильная настройка экономит время и снижает количество ошибок.