PlusMagi's Blog By Pitt Phunsanit devops,Shell Script,SVN,system SVN Multi-Repo Automation Scripts (การเขียน Script/Batch เพื่อ Checkout, Update และ Check Status ทุก Sub-folder)

SVN Multi-Repo Automation Scripts (การเขียน Script/Batch เพื่อ Checkout, Update และ Check Status ทุก Sub-folder)

ในโลกของการพัฒนาซอฟต์แวร์สมัยใหม่ โครงการขนาดใหญ่มักไม่ได้ถูกเก็บไว้ในที่เดียว แต่จะแตกออกเป็นส่วนย่อยๆ หรือ 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.”

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

  • CI/CD Pipeline Integration (Jenkins, GitLab CI):การนำสคริปต์นี้ไปเป็นขั้นตอนแรกสุดใน Pipeline เพื่อให้แน่ใจว่าโค้ดที่ใช้ในการ Build นั้นเป็นเวอร์ชันล่าสุดและสมบูรณ์ที่สุดก่อนที่จะเริ่ม Compile หรือ Run Test ใดๆ
  • Environment Synchronization (Dev/QA):ใช้สคริปต์นี้ในการเตรียมสภาพแวดล้อมการทดสอบ เมื่อมีการ Merge โค้ดใหม่เข้าสู่ Branch หลัก ทำให้มั่นใจว่าทุก Sub-module ได้รับโค้ดที่อัปเดตพร้อมกันก่อนส่งมอบให้ QA

การลงทุนเวลาในการเขียนและทดสอบ Automation Script เหล่านี้ ไม่ใช่แค่การประหยัดแรงงาน แต่คือการยกระดับความน่าเชื่อถือ (Reliability) ของระบบทั้งหมด เมื่อเราสามารถทำให้กระบวนการที่ซับซ้อนกลายเป็นคำสั่งเดียวได้ เราก็กำลังก้าวข้ามจากยุคของการทำงานแบบ Manual ไปสู่ Operational Excellence อย่างแท้จริง


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

Exit mobile version