ในโลกของการพัฒนาซอฟต์แวร์ที่ซับซ้อน การจัดการโค้ดในหลายสภาพแวดล้อม (Environments) หรือหลายสาขา (Branches) ในหลายโฟลเดอร์ย่อย (Subfolders) ถือเป็นความท้าทายหลักสำหรับทีมพัฒนา การต้องสลับสาขา (Checkout) ด้วยมือในแต่ละโฟลเดอร์ย่อยจึงเสี่ยงต่อความผิดพลาดสูง
แม้ว่าการดำเนินการ Git Checkout จะเป็นคำสั่งระดับ Shell Script แต่ในฐานะ System Specialist เราสามารถใช้พลังของฐานข้อมูลอย่าง PostgreSQL ในการจัดการและจัดเก็บ Metadata ของสถานะ Branch ที่ต้องการ เพื่อให้กระบวนการ Automation มีความน่าเชื่อถือและสามารถตรวจสอบสถานะทั้งหมดได้จากศูนย์กลาง
💡 หลักการใช้ PostgreSQL ในการจัดการ Branch Metadata
แทนที่จะให้ PostgreSQL ทำการ Checkout Branch โดยตรง (ซึ่งเป็นหน้าที่ของ Git CLI) เราจะใช้ PostgreSQL เพื่อสร้างระบบจัดการข้อมูล (Source of Truth) ที่บันทึกว่าในแต่ละ Repository (โฟลเดอร์ย่อย) ควรจะอยู่ที่ Branch ใด และสถานะล่าสุดคืออะไร การทำเช่นนี้ช่วยให้เราสามารถเขียนสคริปต์ภายนอก (เช่น Python หรือ Bash) ที่เรียกใช้ PostgreSQL เพื่อดึงรายการงาน (Job List) ที่ต้องทำทั้งหมดได้อย่างแม่นยำ
🛠️ ขั้นตอนที่ 1: การสร้างตาราง Metadata
เราจะสร้างตารางเพื่อเก็บข้อมูลของ Repository ทั้งหมดที่ต้องดูแล โดยระบุชื่อโฟลเดอร์ (หรือ Path) และ Branch ที่ต้องการให้เป็นสถานะล่าสุด
SQL
-- สร้างตารางเพื่อเก็บข้อมูล Repository และ Branch ที่ต้องการ
CREATE TABLE repository_branches (
repo_id SERIAL PRIMARY KEY,
folder_path VARCHAR(255) NOT NULL,
required_branch VARCHAR(50) NOT NULL,
last_checked TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- ตัวอย่างการใส่ข้อมูล Repository 3 โฟลเดอร์
INSERT INTO repository_branches (folder_path, required_branch) VALUES
('project_a', 'develop'),
('project_b', 'uat'),
('project_c', 'main');
⚙️ ขั้นตอนที่ 2: การดึงรายการงาน (Job List) สำหรับ Automation
เมื่อเราต้องการให้ระบบภายนอก (เช่น CI/CD Pipeline) ทำการ Checkout Branch ทั้งหมด เราจะใช้คำสั่ง SQL เพื่อดึงรายการทั้งหมดที่ต้องดำเนินการ ซึ่งเป็นหัวใจของการทำ Batch Process
SQL
-- ดึงรายการทั้งหมดที่ต้อง Checkout
SELECT
folder_path,
required_branch
FROM
repository_branches
WHERE
required_branch IN ('develop', 'uat', 'main')
ORDER BY
folder_path;
ผลลัพธ์ที่ได้จาก Query นี้จะให้รายการคู่ (Folder Path, Branch Name) ที่ระบบ Automation ของเราต้องวนลูปไปดำเนินการต่อ ทำให้การจัดการโค้ดเป็นไปอย่างเป็นระบบและสามารถขยายขอบเขตได้ง่าย
🚀 การผสานรวมกับระบบภายนอก (Orchestration)
เมื่อได้รายการงานจาก PostgreSQL แล้ว สคริปต์ภายนอก (เช่น Bash หรือ Python) จะทำหน้าที่ดังนี้:
- เชื่อมต่อกับ PostgreSQL และรัน Query ข้างต้น
- วนลูป (Loop) ผ่านผลลัพธ์ที่ได้ (เช่น ‘project_a’ และ ‘develop’)
- สำหรับแต่ละคู่ข้อมูล จะทำการ `cd` เข้าไปในโฟลเดอร์นั้น และรันคำสั่ง `git checkout develop`
- เมื่อเสร็จสิ้น จะอัปเดตสถานะในฐานข้อมูล:
SQL
UPDATE repository_branches SET last_checked = CURRENT_TIMESTAMP WHERE folder_path = 'project_a';
✅ บทสรุป: ความแข็งแกร่งของการจัดการ Metadata ด้วย PostgreSQL
การใช้ PostgreSQL ในการจัดเก็บ Metadata ของ Branch และ Repository ไม่เพียงแต่ช่วยให้เรามีแหล่งข้อมูลที่เชื่อถือได้ (Single Source of Truth) แต่ยังช่วยให้เราสามารถตรวจสอบสถานะของทุกสภาพแวดล้อมได้อย่างรวดเร็วและเป็นมาตรฐาน การแยกหน้าที่ระหว่าง PostgreSQL (จัดการข้อมูล) และ Shell Script (ดำเนินการคำสั่ง) คือแนวทางปฏิบัติที่ดีที่สุด (Best Practice) ในการสร้าง CI/CD Pipeline ที่มีความเสถียรและสามารถ Scale ได้สูง