Tech AI Insights

CI/CD Pipeline: The 5-Minute Guide to Easily Setting Up a CI/CD Pipeline with GitHub Actions

What is a CI/CD Pipeline? A Simple Explanation for Developers

A CI/CD pipeline (Continuous Integration and Continuous Deployment) is like an automated assembly line for software development. It helps developers build, test, and deploy code efficiently, reducing manual effort and ensuring high-quality software delivery.

Why is a CI/CD Pipeline Important for Developers?

A CI/CD pipeline ensures fast, error-free software updates, making development more efficient and reliable. Whether you’re working on a website, mobile app, or enterprise software, automation helps maintain quality, speed, and security.

  • Saves time by automatically checking for errors.
  • Ensures code quality through automated testing.
  • Helps in faster delivery of updates and new features.
  • Reduces human errors by automating repetitive tasks.

Real-Life Example: A Bakery’s Automated Process

Imagine you own a cake shop. Instead of making every cake manually, you set up an automated cake-making machine that:

1. Mixes ingredients – Just like a developer writes code.
2. Bakes the cake – Similar to automated testing of the code.
3. Decorates the cake – Code is reviewed and improved.
4. Packs and delivers – The code is deployed to users.

If there is a problem in any step, the machine stops and alerts you to fix it before moving forward. This way, you don’t serve a bad cake to your customers.—just like a CI/CD pipeline ensures that software updates are tested and error-free before reaching users, just like how an automated bakery ensures perfect cakes every time

Setting Up a CI/CD Pipeline Using GitHub Actions

Using a CI/CD pipeline will make your development process faster, smoother, and more reliable. In this blog, you’ll learn how to set up a CI/CD pipeline using GitHub Actions.

Step 1: Choose a CI/CD Tool

For GitHub projects,  GitHub Actions is a great choice.

Step 2: Create a .github/workflows Folder in Your Project

First, check if the .github folder exists in your project. If it does, create a workflows folder inside it to store workflow files.

1️⃣ Open your project folder.

2️⃣ Inside the project, create this folder structure:

.github/workflows

3️⃣ Inside the workflows folder, create a new Yaml file named ci-cd.yml.

Step 3: Define the CI/CD Pipeline

Copy and paste the following YAML configuration into ci-cd.yml file:

name: CI/CD Pipeline
on:
  push:
    branches:
      - main   # Triggers when code is pushed to the main branch
  pull_request:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
        
      - name: Set up PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.3'  # Change to your PHP version
          
      - name: Install Composer dependencies
        run: composer install --no-interaction --prefer-dist --optimize-autoloader

      - name: Run Laravel Cache Clear
        run: php artisan cache:clear
     
      - name: Run Laravel Migrations
        run: php artisan migrate --force
 
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 20
          
      - name: Install dependencies
        run: npm install
        
      - name: Run build
        run: npm run build
        
      - name: Deploy to Server
        if: success()
        run: |
          echo "Deploying to production server..."
          # Add your deployment command here

Let’s break down this file step by step to make the workflow easier to understand.

Workflow Name & When It Runs
name: CI/CD Pipeline
on:
  push:
    branches:
      - main  # Runs pipeline when code is pushed to the main branch
  pull_request:
    branches:
      - main

1. The workflow is named “CI/CD Pipeline”.
2. It runs automatically when you push new code to the main branch or create a pull request targeting main

Define a Job
jobs:
  build:
    runs-on: ubuntu-latest

– This workflow has a single job named build.
– The job will run on a virtual machine with Ubuntu (latest version).

Steps to Run the Job

Each step runs one after another in the specified order.

Step 1: Checkout Code
- name: Checkout code
  uses: actions/checkout@v3

– This downloads your project’s code into the GitHub Actions machine

Step 2: Set Up PHP
- name: Set up PHP
  uses: shivammathur/setup-php@v2
  with:
    php-version: '8.3'

– This installs PHP version 8.3 (you can change this version if needed).

Step 3: Install Composer Dependencies
- name: Install Composer dependencies
  run: composer install --no-interaction --prefer-dist --optimize-autoloader

– Installs all Laravel backend dependencies using Composer.
– The -no-interaction flag ensures it runs without asking for user input.

Step 4: Clear Laravel Cache
- name: Run Laravel Cache Clear
  run: php artisan cache:clear

– Clears Laravel’s cache to ensure the app runs with fresh data.

Step 5: Run Laravel Migrations

If your application requires database migrations, add this:

-name: Run Laravel Migrations
run: php artisan migrate --force

Benefit: Ensures database changes are applied after deployment.

Step 6: Set Up Node.js
-name: Set up Node.js
  uses: actions/setup-node@v3
  with:
    node-version: 20

– Install Node.js version 20 (used for frontend dependencies and JavaScript tools).

Step 7: Install Frontend Dependencies
- name: Install dependencies
  run: npm install

– Installs Node.js dependencies (like Vue.js, React, Tailwind CSS, etc.).

Step 8: Run build
- name: Run build
  run: npm run build

– Runs automated tests to check if everything works correctly.
– You can change this command if you’re using Vue.js or Laravel-specific tests.

Step 9: Deploy to Server (Only if Tests Pass)
- name: Deploy to Server
  if: success()
  run: |
    echo "Deploying to production server..."
    # Add your deployment command here

– Only runs if all previous steps succeed (tests pass).
– Deploys your project to a production server.
– You need to replace # Add your deployment command here with actual deployment commands (e.g., SSH into the server and pull the latest code).

Conclusion

A CI/CD pipeline simplifies development, enhances efficiency, and ensures error-free deployments. By automating builds, tests, and deployments, developers can focus on writing quality code without worrying about manual processes.

For more insightful tutorials, visit our Tech Blog and explore the latest in Laravel, AI, and Vue.js development!

Scroll to Top