Що таке CI/CD
CI/CD — це автоматизація процесу перевірки, build та deployment змін у software.
Замість ручного копіювання files на production команда може використовувати повторюваний pipeline із визначеними stages та rules.
Continuous Integration
CI допомагає автоматично перевіряти зміни після push або pull request.
Pipeline може включати:
- dependency installation;
- linting;
- unit tests;
- build;
- static analysis;
- container image creation.
Continuous Delivery та Deployment
Після успішного build application можна автоматично підготувати або розгорнути у потрібне environment.
Типовий flow:
- developer push;
- automated checks;
- build;
- staging deployment;
- QA або approval;
- production deployment.
GitHub Actions
Для GitHub repositories можемо налаштовувати workflows для testing, build, Docker image creation та deployment.
Secrets і production credentials не повинні зберігатися безпосередньо у repository.
GitLab CI/CD
Для GitLab можемо створювати pipelines із jobs, stages, runners та environments.
CI/CD може запускатися на shared або self-hosted runners відповідно до requirements.
Docker
Docker дозволяє запакувати application і його runtime dependencies у container image.
Це допомагає зробити environment більш однаковим між:
- development;
- CI;
- staging;
- production.
Dockerfile
Створюємо Dockerfile відповідно до application stack та deployment environment.
При цьому важливо контролювати:
- base image;
- dependencies;
- build stages;
- permissions;
- secrets;
- image size;
- runtime configuration.
Docker Compose
Для development, staging або невеликих containerized systems Docker Compose може використовуватися для запуску декількох services.
Наприклад:
- application;
- database;
- Redis;
- queue worker;
- reverse proxy.
Container Registry
CI pipeline може збирати application image та передавати її у container registry.
Production environment розгортає конкретну version image, що спрощує version control і rollback.
Environment Configuration
Development, staging та production можуть мати різні:
- credentials;
- domains;
- databases;
- API endpoints;
- feature flags;
- resource limits.
Configuration відокремлюємо від application code.
Secrets Management
Passwords, tokens та API keys не повинні зберігатися у відкритому repository або Docker image.
Передаємо secrets через відповідний mechanism CI/CD або infrastructure.
Staging Environment
Staging дозволяє перевірити release у середовищі, максимально наближеному до production.
Особливо це важливо для:
- e-commerce;
- API integrations;
- database migrations;
- major updates;
- critical business systems.
Automated Testing
Pipeline може запускати automated tests до deployment.
Набір tests залежить від проєкту та може включати unit, integration, API або smoke testing.
Database Migrations
Database migrations повинні бути частиною контрольованого release process.
Для destructive або складних migrations окремо готуємо backup та rollback strategy.
Rollback
Якщо новий release має critical issue, повинна існувати можливість повернути попередню application version.
Rollback architecture залежить від code, containers, database changes та infrastructure.
Zero-Downtime Deployment
Для систем із високими requirements до availability можна проєктувати deployment без повної зупинки application.
Можливість такого deployment залежить від architecture та database changes.
CI/CD Security
Pipeline має доступ до production infrastructure, тому важливо контролювати:
- repository permissions;
- runner access;
- secrets;
- protected branches;
- deployment approvals;
- container permissions.
Docker не потрібен кожному проєкту
Для невеликого типового сайту containerization може додати більше complexity, ніж користі.
Docker найбільш корисний для custom applications, APIs, SaaS, декількох services та проєктів із регулярними releases.
Що отримує команда
Після налаштування CI/CD release process стає більш повторюваним:
- зміни проходять однакові checks;
- deployment менше залежить від ручних команд;
- версії application контролюються;
- staging і production розділені;
- простіше виконувати rollback.
Чому Promodex
Promodex налаштовує CI/CD з урахуванням application stack, а не як ізольований infrastructure script.
Можемо одночасно адаптувати backend/frontend, Docker environment, server configuration, database migrations та deployment process.