Что обычно находится в Bash-скрипте для CI/CD?

Ответ

Bash-скрипт для CI/CD автоматизирует этапы сборки, тестирования и развертывания приложения. Его структура обычно включает следующие блоки:

  1. Настройка окружения и установка зависимостей:

    # Установка зависимостей для PHP и JavaScript проекта
    composer install --no-dev --prefer-dist
    npm ci
  2. Запуск статического анализа и тестов:

    # Проверка синтаксиса и стиля кода
    php -l src/
    vendor/bin/phpcs --standard=PSR12 src/
    # Запуск юнит-тестов
    vendor/bin/phpunit --coverage-text
    npm run test
  3. Сборка проекта (build):

    # Компиляция фронтенд-ассетов
    npm run production
    # Оптимизация автозагрузчика и кэша для Laravel/Symfony
    php artisan optimize
    composer dump-autoload -o
  4. Развертывание (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 — святая команда. Чтоб скрипт взъебнулся при первой же ошибке, а не пытался доиграть спектакль с оторванной ногой.
  • Логируй всё. И отправляй уведомления в слак. Если пайплайн впендюрился, ты должен узнать об этом первым, а не от разъярённых пользователей.
  • Дели на этапы. Отдельно сборка, отдельно тесты, отдельно деплой. Так и понять проще, где манда с ушами вылезла, и откатить можно только кусок.

В общем, если делать по уму, то это мощнейший инструмент. А если халтурить — то хуй в пальто, который тебе же в жопу и прилетит в три часа ночи. Э, сабака сука, думай головой!