Gitlab Notification With Line
ช่วง 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 Developer กันก่อน เอาจริงๆ ขั้นตอนก็ไม่มีอะไรมากมาย แค่เข้าไปที่ https://notify-bot.line.me/th/ แล้วก็เข้าสู่ระบบแค่นั้นก็จบแล้ว
หลังจากที่เข้าระบบแล้ว ก็ให้เข้าไปที่หน้า Dashboard ของตัวเอง หรือเข้าที่นี่ https://notify-bot.line.me/my/ เพื่อขอ Token ใหม่มาใช้งานกัน โดยคลิกที่ตำแหน่งดังภาพ
จากนั้นก็กำหนดชื่อของ Token ซึ่งจะเป็นชื่อที่แสดงในข้อความและกำหนดกลุ่มที่ต้องการให้แจ้งเตือน หรือจะแจ้งเตือนกับ Line ของตัวเราเองก็ได้ครับ
จากนั้นก็จะได้ 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 ก็จะตามนี้ครับ
หลังจากนั้นก็ไปสร้าง APIController สำหรับรับส่งข้อมูล ซึ่งในที่นี้ผมจะตั้งชื่อว่า NotificationController.cs และจะเขียนคำสั่งลงไปตามนี้ครับ
จากนั้นก็รันโปรเจคได้เลยครับ สำหรับการทดสอบ ผมจะใช้ Postman ในการทดสอบ Post ข้อมูลที่ Copy มาจากเว็บของ Gitlab ข้างบนครับ
และผลที่ได้ทาง Line notify ก็จะได้ตามนี้ครับ
หลังจากที่เราได้ Callback API ของเราแล้ว ขั้นตอนต่อไปคือการกำหนด
Call back url ให้ Gitlab กันครับ โดยขั้นตอนก็มี ดังนี้ครับ
เริ่มแรกก็เข้าไปที่โปรเจคของเราที่ต้องการให้มีการส่ง Push Event กันก่อนครับ แล้วทางฝั่งซ้ายมือก็เข้าไปที่ Integration ดังภาพครับ
ตรงช่อง URL ก็ใส่ URL ของ Callback ที่เราสร้างขึ้นมา และกำหนด Event ของ Gitlab ที่ต้องการ แล้วจากนั้นก็คลิกที่ Add Webhook เพื่อเพิ่มได้เลยครับ และของผมก็จะเลือกแค่ Push Events เท่านั้นครับ แต่ถ้าต้องการกำหนดให้มีการแจ้งเตือนที่ Branch ไหนก็สามารถระบุไปได้เลยครับ
หลังจากนั้นเราสามารถทดสอบว่า gitlab เราสามารถทำงานได้จริงหรือไม่โดยการเลื่อนลงไปข้างล่าง ก็จะเห็น Callback URL ที่เราเพิ่มเข้ามาและจะมีปุ่ม Test เมื่อคลิกที่ปุ่มก็จะมี Event ที่ต้องการทดสอบขึ้นมาให้เลือกครับ
ซึ่งถ้าสามารถส่งข้อมูลได้ ก็จะมี message ขึ้นมาแจ้งประมาณในภาพครับ (ที่ขึ้น 204 เพราะว่าเราไม่ได้เขียน Response กลับมาครับ)
ซึ่งเมื่อในทีมมีการ Push Code ขึ้นมาบน Server ก็จะมีการส่งข้อความแจ้งเตือนให้กับคนอื่นๆ ผ่านทาง Line ได้แล้วครับ
สำหรับบทความนี้ผมก็ขอจบเพียงแค่นี้ครับ ขอบคุณมากๆ ที่ติดตามครับ