ช่วง 2–3 วันที่ผ่านมานี้ ได้มีเวลา Research เกี่ยวกับการทำ Notification ของโปรเจคบน Gitlab ครับ จริงๆ แล้วจะไปใช้ Slack (เสียเงิน) หรือจะไปใช้ Rocketchat.io เป็นตัวกลางก็ได้ แต่ว่า….

ในทีมไม่อยากจะลงโปรแกรมเพิ่มกัน

ซึ่งปกติก็จะคุยกันผ่าน Line อยู่แล้ว ก็เลยไปหาวิธีการทำ Notification ผ่าน Line ในเว็บและบทความต่างๆ แต่ว่า…. ว่างเปล่า….

จึงได้เข้าไปสอบถามใน Community ต่างๆ เกี่ยวกับการใช้งานและการเชื่อมต่อระหว่าง Gitlab กับ Line Notify และแล้วก็ได้แนวความคิดมา ก็เลยเป็นที่มาของบทความนี้ครับ

สำหรับหลักการทำงานแบบคร่าวๆ ของ Line Notify ก็สามารถเข้าไปอ่านกันได้ที่นี่ครับ https://notify-bot.line.me/doc/en/

Line Notify Authentication

เริ่มแรกเลย เราก็ต้องไปสมัครใช้งาน Line Developer กันก่อน เอาจริงๆ ขั้นตอนก็ไม่มีอะไรมากมาย แค่เข้าไปที่ https://notify-bot.line.me/th/ แล้วก็เข้าสู่ระบบแค่นั้นก็จบแล้ว

Line Notify

หลังจากที่เข้าระบบแล้ว ก็ให้เข้าไปที่หน้า Dashboard ของตัวเอง หรือเข้าที่นี่ https://notify-bot.line.me/my/ เพื่อขอ Token ใหม่มาใช้งานกัน โดยคลิกที่ตำแหน่งดังภาพ

จากนั้นก็กำหนดชื่อของ Token ซึ่งจะเป็นชื่อที่แสดงในข้อความและกำหนดกลุ่มที่ต้องการให้แจ้งเตือน หรือจะแจ้งเตือนกับ Line ของตัวเราเองก็ได้ครับ

Line notify Token Config

จากนั้นก็จะได้ Token สำหรับการใช้งานมาแล้ว ให้เก็บเอาไว้ใช้งานในภายหลังกันครับ

Line notify token

หลังจากที่ได้ Token แล้ว จากนั้นขั้นตอนต่อไปคือ ต้องทำ Callback ทางฝั่งของเรา เพื่อให้ตัว Gitlab ส่ง Message มาให้ทาง Line ครับ

และที่สำคัญอย่าลืมแอด Line notify เป็นเพื่อนเราด้วยนะครับ

ผมจะสร้างโปรจคแบบ MVC Web API ขึ้นมาตัวหนึ่ง โดยจะตั่งชื่อว่า Notifications แล้วจากนั้นก็จะใช้ Nuget เพิ่ม log4net เข้ามาเพื่อเก็บ Log ในกรณีที่ Error เท่านั้นครับ ที่ไม่ใช้แบบ .net core mvc เพราะ Server ยังไม่รองรับครับ แหะๆ (ขี้เกียจเองแหละครับ)

จากนั้นก็จะเพิ่ม model class เพื่อรับข้อมูลที่ถูก Post มาจากทาง Gitlab โดยเราสามารถเข้าไปดูได้ว่าข้อมูลที่ส่งมาหน้าตาเป็นยังไง ได้ที่นี่ครับ https://docs.gitlab.com/ce/user/project/integrations/webhooks.html

สำหรับในที่นี้ผมจะทำแค่ส่วนของ Push Event เพียงเท่านั้นครับ ซึ่งข้อมูลตัวอย่างก็จะอยู่ในส่วนของ Push Event ดังภาพ

และสำหรับ Class ก็จะตามนี้ครับ

https://gist.github.com/VatthanachaiW/f2dbe6c036beb395520a2004753935f5

หลังจากนั้นก็ไปสร้าง APIController สำหรับรับส่งข้อมูล ซึ่งในที่นี้ผมจะตั้งชื่อว่า NotificationController.cs และจะเขียนคำสั่งลงไปตามนี้ครับ

https://gist.github.com/VatthanachaiW/c9ba20609a39708bc89cc5598a904b05

จากนั้นก็รันโปรเจคได้เลยครับ สำหรับการทดสอบ ผมจะใช้ Postman ในการทดสอบ Post ข้อมูลที่ Copy มาจากเว็บของ Gitlab ข้างบนครับ

และผลที่ได้ทาง Line notify ก็จะได้ตามนี้ครับ

Line notify message result

หลังจากที่เราได้ Callback API ของเราแล้ว ขั้นตอนต่อไปคือการกำหนด
Call back url ให้ Gitlab กันครับ โดยขั้นตอนก็มี ดังนี้ครับ

เริ่มแรกก็เข้าไปที่โปรเจคของเราที่ต้องการให้มีการส่ง Push Event กันก่อนครับ แล้วทางฝั่งซ้ายมือก็เข้าไปที่ Integration ดังภาพครับ

Integraions menu on gitlab

ตรงช่อง URL ก็ใส่ URL ของ Callback ที่เราสร้างขึ้นมา และกำหนด Event ของ Gitlab ที่ต้องการ แล้วจากนั้นก็คลิกที่ Add Webhook เพื่อเพิ่มได้เลยครับ และของผมก็จะเลือกแค่ Push Events เท่านั้นครับ แต่ถ้าต้องการกำหนดให้มีการแจ้งเตือนที่ Branch ไหนก็สามารถระบุไปได้เลยครับ

หลังจากนั้นเราสามารถทดสอบว่า gitlab เราสามารถทำงานได้จริงหรือไม่โดยการเลื่อนลงไปข้างล่าง ก็จะเห็น Callback URL ที่เราเพิ่มเข้ามาและจะมีปุ่ม Test เมื่อคลิกที่ปุ่มก็จะมี Event ที่ต้องการทดสอบขึ้นมาให้เลือกครับ

ซึ่งถ้าสามารถส่งข้อมูลได้ ก็จะมี message ขึ้นมาแจ้งประมาณในภาพครับ (ที่ขึ้น 204 เพราะว่าเราไม่ได้เขียน Response กลับมาครับ)

ซึ่งเมื่อในทีมมีการ Push Code ขึ้นมาบน Server ก็จะมีการส่งข้อความแจ้งเตือนให้กับคนอื่นๆ ผ่านทาง Line ได้แล้วครับ

สำหรับบทความนี้ผมก็ขอจบเพียงแค่นี้ครับ ขอบคุณมากๆ ที่ติดตามครับ