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
| คุณลักษณะ | Jenkins | Jenkins X |
|---|---|---|
| สถาปัตยกรรม | Server-based, Manual scaling | Cloud-Native, Auto-scaling |
| GitOps | ไม่มี (Manual deployment) | Built-in GitOps workflow |
| Preview Environments | ต้องสร้างเอง | Automatic PR-triggered |
| Kubernetes Integration | Plugin-based | Native orchestration |
| Configuration | UI-based, Groovy DSL | GitOps, 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:
- Webhook ถูกทำให้เกิดขึ้นจาก GitHub/GitLab
- Lighthouse webhook server รับเหตุการณ์ และตรวจสอบสิทธิ์
- Pipeline CRD ถูกสร้างขึ้นโดย Jenkins X operator
- Tekton Pipelines รัน build, test และ deploy steps
- Artifacts ถูกเก็บไว้ใน Nexus Repository
- GitOps engine อัพเดต deployment repository โดยอัตโนมัติ
- 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
