
ทความนี้คงไม่พูดถึงเรื่องการลง Jenkins หรือ อธิบายว่า Jenkins คืออะไร เพราะในฐานะ Developer หรือ QA ควรจะรู้จัก และ ใช้งานเป็นอยู่แล้วไม่มากก็น้อย ถ้ายังไม่รู้จักหรือไม่เคยใช้งาน อยากให้ลองหาคําว่า Continuous Integration และ Continuous Delivery มาลองศึกษาดู หรือแม้แต่เอา Jenkins มาลงในเครื่องของเราเอง เพราะถ้าทํางานสายไอทียุคนี้ไม่รู้จักก็แย่แล้วววววววววววววว
Jenkins Pipeline คือ?
ในปกติแล้วสมัยก่อนที่เราจัดการกับ Jenkins Jobs ต่างๆเราต้องทําผ่าน Web UI ทั้งหมดเลย ไม่ว่าจะเป็นการสร้าง Jobs หรือ กรอก config ต่างๆผ่านหน้า Web UI ของ Jenkins ซึ่งการทําพวกนี้ถือว่าเป็นการเสียเวลามากเมื่อเราต้องจัดการกับหลายโปรเจคในเวลาเดียวกัน แถมยังทําให้ configuration ของ Jobs ที่จะ build/test หรือ deploy แยกออกจากกันเป็น Jobsๆ (ลองนึกภาพ Jobs 3 ตัวแยกกัน มันคืออย่างนั้นแหละ configuration ก็แยกกันไปด้วย)
ทีนี้สิ่งที่เข้ามาช่วยก็คือ Jenkins Pipeline นั่นเอง…..
Jenkins Pipeline ช่วยให้เราสามารถ Manage Jobs build/test หรือ deploy ได้ผ่าน Code
หรือพูดง่ายๆก็คือ เราสามารถ Manage Jenkins Jobs ผ่าน Scripts ได้นั่นเอง (โดยใช้สิ่งที่เรียกว่า Jenkinsfile === Groovy Language) ซึ่งไม่ต้องแยก Build/Test/Deploy configuration แล้ว มีไฟล์ script ไฟลืเดียวอยู่ใน git ได้เลย (Entire application life cycle as a code)
ประโยชน์ของ Jenkins Pipeline คือ?
- Resilient มันมีความสามารถในการจัดการตัวมันเองแม้ Jenkins Master จะ Restart ตัวเองไปแล้ว
- Pausable มันสามารถ pause และ wait เพื่อให้เรามาใส่ input เพิ่มเอง หรือ กด approval ได้
- Efficient สามารถทําจุด checkpoints ได้ เมื่อเราต้องการ restart มาเริ่มจากจุดนั้นๆ
- Visualized แน่นอนบางทีเราก็ไม่อยากดูแต่โค้ดอย่างเดียว มันสามารถแสดง StageView บนหน้า dashboard ได้อย่างสวยงามเลย
- Suuport complex real-world scenario ได้ เพราะมันมีการทํา join/loop/parallel ได้ ไม่เหมือนแต่ก่อนที่กด downstream / upstream ไปเรื่อยๆ
Pipeline Jargon มีอะไรบ้าง?
- Steps
- Nodes
- Stages
Steps
คือ Build Step ที่มันเป็น Single task สําหรับที่จะให้ Jenkins ทํางาน
Nodes
คือขั้นตอนที่เราตั้งค่าให้มันทําการเข้าไปใน Jenkins build queue อาจจะ refer ถึง Jenkins Master,หรือ agent หรือ workspace ก็ได้
Stages
คือ ณ ขณะนั้นๆของการแบ่งส่วนของ pipeline ให้ชัดเจนว่าเป็น Dev,Test,UAT,Production เป็นต้น
ตัวอย่าง Pipeline Script แบบง่ายๆ

จะเห็นว่ามีการแบ่งชัดเจนว่าเป็น stage ไหนๆ แล้ว stage นั้นๆก็ทํางานไปตามที่เราเขียน scripts ไว้นั้นเอง
สรุป
ง่ายๆเลย Pipeline ทําให้เรา Manage Jenkins ด้วยโค้ดได้ทั้งหมด รองรับ complex scenario ได้มากกว่าปกติ เพราะเราสามารเขียน scripts จัดการได้แล้วในตอนนี้
ref:
- https://jenkins.io/doc/book/pipeline/jenkinsfile/
- https://jenkins.io/doc/book/pipeline/getting-started/
- https://jenkins.io/doc/book/pipeline/
- https://jenkins.io/user-handbook.pdf