Jenkins X: Cloud-Native CI/CD สำหรับ Kubernetes

Jenkins X เป็นแพลตฟอร์ม CI/CD ที่ออกแบบมาเพื่อการพัฒนาแอปพลิเคชันบน Kubernetes ในยุค Cloud-Native โดยให้ความสำคัญกับการอัตโนมัติ GitOps และการสร้าง Preview Environments อย่างชาญฉลาด ในบทความนี้ เราจะสำรวจ Jenkins X โดยลึกลงไปในสถาปัตยกรรม ความสามารถ และวิธีการติดตั้งบน Kubernetes ของคุณ

Jenkins X คืออะไร และต่างจาก Jenkins อย่างไร

Jenkins X เป็นโครงการฟรีโอเพนซอร์สที่พัฒนาขึ้นมาเพื่อให้ Jenkins รองรับการพัฒนาแอปพลิเคชันแบบ Cloud-Native และ Kubernetes แบบเนทีฟ ไม่ใช่เพียงแค่ Jenkins ที่วิ่งบน Kubernetes เท่านั้น

ความแตกต่างหลักระหว่าง Jenkins และ Jenkins X

คุณลักษณะJenkinsJenkins X
สถาปัตยกรรมServer-based, Manual scalingCloud-Native, Auto-scaling
GitOpsไม่มี (Manual deployment)Built-in GitOps workflow
Preview Environmentsต้องสร้างเองAutomatic PR-triggered
Kubernetes IntegrationPlugin-basedNative orchestration
ConfigurationUI-based, Groovy DSLGitOps, YAML, apps-based
Self-healingไม่มีAutomatic pod recovery

Jenkins X ออกแบบมาสำหรับสภาวะแวดล้อมที่ต้องการการปรับขนาดอัตโนมัติ การรักษาความปลอดภัย และการสนับสนุนสำหรับการใช้งาน Git Workflow ทั้งหมด

สถาปัตยกรรมของ Jenkins X

Jenkins X ใช้สถาปัตยกรรมแบบ Kubernetes-native ที่ประกอบไปด้วยส่วนประกอบหลักหลายตัว

ส่วนประกอบหลัก

  • Pipeline Operator: จัดการการรันของ Pipeline โดยใช้ Kubernetes CRD (Custom Resource Definitions)
  • Tekton Pipelines: Cloud-native CI/CD engine ที่ใช้สำหรับการรัน build และ test
  • Lighthouse Webhook Server: จัดการ GitHub/GitLab webhooks และสร้าง Pipeline runs
  • ChartMuseum: Helm Chart repository สำหรับจัดเก็บแผนการปรับใช้
  • Nexus Repository: Artifact storage สำหรับ Docker images และ packages
  • GitOps Repository: Git repository ที่ใช้เก็บสถานะการปรับใช้ (Desired State)

Pipeline Flow ใน Jenkins X

เมื่อผู้พัฒนา push code ไปยัง Git repository:

  1. Webhook ถูกทำให้เกิดขึ้นจาก GitHub/GitLab
  2. Lighthouse webhook server รับเหตุการณ์ และตรวจสอบสิทธิ์
  3. Pipeline CRD ถูกสร้างขึ้นโดย Jenkins X operator
  4. Tekton Pipelines รัน build, test และ deploy steps
  5. Artifacts ถูกเก็บไว้ใน Nexus Repository
  6. GitOps engine อัพเดต deployment repository โดยอัตโนมัติ
  7. Kubernetes controller ตรวจสอบและใช้งานการเปลี่ยนแปลงใหม่

1. GitOps Workflow

Jenkins X ใช้ GitOps ซึ่งหมายความว่า Git repository เป็นแหล่งความจริง (Single Source of Truth) สำหรับสถานะการปรับใช้ ทุกการเปลี่ยนแปลงต่อโปรแกรมจะถูกติดตามใน Git และสามารถย้อนกลับได้ (Rollback) อย่างง่ายดาย

2. Automatic Preview Environments

