มาเพิ่ม LINE Notify ให้ Jenkins กันเถอะ

Petch Kruapanich
readmoreth
Published in
2 min readJan 4, 2019

สำหรับใครที่ใช้ Jenkins น่าจะคุ้นเคยกับการทำ Notification เข้า Slack ไม่ก็ email กันมาบ้าง เพราะมันมี plugin ให้ใช้ได้แบบง่ายๆ จนแทบไม่ต้องเขียน code อะไรเพิ่มกันเลย

แต่ว่าปัญหาที่เกิดขึ้นก็คือ ตอนนี้คนในทีมยังไม่ค่อยถนัดใช้ Slack เท่าไร และยังชินกับการใช้ LINE มากกว่าเลยเป็นที่มาของบทความนี้ว่าเราจะทำให้ Jenkins ยิง Notify เข้าไปในกลุ่มของเราเพื่อแจ้งสถานะการ Deploy ได้หรือไม่

สมัคร LINE Notify

สำหรับขั้นตอนแรก เราต้องสมัคร LINE Notify ก่อน โดยไปที่เว็บไซท์ https://notify-bot.line.me/my/ และทำการ login ด้วย LINE Account ไป และเลื่อนมาด้านล่างๆจะมีปุ่ม Generate Token จากนั้นให้ตั้งชื่อของตัว Notify และ Group ที่เราต้องการให้มันส่งไป

สร้าง Token เพื่อคุยกับ LINE Group

เมื่อสร้าง LINE Access token แล้วก็จะได้ Token หน้าตาแบบในรูปมาใช้ ก็ Copy เก็บไว้เลยครับ ซึ่งตรงนี้เราจะเอาไปใช้ต่อ ตอนเขียน Jenkinsfile ในขั้นตอนต่อไป

Copy LINE Access token เพื่อเอาไปลองยิงเข้ากลุ่มดู

จากนั้นให้เพิ่มผู้ใช้ที่ชื่อว่า LINE Notify เข้าไปในกลุ่มที่เราต้องการ และลองทดสอบการใช้งานูว่า Token ที่ได้สามารถยิง Notification ไปเข้า LINE Group ได้แล้วจริงหรือไม่ผ่าน curl (เปิด cmd หรือ terminal ลองยิงได้เลย)

curl https://notify-api.line.me/api/notify -H "Authorization: Bearer [LINE Access Token]" -F "message=[message]"

ซึ่งถ้าสำเร็จก็จะมีข้อความเข้ามาในกลุ่มตามที่เราต้องการแล้ว เย้

เขียน Jenkinsfile

หลังจากเราลองเขียน curl เชื่อมกับ LINE ได้เรียบร้อยแล้ว ถึงเวลาที่ต้องเขียนใน Jenkinsfile เพื่อให้ทำงานหลังจากที่รัน pipeline ที่กำหนดไว้เสร็จสิ้น โดยเราจะเขียmethod ตามด้านล่างนี้

method notifyLINE ใน Jenkinsfile

จากตัวอย่าง code จะเห็นว่าเราทำ method ชื่อว่า notifyLINE และแปลง curl ในขั้นตอนก่อนหน้ามายิงด้วยคำสั่ง sh โดย message ที่จะส่งก็แล้วแต่เราเลยว่าอยากจะทำแนวไหน ซึ่งจากตัวอย่างเราจะรับ parameter เป็น status และเอาไปประกอบร่างเป็นข้อความว่ามี notification มาจาก job ไหน branch ไหน สถานะเป็นอย่างไร

และเมื่อเราเอา method ที่เราทำเสร็จแล้วไปใส่ใน pipeline โดยเราจะกำหนดไว้ว่าให้มีการแจ้งเตือนหลังจากที่ทำตามคำสั่งใน pipelineทั้งหมดเสร็จสิ้น (จากตัวอย่างจะมีการสั่ง update database และ test ก่อน) ค่อยยิง notification มาโดยแยกสถานะเป็น success และ failure ตาม event ที่ Jenkins มีเลย

ลองเรียกใช้งานใน event success และ failure

จากนั้นลองสั่งให้ Jenkins รันดู จะพบว่าน้องเจนของเราสามารถแจ้งเตือนสถานะได้แล้วตามที่เราวางเอาไว้

ถ้าใครต้องการต่อยอด อยากให้ LINE Notify สามารถ้ส่ง sticker หรือยิง notification ในรูปแบบอื่นๆของ LINE ก็สามารถลองไปดู document ของ LINE ได้เลย เพราะมันมีรูปแบบของ message อื่นๆให้ลองเล่นอีกเยอะมากๆเลยครับผม

--

--