Skip to content
Home DevOps Introduction to CI/CD

Introduction to CI/CD

Where developers are forged. · Structured learning · Free forever.
📍 Part of: CI/CD → Topic 1 of 14
CI/CD explained — continuous integration, continuous delivery vs deployment, pipeline stages, GitHub Actions example, and the business case for CI/CD.
⚙️ Intermediate — basic DevOps knowledge assumed
In this tutorial, you'll learn
CI/CD explained — continuous integration, continuous delivery vs deployment, pipeline stages, GitHub Actions example, and the business case for CI/CD.
  • CI catches integration bugs early — on every push, not at release time.
  • Continuous Delivery: every successful build is deployable. Continuous Deployment: it deploys automatically.
  • Pipeline stages: lint → test → build → deploy. Each stage gates the next.
✦ Plain-English analogy ✦ Real code with output ✦ Interview questions
Quick Answer

CI (Continuous Integration) automatically builds and tests code on every push. CD (Continuous Delivery) automatically produces a deployable artifact after every successful CI run. Continuous Deployment goes one step further — automatically deploying to production without human approval. A CI/CD pipeline catches bugs early, reduces deployment risk, and enables fast iteration.

A GitHub Actions CI Pipeline

Example · YAML
123456789101112131415161718192021222324252627282930313233343536373839
# .github/workflows/ci.yml
name: CI

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

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Cache pip packages
        uses: actions/cache@v4
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}

      - name: Install dependencies
        run: pip install -r requirements.txt

      - name: Run linter
        run: ruff check .

      - name: Run tests with coverage
        run: pytest --cov=. --cov-report=xml

      - name: Upload coverage
        uses: codecov/codecov-action@v4
▶ Output
# Pipeline runs on every push and PR to main

Adding CD — Automatic Deployment

Example · YAML
12345678910111213141516171819202122232425
# Add to the same file — deploy job runs after test passes
  deploy:
    needs: test        # only run if test job passes
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'  # only deploy from main

    steps:
      - uses: actions/checkout@v4

      - name: Build Docker image
        run: |
          docker build -t myapp:${{ github.sha }} .
          docker tag myapp:${{ github.sha }} myapp:latest

      - name: Push to registry
        run: |
          echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
          docker push myapp:${{ github.sha }}
          docker push myapp:latest

      - name: Deploy to staging
        run: |
          # SSH to server and pull new image
          ssh -o StrictHostKeyChecking=no deploy@${{ secrets.STAGING_HOST }} \
            "docker pull myapp:latest && docker compose up -d"
▶ Output
# Deploy runs only on main branch after tests pass

🎯 Key Takeaways

  • CI catches integration bugs early — on every push, not at release time.
  • Continuous Delivery: every successful build is deployable. Continuous Deployment: it deploys automatically.
  • Pipeline stages: lint → test → build → deploy. Each stage gates the next.
  • Secrets in CI must be stored as encrypted environment variables — never hardcode credentials.
  • Fast feedback loop is the goal — a CI pipeline longer than 10 minutes loses its value.

Interview Questions on This Topic

  • QWhat is the difference between CI and CD?
  • QWhat stages should a good CI/CD pipeline have?
  • QWhat is the difference between Continuous Delivery and Continuous Deployment?

Frequently Asked Questions

What is the difference between Continuous Delivery and Continuous Deployment?

Continuous Delivery means every successful build produces an artifact that could be deployed — but a human decides when. Continuous Deployment goes all the way: every successful build is automatically deployed to production with no human approval step. Most teams practice Continuous Delivery for production (human approval gate) but Continuous Deployment to staging.

What should a good CI pipeline include?

Minimum: linting, unit tests, integration tests. Better: security scanning (SAST), dependency vulnerability check, test coverage threshold enforcement, and Docker image build verification. For production services: end-to-end tests in a staging environment before deploying to production.

🔥
Naren Founder & Author

Developer and founder of TheCodeForge. I built this site because I was tired of tutorials that explain what to type without explaining why it works. Every article here is written to make concepts actually click.

Next →GitHub Actions Tutorial
Forged with 🔥 at TheCodeForge.io — Where Developers Are Forged