Пример простого сценария развертывания (deployment) приложения при обновлении главной ветки на github. 

  • Код отправляется в репозиторий в ветку main
  • GitHub запускает виртуальную машину
  • Код скачивается
  • Устанавливаются зависимости
  • Запускаются тесты
  • Проект собирается
  • Приложение разворачивается на VPS сервер с помощью безопасного протокола SSH
  • Код обновляется и сервис перезапускается

Сервер использует Linux с вэб-сервером Nginx, путь для установки приложения: /var/www/myapp

Для использования на github разместите файл со скриптом, написанным на языке YML ваш каталог репозитория .github/workflows/deploy.yml

name: CI/CD Deploy Pipeline   # Название пайплайна

on:
  push:
    branches:
      - main                  # Запуск пайплайна при push в ветку main

jobs:
  deploy:
    runs-on: ubuntu-latest    # Используем Ubuntu-сервер от GitHub

    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        # Загружает код репозитория в CI-среду

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
        # Устанавливает Node.js (если нужен для сборки фронтенда)

      - name: Install dependencies
        run: npm install
        # Устанавливает зависимости проекта

      - name: Run tests
        run: npm test
        # Запускает тесты (если тесты упадут — деплой не пойдет)

      - name: Build project
        run: npm run build
        # Сборка проекта (например, React/Vue)

      - name: Deploy to VPS via SSH
        uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.SERVER_HOST }}      # IP или домен сервера
          username: ${{ secrets.SERVER_USER }}  # Пользователь на сервере
          key: ${{ secrets.SERVER_SSH_KEY }}    # SSH-ключ
          script: |
            cd /var/www/myapp
            git pull origin main
            npm install
            npm run build
            pm2 restart myapp || pm2 start app.js --name myapp
        # Подключение к серверу и деплой приложения

В настройках репозитория (Settings → Secrets) нужно добавить:

SERVER_HOST       # IP сервера
SERVER_USER       # например: deploy
SERVER_SSH_KEY    # приватный SSH-ключ

Обратите внимание на две команды: "run" и "script" - они обе запускают bash-команды или скрипты, но run запускает bash код на CI-сервере, а script - на вашем VPS сервере, где размещено приложение.