Hook (หรือ webhook) เป็นขั้นตอนการแทรกโค้ดในการดำเนินการมาตรฐานเพื่อใช้การปรับแต่งบางอย่าง ในขอบเขตของ Ruk-Com Cloud Platform ฟังก์ชันนี้อนุญาตให้คุณดำเนินการรันสคริปต์ที่กำหนดเองก่อน และ/หรือ หลังการดำเนินการ deploy แอปพลิเคชัน นอกจากนั้นสำหรับ Marven build node และ Golang แอปพลิเคชันเซิร์ฟเวอร์สามารถตั้งค่า build hooks เพิ่มเติมได้ทั้งก่อนและหลังโปรเจ็กต์
ดังนั้นด้านล่างนี้ เราจะทดสอบวิธีการใช้งาน hooks ที่ Ruk-Com Cloud และภาพรวมกรณีการใช้งานทั่วไปพร้อมทั้งคำแนะนำทีละขั้นตอน โดยฟังก์ชันนี้มีประโยชน์สำหรับ:
การจัดการ Hooks
เป็นส่วนหนึ่งของกระบวนการปรับใช้ Hooks อยู่ที่ส่วนขยายของแบบฟอร์มแดชบอร์ดที่เหมาะสม ดังนั้นการจัดการ hooks ให้เข้าถึงการโต้ตอบการ deploy แอปพลิเคชันโดยใช้ตัวเลือกต่อไปนี้:
- Deployment Manager
- ปุ่ม Deploy สำหรับแอปพลิเคชันเซิร์ฟเวอร์
1. ภายในเฟรมที่เปิดอยู่ เลือกประเภทของ source ที่ต้องการ deploy และกดขยายส่วน Hooks
ในที่นี้ให้คลิกปุ่ม Pre หรือ Post ที่จัดเตรียมไว้สำหรับโค้ดของคุณ ซึ่งจะดำเนินการตามลำดับก่อน/ทันทีหลังจากการ deploy (ตามตัวเลือกที่เลือก)
2. ป้อนโค้ดที่ต้องการภายในหน้าต่าง Edit Hook ที่เปิดอยู่โดยคุณสามารถใช้ภาษาในการเขียนโปรแกรมใดก็ได้ที่ต้องการ – เพียงตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งโค้ดที่เหมาะสมสำหรับคอนเทนเนอร์เป้าหมายแล้ว (ติดตั้งเบื้องต้นด้วยตัวเองหรือรวมอยู่ในการสร้างสแต็กเริ่มต้น)
- เคล็ดลับ: ภายในหน้าต่างด้านบน คุณสามารถเข้าถึงเครื่องมือต่อไปนี้เพื่อช่วยคุณในระหว่างการแก้โค้ด
- Wrap lines – เบรกข้อความเพื่อดำเนินการต่อในบรรทัดด้านล่างหากถึงขอบเฟรม
- Search – ช่วยในการค้นหาข้อมูลที่คุณต้องการได้อย่างง่ายดาย อีกทั้งมาพร้อมกับ Match case และตัวเลือกการค้นหา Regex เพิ่มเติม
- Help – เปลี่ยนเส้นทางไปยังเอกสารปัจจุบันเพื่อรับรายละเอียดเกี่ยวกับการใช้ hooks ที่เหมาะสม
คลิก Apply เมื่อพร้อม ตอนนี้คุณสามารถ deploy แอปพลิเคชันของคุณแล้ว
3. หลังจาก deploy สำเร็จคุณสามารถคลิกปุ่ม Show logs ภายในการแจ้งเตือนแดชบอร์ดที่ปรากฏขึ้นเพื่อดูการตอบสนองโดยละเอียดเกี่ยวกับการดำเนินการ:
หมายเหตุ: ในกรณีที่เกิดข้อผิดพลาดขึ้นระหว่างการดำเนินการ hook คุณจะได้รับการแจ้งเตือนที่เหมาะสมในขณะที่การ deploy จะถูกยกเลิก:
คลิกที่ปุ่ม Show Logs เพื่อรับรายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาดที่เกิดขึ้นโดยดู log ของการดำเนินการ deploy (ซึ่งสอดคล้องกับไฟล์ hooks.log โดยสามารถเข้าถึงได้ผ่านส่วน logs สำหรับเซิร์ฟเวอร์ที่เหมาะสม)
Hooks Use Cases
Hooks มอบโอกาสที่หลากหลายสำหรับนักพัฒนา ทำให้กระบวนการที่ใช้เป็นประจำส่วนใหญ่เป็นไปโดยอัตโนมัติเพื่อให้ได้แอปพลิเคชันที่พร้อมใช้งานหลังจากการ deploy
ตัวอย่างด้านล่างนี้เราได้รวบรวม tasks ทั่วไปที่สามารถติดตั้งโปรแกรมให้สำเร็จโดยอัตโนมัติด้วยการ hooks:
- Pre-deploy hooks (เช่น ดำเนินการก่อนการ deploy แอปพลิเคชันจริง)
- เพื่อตรวจสอบว่าตรงตามข้อกำหนดทั้งหมดหรือไม่
- เพื่อติดตั้งซอฟต์แวร์ที่จำเป็นล่วงหน้า
- เพื่อเคลียร์หรือเตรียมโฟลเดอร์เฉพาะสำหรับไฟล์
- เพื่อบันทึกข้อมูล
- Post deploy (หลังจากการ deploy สำเร็จ)
- เพื่อรีสตาร์ทแอปพลิเคชันเซิร์ฟเวอร์หลังจากการ deploy
- เพื่อติดตั้งโปรเจกต์ที่พึ่งพากัน
- เพื่อใช้การปรับแต่งอื่นๆที่ต้องการ
- เพื่อบันทึกข้อมูล
ด้านล่างนี้เราได้จัดเตรียมตัวอย่างง่ายๆสำหรับการสร้าง log file ด้วย hooks
1. เริ่มต้นด้วยการ deploy โปรเจกต์ของคุณด้วยวิธีใดก็ได้ที่คุณต้องการ โดยเราจะใช้ไฟล์เก็บถารวร HelloWorld.zip จาก Deployment Manager
2. กดปุ่มขายส่วนของ Hooks คลิก Pre hook และใส่โค้ดตามที่จัดเตรียมไว้ให้ภายในหน้าต่างการแก้ไข:
echo "$(date) - deployment start" >> ~/mylog
if ! grep -q "$(pwd)/mylog" /etc/jelastic/redeploy.conf; then
echo "$(pwd)/mylog" >> /etc/jelastic/redeploy.conf
fi
โค้ดนี้จะเพิ่มสตริงลงในไฟล์ mylog (จะถูกสร้างขึ้นโดยอัตโนมัติใน home directory หากไม่มีอยู่) ซึ่งจะระบุการเริ่มต้นใช้งานและระบุเวลาที่เหมาะสม นอกจากนี้เราจะตรวจสอบว่าไฟล์ redeploy.conf มีไฟล์ log ที่กำหนดเองหรือไม่ และหากไม่ ให้เพิ่มบรรทัดที่เหมาะสม – ในนลักษณะดังกล่าวไฟล์จะถูกเก็บไว้หลังจากการดำเนินการ redeploy คอนเทนเนอร์ใหม่
3. สำหรับ Post hook ให้เพิ่มโค้ดต่อไปนี้:
echo "$(date) - deployment end" >> ~/mylog
และนี่คือ log สุดท้ายของการ deploy hook
4. ขั้นตอนสุดท้ายของการ deploy แอปพลิเคชันของคุณ ตรวจสอบทั้งไฟล์ mylog และ redeploy.conf เพื่อตรวจสอบการทำงานของ hooks ว่าประสบความสำเร็จ
อย่างที่คุณเห็นสคริปต์ทำงานตามที่วางแผนเอาไว้โดยให้เวลาเริ่มต้น/สิ้นสุดการปรับใช้และตรวจสอบให้แน่ใจว่าสคริปต์ได้รับการปกป้องในระหว่างการดำเนิน redeploy
หากคุณประสบปัญหาใดๆในขณะทำงานกับ hooks โปรดขอความช่วยเหลือจากผู้เชี่ยวชาญทางเทคนิคที่ Stackoverflow