Пробую писать примитивный CI/CD для Nest.js приложения с использованием GitHub Actions и PM2(часть 1)🧐
О том, что такое CI/CD простыми словами, можно почитать тут
1. Создание файла workflow
В корне вашего проекта создайте папку .github/workflows, а внутри нее файл deploy.yml
workflow — это набор инструкций для автоматизации процессов сборки, тестирования, деплоя и др, которые обычно выполняются вручную.
name: Deploy Nest.js app
on:
push:
branches:
- development # Триггер для запуска workflow при пуше в ветку "development". Для этого вам необходимо создать у себя эту ветку
jobs:
build:
runs-on: ubuntu-latest #Используется Ubuntu как окружение для запуска
steps:
- name: Checkout code
uses: actions/checkout@v3 #Клонируем репозиторий
- name: Set up Node.js
uses: actions/setup-node@v3 # Устанавливаем Node.js окружение
with:
node-version: 18 #Устанавливаем версию Node.js 18
- name: Install dependencies
run: yarn install # Установка зависимостей проекта
deploy:
runs-on: ubuntu-latest # Среда для выполнения деплоя
needs: build #Выполняется после этапа сборки
steps:
- name: Checkout code
uses: actions/checkout@v3 #Снова клонируем код на этапе деплоя
- name: Deploy to server via SSH with password
uses: appleboy/ssh-action@v0.1.2 # Используем экшн для SSH подключения
with:
host: ${{ secrets.SERVER_HOST }} # Host сервера из секретов
username: ${{ secrets.SERVER_USER }} # Имя пользователя для SSH-подключения
port: ${{ secrets.SERVER_PORT }} // SSH порт
password: ${{ secrets.SERVER_PASSWORD }} # Пароль для SSH, хранимый в секретах
script: | # Набор команд, которые будут выполняться на сервере
cd /uzver/BlissCode # Переходим в директорию проекта на сервере
git pull origin development --strategy-option=theirs # При выполнении команды git pull вы можете столкнуться с ошибкой - "Need to specify how to reconcile
divergent branches". Это происходит, когда в вашей локальной и удаленной ветке есть расхождения, и Git не знает, какую стратегию выбрать. Решение - указать стратегию слияния theirs, чтобы всегда использовать изменения из удаленной ветки
npx prisma migrate dev # Применяем миграции Prisma
yarn install # Устанавливаем зависимости проекта на сервере
yarn build # Собираем проект
pm2 restart all # Перезапускаем все процессы через pm2
2. Настройка секретов GitHub
Чтобы избежать хардкодинга важных данных, таких как SSH-пароли или ключи, используем GitHub Secrets:
• Перейдём в репозиторий на GitHub
• Откроем: Settings -> Secrets and variables -> Actions
• Создадим секреты для сервера (SERVER_HOST, SERVER_PASSWORD, SERVER_USER, SERVER_PORT)
3. Тестим
Попробуйте создать PR и слить в ветку development🖥
Присоединяйтесь к нашему общему чату и Discord серверу :)