อั้น Jenkins ให้ run UI test ทีละกล่อง

วันก่อนทีมมาบอกว่า พอ UI test ของ Android กับ iOS มันแย่งกัน run ปุ๊บ มันจะช้ามาก ๆ เลย เราอั้นให้มัน run ทีละกล่องได้ไหม?

ผมลอง search ดูก็ไม่เจอวิธี ปรกติถ้าเป็น job ที่อยู่ใน pipeline เดียวกัน มันจะ block กันอยู่แล้ว แต่ pipeline iOS กับ Android มันไม่เกี่ยวกันนี่สิ…

สุดท้ายก็เลยคิดวิธีเอาเอง โดยมี 3 ขั้นตอนดังนี้

  1. สร้าง Node ใหม่ขึ้นมาบนเครื่องเดิม แล้วอั้นให้มัน run ได้ทีละ job
  2. ไปกำหนดให้กล่อง run UI test ของทั้ง 2 platform ให้มัน run บน Node ใหม่นี้เท่านั้น
  3. ตรวจสอบว่าทั้ง 2 งานมันรอกันแล้ว

ขั้นแรก เรามาสร้าง Node ใหม่ก่อน ผมตั้งชื่อมันว่า turtle และกำหนด label ว่า turtle แล้วให้มัน ssh ไปที่เครื่องตัวเอง (localhost) นี่แหละ

อย่าลืม limit executors ให้เหลือแค่ 1 หล่ะ

สร้าง Node ใหม่

เสร็จแล้ว ก็ไปกำหนดใน job “android_ui_test” และ “ios_ui_test” ให้มัน run ด้วย node ที่ถูก label ว่า turtle เท่านั้น

กำหนดใน job run แต่ใน turtle

ทีนี้เราก็จะเห็นว่า job ui_test เหล่านี้ มันจะไป run ใน queue ของ Node turtle เท่านั้น

job ui test ถูก run ใน turtle เท่านั้น

เพียงเท่านี้ UI test ของทั้ง 2 platform ก็ไม่แย่งกัน run แล้ว :)

หวังว่าจะมีประโยชน์นะครับ ขอบคุณที่สละเวลาอ่านครับ ^/\^