เนื่องจากช่วงนี้ทุกคนคงต้อง Work from home จากปัญหา COVID-19 สำหรับ Blog นี้เลยจะมาพูดคุยเรื่องการนำ Slack Chat application สำหรับทำงานชื่อดัง มาใช้ร่วมกันกับ Jenkins ครับ

โดยปกติ Jenkins เมื่อรันเทสเสร็จ แน่นอนว่าเราสนใจที่อยากจะรู้ได้ผลลัพธ์ของการรันเช่น Build success หรือ fail และแน่นอน มีเทส Pass Fail กี่ข้อ และข้อไหนบ้าง ซึ่ง Jenkins เองก็มีตัวเลือกหลากหลายแบบในการส่งการแจ้งเตือน หนึ่งในวิธีที่วันนี้เราจะนำมาพูดคุยกันก็คือ การส่ง Notification ไปยัง Slack

เป้าหมายของเราสำหรับ Workshop นี้คือ การทำให้ Jenkins ส่ง notification ไปยัง Slack Channel พร้อมผลเทสตามรูปด้านล่างนี้เลยครับ

 

ทำไมเราต้องแจ้งเตือนไปที่ Slack ด้วย

แน่นอนว่าการแจ้งเตือนของ Jenkins ทำได้หลายวิธี เมื่อไหร่เราควรเลือกใช้ Slack จากการที่ก่อนหน้านี้มีโอกาศนี้ Video Call กับทาง ทีม Sale ของ Slack ทำให้เข้าใจมากขึ้นถึงจุดประสงค์ของการเป็น centralize communication application ในองค์กร ซึ่งถ้าเราสามารถนำ application ที่เราใช้มาต่อพ่วงกับ slack ได้นั้น จะช่วยลดการสับเปลี่ยน และความซับซ้อนของการแจ้งเตือนไปได้มากเลยครับ ลองนึกภาพว่า เราต้อง Chat ผ่าน Slack แต่ Jenkins ส่งแจ้งเตือนไปทาง email เราก็ต้อง switch ไปที่ email เพื่อดูข้อมูล และถ้าเราจำเป็นต้อง Discussion กับคนในทีมถึงปัญหา เราก็ต้องนั่ง copy จาก email มาใส่ Slack อีก แค่คิดก็ปวดหัวแล้วว่าไหมครับ

 

เริ่มลุยกันเลย

  1. ก่อนอื่นเราต้องมี robot test script ซะก่อน download จาก link Github ได้เลยครับ
    โดยผมเตรียมตัวอย่าง test case ไว้ 3 ข้อ โดยข้อ 2 จะเป็นการบังคับให้ผลลัพธ์เป็น fail ครับ

ติดตั้ง Slack Plugin บน Jenkins

  1. Manage Jenkins –> Manage Plugins –> Available Tab
  2. เลือก Slack Notification และกดปุ่ม Download now and install after restart
  3. เมื่อ Install เสร็จก็ให้ Restart Jenkins Server โดยการไปที่ URL 127.0.0.1:8080/restart แล้วเลือก Yes

 

สร้าง Jenkins job สำหรับรันเทส

หากใครยังไม่เคยรันเทส Robot บน Jenkins ก่อนต้องลง Plugin Robot Framework ด้วยนะครับ ทำตาม link นี้เลย แล้วสร้าง Job ตามนี้ครับ

  1. New Item –> ตั้งชื่อ Job ที่ต้องการได้เลย จากตัวอย่างคือ blog-slack-notification
  2. เลือก Type เป็น Freestyle project แล้วเลือก OK ได้เลยครับ
  3. Config test script file
    ในส่วนนี้ถ้าเพื่อนๆยังไม่ได้ Commit code ไว้บน Git ก็อาจลองจาก test script ตัวอย่างตาม url นี้ได้เลยครับ https://github.com/qahive/demo_test_lab_robot_scripts.git
  4. เพิ่มคำสั่งให้Jenkins รันเทสโดย ส่วนการ Build เลือก
    Add build step –> Execute Windows batch command
    จากนั้นเพิ่ม Command “robot .”
  5. เพิ่มคำสั่งในการแสดงผลการเทสให้กับ Job นี้
    เพิ่ม Publish Robot Framework test results เข้าไปภายใต้ Post-build Actions แล้วทำการ config ตามรูปด้านล่างได้เลยครับ
  6. หลังจากนั้นให้ Save Job ไว้ก่อนครับ

 

เปิดสิทธิการส่งข้อมูลไปยัง Slack

  1. เปิดไปที่ Slack Application แล้วเลือก App Directory จากนั้นค้นหา App ที่ชื่อ Jenkins จากนั้นให้เลือก Add To Slack ได้เลยครับ
  2. เลือก Channel ที่เราต้องการจะส่ง Notification อาจจะใช้ general ก่อนก็ได้ครับ แล้วเลือก Add Jenkins CI integration
  3. จากนั้นเลื่อนลงมาหา Token แล้ว copy เก็บไว้ให้ดีครับ
  4. จากนั้นเลือก Save Settings ก็จะเป็นการเปิดสิทธิทาง Slack แล้วครับ

 

Config ให้ Jenkins job send notification message ไปที่ Slack

  1. เลือกที่ Job ที่เราสร้างไว้ แล้วเลือก Configure
  2. เพิ่มคำสั่งในการส่ง Slack notification โดย
    เพิ่ม Slack Notification เข้าไปภายใต้ Post-build Actions แล้วเลือก Notify ว่าจะให้ส่งตอนไหนบ้าง จากนั้นให้เลือก Advanced…
  3. กดปุ่ม Add ในส่วนของ Credential แล้วเลือก Jenkins จากนั้น ให้เอา Token ที่ save เก็บไว้มา config ตามนี้ และกด Add
    โดย Secret ก็คือ Token ที่เรา save มาจาก Slack ครับ
  4. จากนั้นให้เลือกตามนี้ แล้วกด save
    โดย Workspace ก็คือชื่อ workspace ของ Slack ครับ
  5. คราวนี้พอเรารันเทสแล้วเราจะได้ ข้อความแบบนี้ใน Slack ก็เป็นอันเรียบร้อยครับ

 

หากบริษัทที่เพื่อนๆทำงานไม่ได้ใช้ Slack แต่ใช้ MS Team หรือ Chat ตัวอื่นๆ เพื่อนๆก็ยังสามารถจะประยุกต์ใช้วิธีการเดียวกันนี้ในการส่ง Notification จาก Jenkins ไปยัง chat application เจ้าอื่นได้ครับ