ผมรู้จักเจ้า Jenkins นี้มาประมาณสามสี่เดือนได้แล้ว แต่พึ่งจะได้มีโอกาสได้ทดลองเล่นก็วันนี้นี่เอง หลังจากที่ลองเล่นไปได้ 1 ชั่วโมงก็พบว่า ถ้าเรารู้จัก CI เร็วกว่านี้สักสองปี ชีวิตเราคงดีขึ้น งานหลักๆของเราสามารถเอาไปทำเป็น Automated process ได้ทั้งหมดเลย ไม่ว่าจะ Deploy Build หรือจะ Monitor อะไรก็ยังทำได้ตามจินตนาการของเรา บน Framework เดียวกันทั้งหมด ซึ่งเจ้า Jenkins นี้มันเป็น Java Web application ที่มีทั้ง GUI, Rest API และ CLI ให้เราเลือกใช้ได้ตามความต้องการของาน

กล่าวถึง CI หรือ Continuous Integration นิดนึง คำนี้ผมก็พึ่งเคยได้ยินตอนรู้จัก Jenkins นีแหละ ซึ่งสามารถเอามาใช้กับ SDLC ใดๆก็ได้ ผมถือว่านี่เป็น Practice อย่างหนึ่งสำหรับ developer ที่ดี เมื่อเขียน code เสร็จก็ต้อง build แล้วผ่าน test case ที่มีให้ได้ หลังจากผ่านแล้วก็ควรจะ commit กลับเข้าไปที่ baseline หลักอย่างสม่ำเสมอ แต่อย่างไรก็ตามผมไม่เคยเป็น Developer ที่ดี (Test case ผมยัง system out print อยู่เลย แต่กำลังเริ่มพัฒนาตัวเอง) และตำแหน่งงานผมก็ไม่ใช่ Dev เสียด้วยฮ่าฮ่า เลยไม่เคยได้รับประสบการณ์ของการเป็น developer ในทีมเท่าไหร่หนักเพราะปกติก็เขียนเองใช้เองตลอด

ทีนี้ Jenkins จะเข้ามาช่วยทำ CI ได้ยังไง Jenkins สามารถเฝ้า repository ใดๆก็ได้ เมื่อเกิดการ commit ขึ้น jenkins จะทำการ build version นั้นให้ทันที (ยังไม่ได้ลอง แต่ทำได้แน่ๆ) แล้วเราสามารถกำหนดได้ว่า หาก build สำเร็จให้ลองรัน test case ก็ได้ ในกรณีที่ใช้ maven ผมเดาว่ามันคง build และ test ให้เสร็จเรียบร้อยเลย ยังไม่หมด ถ้าผ่าน test case ทั้งหมดแล้ว เรายังสามารถสั่งให้มัน deploy app ของเราเลยก็ได้ ซึ่งกระบวนการทั้งหมดนี้ สามารถทดลองเล่นได้บน Openshift😉

หลักการของ Jenkins คือเราจะต้องสร้าง Job ขึ้นมาก่อน แล้วกำหนดว่า Job นี้จะใช้อะไรในการ Build หลังจาก Build สำเร็จแล้วให้ทำอะไร เมื่อได้ Job แล้วเราก็สามารถควบคุม Job นี้อีกทีได้ เช่นตั้งเวลาการทำงาน หรือจะสั่ง build โดยตรงเลยก็ได้

การ Build application นั้นหลักๆก็มี Ant กับ Maven หรือจะเขียน Script ขึ้นมาเองก็ได้ ซึ่งความารถในการรัน ant ได้นี่แหละ ทำให้ Jenkins น่าสนใจ เพราะว่าเราสามารถเขียน ant script ใดๆขึ้นมา แล้วก็สั่งรันจาก jenkins ได้พร้อมกับ Build Status ว่ารันสำเร็จหรือไม่อีกด้วย

ตัวอย่างการใช้งานแปลกๆอีกอันนึงก็คือผมเอา jenkins มาสั่ง Run script jmeter เพื่อทำ Performance Test ระบบใหญ่ๆ ที่ต้องใช้ script หลายๆ script ได้อย่างไม่ยากเย็น แถมสามารถรัน script ทั้งหมดพร้อมกันได้อีกต่างหาก (plugin เสริม) รันเสร็จแล้วก้สั่งให้เก็บผลลัพธ์ไปไว้ในที่ที่เราต้องการได้อีกด้วย🙂 เราสามารถกำหนดได้ว่า ใน server ของเราจะสามารถมีงานรันพร้อมกันได้กี่งาน

สิ่งที่ผมจะลองต่อไปก็คือการสร้าง node slave ของ jenkins เพื่อรัน script ใดๆ ในกรณีที่ resource บน node master ไม่พอ โดยเราสามารถกำหนดได้ว่า ในแต่ละ server ของเราจะสามารถมีงานรันพร้อมกันได้กี่งาน