PlusMagi's Blog By Pitt Phunsanit เทคโนโลยี Shell Script: ดูวิธีตั้งค่า Git Pre-commit Hook สำหรับ ShellCheck

Shell Script: ดูวิธีตั้งค่า Git Pre-commit Hook สำหรับ ShellCheck

การรักษาคุณภาพของโค้ดเป็นหัวใจสำคัญของการพัฒนาซอฟต์แวร์ที่ยั่งยืน ไม่ว่าคุณจะเขียนโปรแกรมด้วยภาษาใดก็ตาม การตรวจจับข้อผิดพลาดตั้งแต่เนิ่น ๆ ก่อนที่จะถูก Commit เข้าสู่ Repository เป็นแนวปฏิบัติที่ดีที่สุดอย่างยิ่งสำหรับนักพัฒนาระบบมืออาชีพ เมื่อเราพูดถึงสคริปต์ Bash หรือ Shell Script ซึ่งมักใช้ในการจัดการระบบและงาน Automation ต่างๆ ความแม่นยำจึงมีความสำคัญสูงสุด บทความนี้จะพาไปดูวิธีการตั้งค่า Git Pre-commit Hook เพื่อให้แน่ใจได้ว่าทุกครั้งที่มีการเพิ่มไฟล์ จะต้องผ่านกระบวนการตรวจสอบทางไวยากรณ์โดยเครื่องมือชั้นยอดอย่าง ShellCheck เสียก่อน

ทำไมต้องใช้ Pre-commit Hooks?

Git hooks คือกลไกอัตโนมัติในตัวของ Git ที่ช่วยให้ผู้ใช้งานสามารถกำหนดฟังก์ชันพิเศษบางอย่างให้ทำงานเมื่อเกิดเหตุการณ์เฉพาะเจาะจงกับ Version Control System (VCS) เช่น push, pull หรือที่เรากำลังสนใจคือ pre-commit

  • Pre-commit hook:
  • <script>hook</script>
  • git commit.
  • Purpose หลัก:

ShellCheck และบทบาทในการพัฒนาสคริปต์ Bash

Bash Scripts เป็นภาษาที่มีประสิทธิภาพสูงสำหรับการจัดการระบบ แต่ก็มีโอกาสเกิด Human Error ได้ง่าย ShellCheck ถูกออกแบบมาโดยเฉพาะเพื่อวิเคราะห์และระบุช่องโหว่หรือแนวทางการเขียนที่ไม่เหมาะสมทางด้านความปลอดภัยและการปฏิบัติงานที่ดีที่สุดสำหรับสคริปต์ประเภทนี้ การนำมันเข้ามาใช้ใน Pre-commit Hook จึงเป็นการสร้างชั้นการป้องกันอัตโนมัติ ที่บังคับให้ผู้พัฒนารับทราบ Warning ต่าง ๆ ทันที

ขั้นตอนการตั้งค่า Git Pre-commit Script

เราจะทำการติดตั้งไฟล์ script เข้าไปอยู่ใน directory .git/hooks ซึ่งจำเป็นต้องทำด้วยมือ เนื่องจาก Hooks เหล่านี้จะไม่ถูก Track โดย Git เพื่อรักษาความเป็นท้องถิ่นของการทำงาน

  1. 1. สร้างไฟล์ pre-commit hook:
    touch .git/hooks/pre-commit.(ตรวจสอบว่าไม่มีไฟล์ชื่อเดียวกันอยู่แล้ว)
  2. 2. กำหนด Permission ให้รันได้:
    <code>chmod +x .git/hooks/pre-commit</code>
  3. 3. เขียนโค้ด Logic ใน Hook File:
    .git/hooks/pre-commit ด้วย Text Editor และใส่ logic การตรวจสอบดังตัวอย่างต่อไปนี้ โค้ดส่วนใหญ่ใน hooks ควรใช้ Shebang Line (&#38;) ที่ถูกต้องเพื่อระบุ Interpreter

    Example Pre-Commit Script

    #!/bin/sh\n# ShellCheck hook for Bash scripts only\ndir_to_check=$(find . -name '*.bashrc' *.sh); \nenv VAR=(); if [ ! $dir_to_check ]; then echo                             
                   
            
Exit mobile version