Ответ
Bash-скрипт для CI/CD автоматизирует этапы сборки, тестирования и развертывания приложения. Его структура обычно включает следующие блоки:
-
Настройка окружения и установка зависимостей:
# Установка зависимостей для PHP и JavaScript проекта composer install --no-dev --prefer-dist npm ci -
Запуск статического анализа и тестов:
# Проверка синтаксиса и стиля кода php -l src/ vendor/bin/phpcs --standard=PSR12 src/ # Запуск юнит-тестов vendor/bin/phpunit --coverage-text npm run test -
Сборка проекта (build):
# Компиляция фронтенд-ассетов npm run production # Оптимизация автозагрузчика и кэша для Laravel/Symfony php artisan optimize composer dump-autoload -o -
Развертывание (deploy):
# Копирование файлов на сервер rsync -avz --delete ./build/ user@production-server:/var/www/app/ # Выполнение миграций и команд на сервере ssh user@production-server "cd /var/www/app && php artisan migrate --force"
Ключевые практики:
- Использование переменных окружения (
$CI_COMMIT_SHA,$DEPLOY_PATH) для конфигурации. - Проверка кодов возврата команд (
set -e) для немедленного прекращения скрипта при ошибке. - Логирование и отправка уведомлений (например, в Slack) о результатах сборки.
- Разделение на отдельные скрипты или этапы (build, test, deploy) для лучшей поддержки.
Ответ 18+ 🔞
Э, слушай, история про эти ваши CI/CD скрипты — это просто ёперный театр какой-то. Сидишь такой, пишешь эту магию, а потом она тебе всю работу делает, пока ты кофе пьёшь. Красота, да? Но если накосячить — будет вам не Хиросима, а настоящий Нигерсраки в продакшене, чувак.
Вот смотри, обычно всё начинается с того, что надо окружение поднять. Типа, «эй, машина, давай-ка всё, что нужно для работы, установим». И тут же первая засада — если зависимости не встали, всё, пиздец, дальше можно не продолжать.
# Ставим всё, что нужно для PHP и JS. Без всяких dev-пакетов, чтоб не тащить лишнее.
composer install --no-dev --prefer-dist
npm ci
Дальше самый важный этап — надо проверить, не насрал ли ты в код. Это как приходишь в гости — сначала вытираешь ноги, а потом уже на паркет. Запускаем всякие линтеры и тесты. Если тут ошибка — терпения ноль, ебать, скрипт должен сразу сдохнуть, а не ползти дальше с гнилым кодом.
# Глянем, нет ли синтаксических косяков
php -l src/
# А теперь проверим, по правилам ли пишешь. PSR12, не хухры-мухры.
vendor/bin/phpcs --standard=PSR12 src/
# И главное — запускаем тесты. Если они не прошли, то какой, нахуй, деплой?
vendor/bin/phpunit --coverage-text
npm run test
Представляешь, если пропустить этот шаг? Выкатишь в прод какую-нибудь дичь, а потом сидишь и бздишь, что всё упало. Доверия к такому процессу — ноль ебать.
Ну, допустим, тесты прошли. Удивление пиздец, но бывает и такое. Теперь можно собирать проект в боевую версию. Тут уже всякие минификации, оптимизации.
# Собираем фронтенд в один здоровенный бандл
npm run production
# Чистим и кешируем всё, что можно, для скорости
php artisan optimize
composer dump-autoload -o
Всё, артефакт готов. Теперь самый волнительный момент — деплой. Тут уже волнение ебать, потому что одно неверное движение — и продакшен накрылся медным тазом.
# Аккуратно, как сапёр, копируем файлы на боевой сервер
rsync -avz --delete ./build/ user@production-server:/var/www/app/
# И запускаем миграции. С ключом --force, потому что на проде не до вопросов.
ssh user@production-server "cd /var/www/app && php artisan migrate --force"
Ключевые практики, без которых ты просто распиздяй:
- Переменные окружения — твои лучшие друзья. Никаких паролей и путей прямо в коде. Используй
$DEPLOY_PATH,$CI_COMMIT_SHA. Иначе подозрение ебать чувствую, что скоро всё утечёт. set -e— святая команда. Чтоб скрипт взъебнулся при первой же ошибке, а не пытался доиграть спектакль с оторванной ногой.- Логируй всё. И отправляй уведомления в слак. Если пайплайн впендюрился, ты должен узнать об этом первым, а не от разъярённых пользователей.
- Дели на этапы. Отдельно сборка, отдельно тесты, отдельно деплой. Так и понять проще, где манда с ушами вылезла, и откатить можно только кусок.
В общем, если делать по уму, то это мощнейший инструмент. А если халтурить — то хуй в пальто, который тебе же в жопу и прилетит в три часа ночи. Э, сабака сука, думай головой!