Ответ
Я настраивал и поддерживал CI/CD-пайплайны для PHP-проектов, что позволило сократить время от коммита до продакшена и повысить стабильность релизов.
Мой стек и практики:
- Инструменты: GitLab CI/CD (основной опыт), GitHub Actions, Bitbucket Pipelines.
- Контейнеризация: Сборка Docker-образов с многоступенчатыми билдами для уменьшения размера.
- Тестирование: Параллельный запуск юнит- и функциональных тестов (PHPUnit, Pest), статический анализ (PHPStan, Psalm).
- Деплой: Автоматический деплой в разные среды (staging/production) с ручным подтверждением для прода. Использовал Ansible для конфигурации серверов и деплоя на VPS, а также Helm для Kubernetes.
Пример .gitlab-ci.yml для Laravel-проекта:
stages:
- test
- build
- deploy
variables:
DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
# 1. Стадия тестирования
php-tests:
stage: test
image: php:8.2-fpm
services:
- mysql:8.0
- redis:alpine
script:
- apt-get update && apt-get install -y git unzip libzip-dev
- docker-php-ext-install pdo_mysql zip
- curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
- composer install --no-progress --no-interaction
- cp .env.testing .env
- php artisan key:generate
- php artisan migrate --force
- php artisan db:seed
- vendor/bin/phpunit --coverage-text --colors=never
# 2. Стадия сборки Docker-образа
build-image:
stage: build
image: docker:latest
services:
- docker:dind
script:
- docker build -t $DOCKER_IMAGE .
- docker push $DOCKER_IMAGE
only:
- main
- develop
# 3. Стадия деплоя на staging
deploy-to-staging:
stage: deploy
image: alpine:latest
script:
- apk add --no-cache openssh-client
- echo "$SSH_PRIVATE_KEY" > key.pem && chmod 600 key.pem
- ssh -i key.pem -o StrictHostKeyChecking=no deploy@staging-server "docker pull $DOCKER_IMAGE && docker-compose up -d"
environment:
name: staging
url: https://staging.example.com
only:
- develop
Основной результат — полная автоматизация процесса от пулл-реквеста до продакшена, где ручное вмешательство требуется только для подтверждения деплоя на production.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