Skip to content

aivor7ex/gitlab-ci-python-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitLab CI/CD Python Demo Application

Python FastAPI Docker GitLab CI

Демонстрационный проект для портфолио, показывающий настройку полноценного 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.txt

Запуск приложения

uvicorn app.main:app --reload

Приложение будет доступно по адресу: http://localhost:8000

API Documentation

🧪 Тестирование

# Запуск всех тестов
pytest tests/ -v

# С отчётом о покрытии
pytest tests/ --cov=app --cov-report=html

🐳 Docker

Сборка образа

docker build -t gitlab-ci-demo:latest .

Запуск контейнера

docker run -p 8000:8000 gitlab-ci-demo:latest

🔄 CI/CD Pipeline

Pipeline состоит из 3 stages:

1️⃣ Stage: Test

  • test:unit - запуск pytest тестов
  • test:lint - проверка code style (flake8, black)

2️⃣ Stage: Build

  • build:docker - сборка Docker образа
  • Использует multi-stage build для оптимизации размера
  • Передаёт образ через artifacts в следующий stage

3️⃣ Stage: Push

  • push:registry - публикация образа в GitLab Container Registry
  • deploy:manual - ручной деплой (опционально)

📦 GitLab Container Registry

После успешного выполнения 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 Variables

Проект использует встроенные переменные GitLab:

  • $CI_REGISTRY - адрес Container Registry
  • $CI_REGISTRY_USER - пользователь для аутентификации
  • $CI_REGISTRY_PASSWORD - токен доступа (автоматически предоставляется GitLab)
  • $CI_REGISTRY_IMAGE - полный путь к image
  • $CI_COMMIT_SHORT_SHA - короткий SHA коммита для тегирования

Добавление custom переменных

Settings → CI/CD → Variables:

  • API_KEY - для внешних API
  • DEPLOY_TOKEN - для деплоя в production
  • и т.д.W

📊 API Endpoints

GET /

Health check эндпоинт

GET /health

Статус приложения

POST /calculate

Расчёт статистики по массиву чисел

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
}

GET /info

Информация о приложении и его возможностях

About

A simple Python application with CI setup.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published