DEV Community

Cover image for github CI/CD Pipeline with Laravel
Shahariar Ikbal
Shahariar Ikbal

Posted on

github CI/CD Pipeline with Laravel

এটা আমার ১ম পোষ্ট তাই অনেক কিছুই গুছানো কথা হয়ত পাবেন না, তবে আমি যেভাবে কাজ করেছি বা করছি ঠিক সে ভাবেই বলার চেষ্টা করব ইনশাআল্লাহ।
সাধারণত বাংলায় তেমন কোন ভালো পোষ্ট না পেয়ে ভাবলাম আমি যেভাবে CI/CD ব্যবহার করে লারাভেল সাইট cPanel এ ডেপলয় করতেছি এবং করি সেটা একটা পোষ্ট হিসেবে থাকলে, আমার নিজেরও পরে কাজে লাগবে এবং অনেকে ভাইয়ের উপকারেও আসতে পারে। তো চলুন আমরা মেইন কাজে চলে যাই।

শুরুতেই আমাদের কে cPanel এ লগইন করতে হবে, এবং FTP Accounts মেনুতে যেতে হবে। ওখানে যাওয়ার পরে আমাদের কে একটা FTP Account খুলতে হবে। এবং সেখানে যদি Successful ভাবে Account create হয়ে যায় তাহলে নিচের ছবির মত দেখতে পাওয়া যাবে।

Image description

Image description

Image description

অ্যাকাউন্ট ক্রিয়েট হয়ে গেলে username, server, port save করে রাখুন এ গুলো একটু পরেই কাজে লাগবে।
এর পরেই আপনি ডাটাবেজ ক্রিয়েট করে নেন, আপনি ডেভেলপার হলে অবশ্যই এটা জানেন, তাই এটা দেখানো হলো না।

এর পরেই আপনি github login করুন, এবং আপনার প্রোজেক্ট এর রিপসিটরি তে জান।
এবং নিচের ছবির মত কাজ করুন।
Image description

Image description
এর পরেই আপনি Action menu তে চলে জান, এবং নিচের মত একটা ইন্টারফেস দেখতে পাবেন, এখানে থেকে set up a workflow yourself এখানে ক্লিক করুন এর পরেই আপনাকে বলবে yml এ Logic লিখুন। নিচের ফাইলটা কপি পেস্ট করে, ডাটাবেজ নাম, ইউসার নাম, পাসওয়ার্ড আপনার গুলো দিন।
`name: Laravel CI/CD
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]

jobs:
web-deploy:
name: Deploying
runs-on: ubuntu-latest

services:
  mysql:
    image: mysql:5.7
    ports:
      - 3306:3306
    env:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: dbname
      MYSQL_USER: username
      MYSQL_PASSWORD: password
    options: '--health-cmd="mysqladmin ping --silent" --health-interval=10s --health-timeout=5s --health-retries=3'

steps:
  - uses: actions/checkout@v2.3.2

  - name: Setup PHP
    uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e
    with:
      php-version: '8.1.21'

  - name: Copy .env
    run: php -r "file_exists('.env') || copy('.env.example', '.env');"

  - name: Update .env for CI environment
    run: |
      sed -i 's/^DB_CONNECTION=.*/DB_CONNECTION=mysql/' .env
      sed -i 's/^DB_HOST=.*/DB_HOST=127.0.0.1/' .env
      sed -i 's/^DB_PORT=.*/DB_PORT=3306/' .env
      sed -i 's/^DB_DATABASE=.*/DB_DATABASE=dbname/' .env
      sed -i 's/^DB_USERNAME=.*/DB_USERNAME=username/' .env
      sed -i 's/^DB_PASSWORD=.*/DB_PASSWORD=password/' .env

  - name: Install Dependencies
    run: composer install --ignore-platform-reqs

  - name: Generate key
    run: php artisan key:generate

  - name: Wait for MySQL to be ready
    run: |
      until mysqladmin ping --host=127.0.0.1 --user=username --password=password --silent; do
        echo "Waiting for database connection..."
        sleep 5
      done

  - name: Test Database Connection
    run: php -r "new PDO('mysql:host=127.0.0.1;dbname=dbname', 'username', 'password');"

  - name: Rollback Migrations and Seed
    run: php artisan migrate:fresh --seed --verbose

  - name: Directory Permissions
    run: chmod -R 775 storage

  - name: 📂 Sync files
    uses: SamKirkland/FTP-Deploy-Action@4.0.0
    with:
      server: ${{ secrets.FTP_SERVER }}
      username: ${{ secrets.FTP_USERNAME }}
      password: ${{ secrets.FTP_PASSWORD }}
      server-dir: /
      local-dir: ./
      exclude: |
        vendor/*
        node_modules/*
Enter fullscreen mode Exit fullscreen mode

`

Image description
এর পরেই Commit changes Button এ ক্লিক করুন, তাহলে যদি আপনার গিট এ master branch এ কোন কোড থাকে তাহলে সে গুলো আপনার cpanel এর public_html folder এ জমা হবে। এবং লোকাল এ আপনাকে master branch থেকে পুল নিয়ে আপডেট থাকতে হবে। ১ম বার অনেক সময় নিবে আপলোড দেয়ার সময়, কিন্তু পরের বার থেকে আর সময় নিবে না তেমন। master branch এ নতুন কোন কোড push হয়ে গেলেই আপনাআপনি সার্ভারে চলে যাবে কোন প্রকার ঝামেলা ছাড়া, এতে করে সময় অনেক কম লাগে, কাজে অনেক বুস্টিং পাওয়া যায়।

Image description

আসা করি আপনারা বুজতে পেরেছেন। কোন ভুল হলে কমেন্ট এ জানিয়ে দিবেন দয়া করে।
আর ভাল লাগলে কমেন্ট করবেন
ধন্যবাদ।

Top comments (0)