Демонстрационный проект для портфолио, показывающий настройку полноценного CI/CD пайплайна в GitLab.
REST API приложение на FastAPI с автоматизированным CI/CD pipeline, включающим:
- Автоматическое тестирование с pytest
- Сборку Docker-образов
- Публикацию в GitLab Container Registry
- Кэширование зависимостей
- Multi-stage Docker builds
gitlab-ci-python-app/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI приложение
│ └── utils.py # Вспомогательные функции
├── tests/
│ ├── __init__.py
│ └── test_app.py # pytest тесты
├── Dockerfile # Multi-stage build
├── requirements.txt
├── .gitlab-ci.yml # CI/CD конфигурация
├── .dockerignore
└── README.md
python -m venv venv
source venv/bin/activate # Linux/Mac
# или: venv\Scripts\activate # Windows
pip install -r requirements.txtuvicorn app.main:app --reloadПриложение будет доступно по адресу: http://localhost:8000
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
# Запуск всех тестов
pytest tests/ -v
# С отчётом о покрытии
pytest tests/ --cov=app --cov-report=htmldocker build -t gitlab-ci-demo:latest .docker run -p 8000:8000 gitlab-ci-demo:latestPipeline состоит из 3 stages:
- test:unit - запуск pytest тестов
- test:lint - проверка code style (flake8, black)
- build:docker - сборка Docker образа
- Использует multi-stage build для оптимизации размера
- Передаёт образ через artifacts в следующий stage
- push:registry - публикация образа в GitLab Container Registry
- deploy:manual - ручной деплой (опционально)
После успешного выполнения pipeline образ доступен по адресу:
registry.gitlab.com/your-username/gitlab-ci-python-app:latest
# Pull образа
docker pull registry.gitlab.com/your-username/gitlab-ci-python-app:latest
# Запуск
docker run -p 8000:8000 registry.gitlab.com/your-username/gitlab-ci-python-app:latestПроект использует встроенные переменные GitLab:
$CI_REGISTRY- адрес Container Registry$CI_REGISTRY_USER- пользователь для аутентификации$CI_REGISTRY_PASSWORD- токен доступа (автоматически предоставляется GitLab)$CI_REGISTRY_IMAGE- полный путь к image$CI_COMMIT_SHORT_SHA- короткий SHA коммита для тегирования
Settings → CI/CD → Variables:
API_KEY- для внешних APIDEPLOY_TOKEN- для деплоя в production- и т.д.W
Health check эндпоинт
Статус приложения
Расчёт статистики по массиву чисел
Request:
{
"numbers": [1.0, 2.0, 3.0, 4.0, 5.0]
}Response:
{
"mean": 3.0,
"median": 3.0,
"std_dev": 1.58,
"count": 5
}Информация о приложении и его возможностях