PlusMagi's Blog By Pitt Phunsanit cd,ci,devops,GIT,script,Shell Script,technologyระบบ 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 หรือ Batch Job ที่ชาญฉลาดจะเข้ามาทำหน้าที่เป็น Orchestrator โดยมันจะต้องสามารถวนลูป (Loop) เข้าไปในทุก Workspace, ดึงข้อมูลเวอร์ชันล่าสุด, ตรวจสอบว่ามีการเปลี่ยนแปลงที่จำเป็นหรือไม่, และดำเนินการ Sync/Update ตามเงื่อนไขที่กำหนดไว้ได้อย่างอัตโนมัติ

แนวคิดนี้ช่วยลดภาระงานซ้ำซ้อน (Toil) ของทีมพัฒนาอย่างมาก แทนที่จะต้องรันคำสั่งเฉพาะเจาะจงในแต่ละโฟลเดอร์ การใช้ Script ภาษา Bash หรือ Python ที่มีการจัดการ Error Handling และ Logging อย่างเป็นระบบ จะทำให้เราสามารถทราบสถานะรวมของทุกโปรเจกต์ได้ด้วยการเรียกใช้งานเพียงครั้งเดียว ซึ่งเป็นรากฐานสำคัญของการทำ Continuous Integration (CI) ที่มีประสิทธิภาพ

<pre class="wp-block-syntaxhighlighter-code">#!/bin/bash

# กำหนด Root Directory ของ Multi-Repo
REPO_ROOT="./workspaces"

echo "--- Starting Multi-Repo Status Check and Sync ---"

for repo in "$REPO_ROOT"/*; do
    if [ -d "$repo" ]; then
        REPO_NAME=$(basename "$repo")
        echo ""
        echo ">>> Processing Repository: $REPO_NAME <<<"
        
        # 1. ตรวจสอบสถานะ (Status Check)
        git --cd="$repo" status --porcelain | grep -q . && echo "[STATUS] $REPO_NAME: Changes detected! Needs commit/sync." || echo "[STATUS] $REPO_NAME: Clean and up to date."

        # 2. ดึงข้อมูลล่าสุด (Pull/Sync)
        echo "Attempting to pull latest changes..."
        (cd "$repo" && git pull origin main)

        if [ $? -ne 0 ]; then
            echo "[ERROR] Failed to sync $REPO_NAME. Check network or credentials."
        else
            echo "[SUCCESS] $REPO_NAME synced successfully."
        fi
    fi
done

echo ""
echo "--- All Repositories Processed ---"
</pre>

การนำไปประยุกต์ใช้ในชีวิตและการทำงานยุคใหม่

  • CI/CD Pipeline Integration: การฝัง Script นี้เข้าใน Jenkins, GitLab CI, หรือ GitHub Actions เพื่อให้มั่นใจว่าก่อนการ Build หรือ Deploy จะมีการ Sync สถานะล่าสุดของทุก Service ที่เกี่ยวข้องอย่างสมบูรณ์ ทำให้ลดความเสี่ยงของการใช้โค้ดที่ล้าสมัย (Stale Code)
  • Local Development Workflow Management: การสร้าง Script สำหรับนักพัฒนาเพื่อรันก่อนเริ่มงานประจำวัน เพื่อให้แน่ใจว่าเครื่อง Local ของทุกคนมีโค้ดที่ตรงกับ Branch หลักล่าสุดของทุก Workspace ก่อนที่จะเริ่มเขียนฟีเจอร์ใหม่

การทำ Automation Scripts สำหรับ Multi-Repo ไม่ใช่แค่เรื่องของการรันคำสั่งซ้ำๆ แต่คือการยกระดับมาตรฐานของ DevOps Practices ให้เป็นระบบอัตโนมัติที่เชื่อถือได้ มันช่วยให้ทีมสามารถโฟกัสไปกับการสร้างสรรค์คุณค่าทางธุรกิจ (Business Logic) แทนที่จะต้องเสียเวลาไปกับงานบริหารจัดการโค้ดที่น่าเบื่อและเสี่ยงต่อความผิดพลาด


อ่านเพิ่มเติม