Workflow Flow

When code is pushed to a supported branch, the workflow starts on a fresh Ubuntu runner.
The branch name is read and used to decide the deployment configuration such as server, project folder, authentication method, and PM2 process ID.

Based on the branch, environment variables are set dynamically.
Non-production branches (beta, testing, client) deploy to the same server using password-based SSH authentication, while staging and production deploy to separate servers using SSH key authentication.

Only the deployment step matching the selected authentication type runs.
The workflow connects to the target server, force-syncs the code with the repository, installs dependencies, and restarts the application using PM2.

This ensures the server always runs the exact state of the repository and removes manual deployment steps.

CI/CD Deployment Workflow Explained Guide

Purpose

  • Automates deployments
  • Eliminates manual server drift

Branch Logic

  • Branch is read from gitea.ref_name
  • case block maps branch to configuration

Environment Design

  • beta / testing / client share a server to reduce cost
  • staging and production are isolated for safety

Authentication

  • Password authentication for non-production
  • SSH key authentication for staging and production

Git Strategy

  • git reset --hard ensures the repository is the single source of truth

PM2 Strategy

  • PM2 manages long-running processes
  • Each environment has a dedicated PM2 ID

Intentional Exclusions

  • No .env management
  • No PM2 process creation
  • No Docker builds

CI/CD Deployment Workflow Operational Guide (Script Accurate)

Trigger

  • Runs on push to configured branches
  • Branch name controls deployment behavior

Branches

  • main
  • beta
  • testing
  • client
  • staging
  • production

Branch to Server Mapping

  • beta / testing / clientBETA server (password authentication)
  • stagingSTAGING server (SSH key authentication)
  • productionPRODUCTION server (SSH key authentication)

Required Secrets

BETA (beta / testing / client)

  • BETA_SERVER_HOST
  • BETA_SERVER_USERNAME
  • BETA_SERVER_PASSWORD
  • BETA_SERVER_PORT

STAGING

  • STAGING_SERVER_HOST
  • STAGING_SERVER_USERNAME
  • STAGING_SERVER_PORT
  • STAGING_SERVER_KEY

PRODUCTION

  • PRODUCTION_SERVER_HOST
  • PRODUCTION_SERVER_USERNAME
  • PRODUCTION_SERVER_PORT
  • PRODUCTION_SERVER_KEY

Commands Executed

git fetch
git reset --hard origin/<branch>
git pull origin <branch>
npm install
pm2 restart <PM2_ID>
Description
No description provided
Readme 36 KiB
Languages
JavaScript 100%