เมื่อมีการเปิด Pull Request ใหม่ Jenkins X จะสร้าง Preview Environment ขึ้นมาโดยอัตโนมัติ ซึ่งให้ผู้พัฒนา QA และ stakeholder สามารถทดสอบการเปลี่ยนแปลงได้ก่อนการ merge ไปยัง main branch

  • Temporary Environment: สร้างขึ้นสำหรับแต่ละ PR
  • Live URLs: ได้รับลิงก์ที่สามารถเข้าถึงได้ทันที
  • Automatic Cleanup: ลบออกเมื่อ PR ถูก merge หรือปิด
  • Production-like: เหมือนกับ production environment เพื่อการทดสอบที่เหมาะสม

3. Automated CI/CD Pipeline

Jenkins X สร้าง pipelines โดยอัตโนมัติโดยใช้ buildpack detection หมายความว่าไม่จำเป็นต้องเขียน Jenkinsfile เพิ่มเติม

4. Multi-Environment Promotion

Automatic promotion ระหว่าง dev, staging, และ production environments โดยยึดตามการทดสอบและเงื่อนไขที่กำหนด

การติดตั้ง Jenkins X บน Kubernetes (K3s on Cloud VPS)

ในส่วนนี้ เราจะแนะนำวิธีการติดตั้ง Jenkins X บน K3s cluster ที่ทำงานบน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง ซึ่งจะให้คุณมีสภาวะแวดล้อมที่ปลอดภัย และควบคุมได้เต็มที่

ข้อกำหนดเบื้องต้น

  • Cloud VPS instance จาก ผู้ให้บริการโฮสติ้ง (ขั้นต่ำ 2 vCPU, 4GB RAM)
  • Kubernetes cluster ที่ตั้งค่าไว้ (K3s หรือ Kubeadm)
  • kubectl CLI tool
  • Helm 3 ขึ้นไป
  • Git account (GitHub, GitLab หรือ Gitea)
  • Docker Hub หรือ Container Registry account

ขั้นตอนที่ 1: ติดตั้ง K3s บน Cloud VPS

# SSH เข้า Cloud VPS ของคุณ
ssh root@your-vps-ip

# ติดตั้ง K3s
curl -sfL https://get.k3s.io | sh -

# ตั้งค่า kubeconfig
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

# ตรวจสอบ cluster status
kubectl cluster-info
kubectl get nodes

ขั้นตอนที่ 2: ติดตั้ง Jenkins X CLI

# ดาวน์โหลดและติดตั้ง Jenkins X CLI
curl -L https://github.com/jenkins-x/jx-release-version/releases/download/v2.5.0/jx-linux-amd64.tar.gz | tar xzv
sudo mv jx /usr/local/bin/

# ตรวจสอบการติดตั้ง
jx version

ขั้นตอนที่ 3: ติดตั้ง Jenkins X Cluster

# สร้าง namespace สำหรับ Jenkins X
kubectl create namespace jx

# ติดตั้ง Jenkins X CLI boots config
jx boot

# ตอบคำถามต่างๆ เช่น:
# - Select git server (GitHub, GitLab, etc.)
# - Provide git username and token
# - Select default repository owner
# - Provide docker registry details

1. GitOps Repository Structure

จัดระเบียบ GitOps repository อย่างเหมาะสมสำหรับการจัดการโปรไฟล์สภาพแวดล้อม

2. Resource Limits และ Quotas

กำหนด resource requests และ limits เพื่อให้ Jenkins X ทำงานได้อย่างมีประสิทธิภาพ

3. Security Best Practices

  • Secret Management: ใช้ Sealed Secrets หรือ External Secrets Operator
  • RBAC: ตั้งค่า service accounts ด้วยสิทธิ์ขั้นต่ำที่จำเป็น
  • Network Policies: จำกัดการสื่อสารระหว่าง pods
  • Image Scanning: ตรวจสอบ vulnerability ในภาพ container ก่อน push
  • Audit Logging: เปิดการ audit logs สำหรับการ track changes