PlusMagi's Blog By Pitt Phunsanit Database Jujutsu Multi-Repo Automation Scripts (การเขียน Script/Batch เพื่อ Sync, Status และ Update ทุก Workspace)

Jujutsu Multi-Repo Automation Scripts (การเขียน Script/Batch เพื่อ Sync, Status และ Update ทุก Workspace)

ในโลกของการพัฒนาซอฟต์แวร์สมัยใหม่ โครงการขนาดใหญ่มักไม่ได้จำกัดอยู่แค่ที่เดียว แต่กระจายตัวออกไปเป็นหลาย Repository หรือ Workspace ที่เชื่อมโยงกัน การจัดการสถานะ (Status) ของโค้ด, การตรวจสอบความสอดคล้องของเวอร์ชัน, และการอัปเดตข้อมูลข้ามพื้นที่เหล่านี้ด้วยมือถือเป็นงานที่ซับซ้อนและเสี่ยงต่อข้อผิดพลาดสูงมาก ทำให้เกิดคอขวดในการทำงานและการ Deploy

แนวคิดของการทำ Multi-Repo Automation คือการสร้าง Single Source of Truth (SSOT) สำหรับสถานะของโค้ดทั้งหมด โดยแทนที่จะใช้ Script ภาษา Shell หรือ Python ในการวนลูปจัดการไฟล์ เราจะใช้ความสามารถเชิงโครงสร้างของฐานข้อมูลอย่าง PostgreSQL ในการทำหน้าที่เป็น Orchestrator หลัก

การใช้ PostgreSQL เป็นศูนย์กลางการจัดการสถานะ (SSOT)

หัวใจสำคัญคือการออกแบบ Schema ที่สามารถบันทึกสถานะ (Status) และเวอร์ชันล่าสุดของทุก Workspace ได้อย่างเป็นระบบ เราจะใช้ PostgreSQL Functions และ Stored Procedures เพื่อสร้าง Batch Job ที่ชาญฉลาด ซึ่งทำหน้าที่จำลองการรัน Script เพื่อตรวจสอบความเปลี่ยนแปลง (Delta Check) และอัปเดตสถานะรวมของทุกโปรเจกต์ได้ด้วยการเรียกใช้คำสั่ง SQL เพียงครั้งเดียว

กระบวนการนี้ช่วยลดภาระงานซ้ำซ้อน (Toil) ของทีมพัฒนาอย่างมาก โดยระบบจะทำหน้าที่:

  • Status Check: ตรวจสอบว่า Repo ใดที่ยังไม่ได้ Sync หรือมีเวอร์ชันที่แตกต่างจาก SSOT
  • Orchestration: เรียกใช้ Logic การ Sync/Update ตามลำดับที่กำหนดไว้
  • Logging: บันทึกประวัติการทำงานและสถานะความล้มเหลวทั้งหมดใน Transaction Log

ตัวอย่างการใช้ PostgreSQL Function สำหรับ Automation

สมมติว่าเรามีตารางที่เก็บสถานะของแต่ละ Repository และเราต้องการฟังก์ชันที่รับค่า Batch ของการอัปเดตสถานะเพื่อบันทึกว่า Repo เหล่านี้ถูก Sync เรียบร้อยแล้ว

SQL

-- 1. สร้างตารางเก็บสถานะของ Repository ทั้งหมด (The SSOT) <code>CREATE TABLE repo_status (
    repo_id SERIAL PRIMARY KEY,
    repo_name VARCHAR(100) NOT NULL,
    current_version VARCHAR(50) NOT NULL,
    sync_status VARCHAR(50) DEFAULT 'PENDING',
    last_synced TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
</code><p><code>-- 2. สร้าง Function สำหรับการอัปเดตสถานะแบบ Batch <code>CREATE OR REPLACE FUNCTION update_multi_repo_status(batch_ids INT[], new_status VARCHAR, new_version VARCHAR)
RETURNS VOID AS $$
BEGIN
    UPDATE repo_status
    SET sync_status = new_status,
        current_version = new_version,
        last_synced = CURRENT_TIMESTAMP
    WHERE repo_id = ANY(batch_ids);
END;$$ LANGUAGE plpgsql;

-- 3. การเรียกใช้งาน (Simulating the Automation Run) SELECT update_multi_repo_status(ARRAY[1, 3, 5], 'SUCCESS', '1.2.3');

บทสรุป: ประโยชน์เชิงสถาปัตยกรรม

การใช้ PostgreSQL ในการจัดการ Multi-Repo Automation ไม่เพียงแต่ทำให้กระบวนการเป็นอัตโนมัติเท่านั้น แต่ยังเพิ่มความน่าเชื่อถือ (Reliability) และความสามารถในการตรวจสอบย้อนกลับ (Auditability) ได้อย่างสูง เพราะทุกสถานะการเปลี่ยนแปลงจะถูกบันทึกเป็น Transaction อย่างสมบูรณ์ การออกแบบนี้ช่วยให้ทีมสามารถสร้าง CI/CD Pipeline ที่มีประสิทธิภาพและสามารถทราบสถานะรวมของโปรเจกต์ทั้งหมดได้ด้วยการเรียกใช้คำสั่ง SQL เพียงครั้งเดียว ซึ่งเป็นรากฐานสำคัญของการทำงานระดับองค์กรขนาดใหญ่

Exit mobile version