Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

สวัสดี Jenkins X

$
0
0

มาทำความรู้จักกับ 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 นะครับ

Viewing all articles
Browse latest Browse all 1997

Trending Articles