Deployment & DevOps

CI/CD Pipeline Setup for AI Applications: A Complete Guide

Set up a professional CI/CD pipeline for your AI SaaS using GitHub Actions, automated testing, staging environments, and zero-downtime production deployments.

Muhammad TalhaFounder & Lead Engineer, Devs & Logics
May 5, 20259 min read

Why CI/CD is Non-Negotiable for AI SaaS Products

Manual deployments kill startups. A single bad deploy can corrupt user data, break billing, or expose API keys — and manual processes make these mistakes inevitable. CI/CD pipelines catch bugs before they reach users and let your team ship confidently multiple times per day.

The Modern AI SaaS CI/CD Stack

  • CI: GitHub Actions (free for public repos, $0.008/minute for private)
  • Testing: Vitest + Playwright for E2E
  • Staging: Vercel Preview Deployments
  • Production: Vercel (or Railway/AWS ECS for custom infrastructure)
  • Secrets: GitHub Secrets + Vercel Environment Variables

Step 1: Set Up GitHub Actions Workflow

Create .github/workflows/ci.yml:

name: CI/CD Pipeline

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'
      - run: npm ci
      - run: npm run lint
      - run: npm run type-check
      - run: npm run test
      env:
        DATABASE_URL: ${{ secrets.TEST_DATABASE_URL }}
        OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

  deploy-staging:
    needs: test
    if: github.ref === 'refs/heads/develop'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: amondnet/vercel-action@v25
        with:
          vercel-token: ${{ secrets.VERCEL_TOKEN }}
          vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
          vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
          scope: ${{ secrets.VERCEL_ORG_ID }}

Step 2: Add Automated Tests

Unit Tests with Vitest

import { describe, it, expect } from 'vitest';
import { parseAIResponse, calculateCost } from '@/lib/ai-utils';

describe('AI Utilities', () => {
  it('parses streaming response correctly', () => {
    expect(parseAIResponse('{"result": "ok"}')).toEqual({ result: 'ok' });
  });

  it('calculates GPT-4o cost accurately', () => {
    expect(calculateCost(1000, 500)).toBeCloseTo(0.0125);
  });
});

E2E Tests with Playwright

import { test, expect } from '@playwright/test';

test('user can sign up and use AI feature', async ({ page }) => {
  await page.goto('/signup');
  await page.fill('[name=email]', 'test@example.com');
  await page.fill('[name=password]', 'SecurePass123!');
  await page.click('[type=submit]');
  await expect(page).toHaveURL('/dashboard');
});

Step 3: Environment Promotion Strategy

Use a three-tier environment strategy:

  1. Development — local with .env.local, mock AI responses to save costs
  2. Staging — mirrors production, uses real APIs with test keys
  3. Production — live keys, monitored, alerted

Step 4: Database Migration Safety

Run migrations as part of your CI/CD — but never automatically on production. Use a migration gate:

# In your deploy script
npm run db:migrate:check  # Fails if pending migrations exist
# Require manual approval for production migration runs

Step 5: Rollback Strategy

Vercel keeps the last 10 deployments accessible. To rollback: Vercel Dashboard → Deployments → click any previous deployment → "Promote to Production". Takes 30 seconds.

For database changes, always write backward-compatible migrations (add columns before removing old ones).

Monitoring Your Pipeline

  • Set Slack notifications for failed CI runs
  • Track deployment frequency (aim for daily)
  • Monitor time from commit to production (aim for under 10 minutes)
  • Track mean time to recovery (MTTR) for incidents

Ready to Build Your AI SaaS?

Devs & Logics helps startups and businesses build production-ready AI SaaS products. Let's discuss your project.

Related Articles