ในโลกของการพัฒนาซอฟต์แวร์สมัยใหม่ โครงการขนาดใหญ่มักไม่ได้ถูกเก็บไว้ในที่เดียว แต่จะแตกออกเป็นส่วนย่อยๆ หรือ Microservices ที่ต้องพึ่งพาอาศัยกันหลายสิบตัว การจัดการโค้ดเบส (Codebase) จำนวนมากที่กระจายอยู่ในระบบควบคุมเวอร์ชันอย่าง SVN จึงกลายเป็นความท้าทายด้านปฏิบัติการที่สำคัญ ความผิดพลาดจากการทำด้วยมือเพียงครั้งเดียวอาจส่งผลกระทบต่อทั้ง Pipeline ได้ ดังนั้น การสร้างชุดคำสั่งอัตโนมัติจึงเป็นหัวใจสำคัญของการทำงานแบบ DevOps ที่มีประสิทธิภาพ
เจาะลึกรายละเอียดและประเด็นสำคัญ
หัวใจของการทำ Automation Scripts สำหรับ Multi-Repo คือการทำให้กระบวนการที่เคยต้องใช้เวลาหลายชั่วโมงในการกดปุ่มหรือรันคำสั่งทีละบรรทัด กลายเป็นชุดคำสั่งที่ทำงานได้อย่างแม่นยำและสามารถเรียกใช้งานซ้ำได้ (Idempotent) โดยเราจะต้องครอบคลุม 3 ฟังก์ชันหลัก: การ Checkout โค้ดครั้งแรก, การ Update เพื่อดึงการเปลี่ยนแปลงล่าสุด, และการ Check Status เพื่อตรวจสอบว่ามีไฟล์ใดถูกแก้ไขหรือเพิ่มเข้ามาหรือไม่
แนวคิดในการเขียน Script คือการใช้ Loop Structure (เช่น `for` loop) ร่วมกับการจัดการ Error Handling ที่ดีเยี่ยม เมื่อเรากำหนดรายการ Sub-folder หรือ Repository ทั้งหมดไว้ใน Array แล้ว สคริปต์จะวนลูปเข้าไปดำเนินการคำสั่ง SVN ภายในแต่ละโฟลเดอร์อย่างเป็นระบบ ทำให้มั่นใจได้ว่าทุกส่วนของโปรเจกต์ได้รับการซิงค์ข้อมูลล่าสุดก่อนเริ่ม Build เสมอ
#!/bin/bash
# รายการ Sub-folders หรือ Repositories ที่ต้องจัดการ
REPOS=(
“project_core/auth_module”
“project_core/api_gateway”
“project_core/user_service”
)
for REPO in “${REPOS[@]}”; do
echo “==========================================”
echo “Processing Repository: $REPO”
# 1. Checkout (ถ้ายังไม่มีโฟลเดอร์)
if [ ! -d “$REPO/.svn” ]; then
echo “-> Performing initial checkout…”
svn checkout svn://your-repo/path/$REPO .
else
# 2. Update เพื่อดึงการเปลี่ยนแปลงล่าสุด
echo “-> Running ‘svn update’ to sync changes…”
svn update “$REPO” || { echo “ERROR: Failed to update $REPO”; exit 1; }
# 3. Check Status เพื่อตรวจสอบไฟล์ที่ถูกแก้ไข/เพิ่ม
echo “-> Checking status for pending changes…”
svn status “$REPO”
fi
done
echo “==========================================”
echo “All repositories processed successfully.”