github CI/CD Pipeline with Laravel
Shahariar Ikbal
Posted on September 12, 2024
এটা আমার ১ম পোষ্ট তাই অনেক কিছুই গুছানো কথা হয়ত পাবেন না, তবে আমি যেভাবে কাজ করেছি বা করছি ঠিক সে ভাবেই বলার চেষ্টা করব ইনশাআল্লাহ।
সাধারণত বাংলায় তেমন কোন ভালো পোষ্ট না পেয়ে ভাবলাম আমি যেভাবে CI/CD ব্যবহার করে লারাভেল সাইট cPanel এ ডেপলয় করতেছি এবং করি সেটা একটা পোষ্ট হিসেবে থাকলে, আমার নিজেরও পরে কাজে লাগবে এবং অনেকে ভাইয়ের উপকারেও আসতে পারে। তো চলুন আমরা মেইন কাজে চলে যাই।
শুরুতেই আমাদের কে cPanel এ লগইন করতে হবে, এবং FTP Accounts মেনুতে যেতে হবে। ওখানে যাওয়ার পরে আমাদের কে একটা FTP Account খুলতে হবে। এবং সেখানে যদি Successful ভাবে Account create হয়ে যায় তাহলে নিচের ছবির মত দেখতে পাওয়া যাবে।
অ্যাকাউন্ট ক্রিয়েট হয়ে গেলে username, server, port save করে রাখুন এ গুলো একটু পরেই কাজে লাগবে।
এর পরেই আপনি ডাটাবেজ ক্রিয়েট করে নেন, আপনি ডেভেলপার হলে অবশ্যই এটা জানেন, তাই এটা দেখানো হলো না।
এর পরেই আপনি github login করুন, এবং আপনার প্রোজেক্ট এর রিপসিটরি তে জান।
এবং নিচের ছবির মত কাজ করুন।
এর পরেই আপনি 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/*
`
এর পরেই Commit changes Button এ ক্লিক করুন, তাহলে যদি আপনার গিট এ master branch এ কোন কোড থাকে তাহলে সে গুলো আপনার cpanel এর public_html folder এ জমা হবে। এবং লোকাল এ আপনাকে master branch থেকে পুল নিয়ে আপডেট থাকতে হবে। ১ম বার অনেক সময় নিবে আপলোড দেয়ার সময়, কিন্তু পরের বার থেকে আর সময় নিবে না তেমন। master branch এ নতুন কোন কোড push হয়ে গেলেই আপনাআপনি সার্ভারে চলে যাবে কোন প্রকার ঝামেলা ছাড়া, এতে করে সময় অনেক কম লাগে, কাজে অনেক বুস্টিং পাওয়া যায়।
আসা করি আপনারা বুজতে পেরেছেন। কোন ভুল হলে কমেন্ট এ জানিয়ে দিবেন দয়া করে।
আর ভাল লাগলে কমেন্ট করবেন
ধন্যবাদ।
Posted on September 12, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.