![]()
![]()
มาทำความรู้จักกับ
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
ตัวอย่างชุดคำสั่ง
[code]
$jx create cluster gke
$jx create cluster aws
$jx create cluster aks
$jx create cluster minikube
[/code]
ใน blog นี้ผมทำการสร้างบน Google Cloud Engine ดังนี้
ถ้าไม่มี dependency หรือ library ใด ๆ ที่ต้องใช้
จะทำการ download และติดตั้งให้เลย ทั้ง gcloud และ helm
ที่สำคัญอย่าลืมเปิด Google Kubernetes Engine API
[gist id="de3353507b3a3df6bdc561dcea3b87fb" file="2.txt"]
ใช้เวลาการสร้าง cluster นานพอสมควรนะ !!
จากนั้นจะทำการเชื่อมต่อไปยัง github
แต่ต้องไปสร้าง API Token มาใช้ก่อน
และเมื่อทุกอย่างเรียบร้อย ก็มีอะไรไม่รู้สร้างมาเพียบ
[gist id="de3353507b3a3df6bdc561dcea3b87fb" file="1.txt"]
ลองไปดูใน Google Cloud Console ก็เจอ cluster ที่สร้างดังรูป
ได้ Jenkins ด้วยนะ
บอก username และ password เข้าใช้งานมาให้ครบ
มี job สำหรับ environment แต่ละตัวให้มาพร้อม ทั้ง staging และ production
สร้าง repository ใน Github ให้อีกด้วย
ใช้สำหรับจัดการ environment ต่าง ๆ ของระบบนั่นเอง
สร้างให้ทั้ง staging และ production
รวมทั้งสร้าง webhook ให้อีกด้วย
มันจะทำเยอะไปไหนนะ
เมื่อทุกอย่างพร้อม ก็ได้สิ่งต่าง ๆ มาดังนี้
[gist id="de3353507b3a3df6bdc561dcea3b87fb" file="4.txt"]
ว่าแต่มันมีอะไรบ้างมาดูหน่อยสิ
- 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
เมื่อเข้าไปดูรายละเอียดจะพบว่า
มีการสร้าง docker image ของ project
จากนั้นทำการ push ไปยัง Docker Registry V2 ก่อน
ก่อนทำการ promote ไปยัง environment ต่าง ๆ
มีการทำ changelog แบบอัตโนมัติ
มีการทำ versioning ของ project
สร้าง pull request ไปยัง environment ต่าง ๆ เพื่อเริ่มกระบวนการ deploy
แสดงดังรูป
![]()
สามารถดูเพิ่มเติมได้ที่
VDO :: Create Spring Boot
มาถึงตรงนี้จะพบว่า
Jenkins X นั้นทำสิ่งต่าง ๆ ให้เยอะมาก (เยอะจนมึนงงกันไปเลย ยิ่งมือใหม่จะงงมาก ๆ)
แต่ก็มองได้สองมุมคือ
มุมแรกมันเยอะไปไหม พังมานี่ยุ่งเลย แก้ไม่ถูกแน่ ๆ
มุมสองมันก็ง่ายดีนะ ไม่ต้องมาสนใจ pipeline เลย แถมมีขั้นตอนเหมือนกันอีก
แต่ถึงอย่างไรก็ตาม นักพัฒนา software ก็ต้องศึกษาเพื่อให้รู้ ข้อดีและข้อเสีย
เพื่อให้เข้าใจมันก่อนที่จะตัดสินใจ
ปล. ตอนนี้ bug เพียบนะ
ขอให้สนุกกับการเขียน code นะครับ