มาทำความรู้จักกับ Jenkins X กันหน่อย
ซึ่งเป็น project ใหม่ที่ทาง cloudbees เป็นหัวหน้าทีมพัฒนา
มีเป้าหมายเพื่อช่วยให้การทำ Continuous Delivery และใช้งาน Kubernestes ง่ายขึ้น
หรือเป็น Automated pipeline บน Kubernetes นั่นเอง
ดังนั้นมาทำความรู้จักและใช้งานกันหน่อย
ปล. project นี้ยังอยู่ในช่วงเริ่มต้นเท่านั้น project นี้ไม่ได้มาแทนที่ Jenkins แต่เข้ามาช่วยให้การทำงานกับ container และ cloud ง่ายและสะดวกขึ้น โดยไปดู Roadmap เพิ่มได้
ถ้าถามว่า Jenkins X คืออะไร
ตอบสั้น ๆ ว่า CI/CD platform สำหรับ Kubernetes นั่นเอง เป็น sub-project ของ Jenkins Jenkins X นั้นถูกออกแบบด้วยเป้าหมายตาม DevOps เลย นั่นคือ- Time to market ที่เร็วกว่า
- ปรับปรุงการ deploy ให้บ่อยขึ้น
- ช่วยทำให้เวลาในการแก้ไขสั้นลง
- ลดจำนวนข้อผิดพลาดของการ release ระบบลง
- ค่า Mean Time To Recovery ให้เร็วขึ้น
สถาปัตยกรรมของ Jenkins X เป็นอย่างไร ?
แสดงตามรูปแลย มี component ที่สำคัญดังนี้- Kubernetes และ Docker โดยที่หัวใจคือ Kubernetes ซึ่ง Cloud provider หลัก ๆ สนับสนุนอยู่แล้วทั้ง Google Azure และ AWS
- ใช้ Helm (Kubernetes Package Manager) กับ Draft ในการจัดการ configuration ของระบบงาน เนื่องจากการใช้งานผ่าน kubectl และ YAML ตรง ๆ ของ Kubernetes นั้นมีความซับซ้อนและเกิด human error ได้ง่าย
- Jenkins X ถูกออกแบบมาเพื่อการทำงานที่มีหลาย ๆ ทีม รวมถึง microservices อีกด้วย
- จัดการ versioning, สร้าง change log ให้แบบอัตโนมัติ
มาดูความสามารถของ Jenkins X กันบ้าง
- มี command line ให้ใช้งาน ทั้งการสร้าง cluster, project, จัดการ environment และการ deploy
- มี pipeline ให้ใช้งานโดย default อยู่แล้ว (Build -> Test -> Packaging -> Deploy)
- สามารถจัดการ environment ได้ง่าย ๆ ซึ่งสามารถใช้ชื่อ Testing, Staging และ Production ได้เลย ทำให้ง่ายขึ้นไปอีก
- สามารถทำการ promote version ของ application ไปยัง environment ต่าง ๆ ได้เลย แสดงดังรูป
- Preview environment ใน pull request แต่ละตัวนั้น สามารถสร้าง environment ขึ้นมาเพื่อทดสอบ ก่อนจะ merge มายัง branch หลัก ซึ่งช่วยลดปัญหาต่าง ๆ ลงไปได้มาก
- มีระบบ Addon ให้ใช้งาน นั่นคือสามารถเพิ่ม software ต่าง ๆ เข้ามาได้เลย ซึ่งตอนนี้ยังมีน้อย
มาลองใช้งาน Jenkins X กันดีกว่า
ขั้นตอนที่ 1 ติดตั้ง jx ก่อน เป็น command line สำหรับใช้งาน
[gist id="de3353507b3a3df6bdc561dcea3b87fb" file="1.txt"]ขั้นตอนที่ 2 สร้าง Cluster ของระบบ
โดยที่สนับสนุนทั้ง- GKE (Google Cloud Engine)
- AWS (Amazon Web Services)
- AKS (Azure Container Service)
- Local ด้วย minikube
- Docker Registry V2 สำหรับจัดเก็บ Docker Image
- Jenkins X App สำหรับดูการ deploy ระบบงาน
- Nexus Repository Manager Server สำหรับจัดเก็บ library และ dependency ต่าง ๆ
ขั้นตอนที่ 3 ได้เวลาสร้าง Spring Boot Application กันแล้ว
แน่นอนว่าจะทำการสร้าง Git repository โดยมีทั้ง code Dockerfile สำหรับใช้สร้าง Docker Image Jenkinsfile สำหรับสร้าง Job ใน Jenkins ดังนี้ [gist id="de3353507b3a3df6bdc561dcea3b87fb" file="5.txt"] มีความจริงจังมาก ๆ จากนั้นจะ trigger ให้ Job ใน Jenkins ทำการ build ซึ่งมี pipeline มาตรฐานดังนี้ [gist id="de3353507b3a3df6bdc561dcea3b87fb" file="Jenkinsfile"] ดูไฟล์ Jenkinsfile ไปแล้วงง มาดูรูป pipeline กันดีกว่า- Pull code
- ทำการ build คือ compile, test และ packaging
- ทำการ promote ไปยัง environment ต่าง ๆ ทั้ง staging และ production
มาถึงตรงนี้จะพบว่า
Jenkins X นั้นทำสิ่งต่าง ๆ ให้เยอะมาก (เยอะจนมึนงงกันไปเลย ยิ่งมือใหม่จะงงมาก ๆ) แต่ก็มองได้สองมุมคือ มุมแรกมันเยอะไปไหม พังมานี่ยุ่งเลย แก้ไม่ถูกแน่ ๆ มุมสองมันก็ง่ายดีนะ ไม่ต้องมาสนใจ pipeline เลย แถมมีขั้นตอนเหมือนกันอีกแต่ถึงอย่างไรก็ตาม นักพัฒนา software ก็ต้องศึกษาเพื่อให้รู้ ข้อดีและข้อเสีย เพื่อให้เข้าใจมันก่อนที่จะตัดสินใจปล. ตอนนี้ bug เพียบนะ ขอให้สนุกกับการเขียน code นะครับ