Cài đặt Tekton Pipeline và Tekton Trigger trên Kubernetes
Bạn cần triển khai các Custom Resource Definitions (CRD) và các component core của Tekton vào namespace tekton-pipelines để hệ thống có thể nhận diện và xử lý các workflow CI.
Bước này sử dụng kubectl kết hợp với kubectl apply để cài đặt từ manifests chính thức của dự án Tekton. Việc này thiết lập controller và các resources cần thiết cho pipeline.
Kết quả mong đợi: Namespace tekton-pipelines được tạo và các Pod của Tekton Controller, Webhook, và Trigger Controller đang ở trạng thái Running.
kubectl create namespace tekton-pipelines
kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
kubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/latest/release.yaml
Để verify kết quả, bạn chạy lệnh liệt kê các pod trong namespace và kiểm tra trạng thái của chúng.
kubectl get pods -n tekton-pipelines
Định nghĩa Task để build image Docker từ mã nguồn
Chúng ta sẽ tạo một file YAML định nghĩa Task tên là docker-build. Task này sẽ thực hiện việc build image Docker từ mã nguồn Git, sử dụng Docker daemon có sẵn trong container hoặc Docker-in-Docker.
File này cần được lưu tại đường dẫn ./tekton-pipeline/docker-build-task.yaml trong thư mục làm việc của bạn. Nội dung bao gồm các input params, workspaces và steps thực thi lệnh docker build.
cat > ./tekton-pipeline/docker-build-task.yaml
Sau khi tạo file, bạn áp dụng Task vào cluster. Kết quả là Tekton Controller sẽ nhận diện resource Task mới và sẵn sàng cho Pipeline sử dụng.
kubectl apply -f ./tekton-pipeline/docker-build-task.yaml
Verify Task đã được tạo thành công
Kiểm tra xem Task có xuất hiện trong danh sách resources của Tekton hay không.
kubectl get tasks -n tekton-pipelines
Tích hợp kiểm thử đơn vị và quét lỗ hổng bảo mật (Trivy)
Để đảm bảo chất lượng code trước khi build, bạn cần tạo thêm 2 Task riêng biệt: một cho Unit Test và một cho Security Scan dùng công cụ Trivy.
File cấu hình sẽ nằm tại ./tekton-pipeline/test-and-scan-tasks.yaml. Task Unit Test giả lập môi trường chạy test (ví dụ: Node.js hoặc Python), Task Trivy sẽ quét image hoặc source code để tìm lỗ hổng.
cat > ./tekton-pipeline/test-and-scan-tasks.yaml
Áp dụng các Task test và scan vào cluster. Kết quả là bạn có sẵn các bước kiểm thử để gọi trong Pipeline.
kubectl apply -f ./tekton-pipeline/test-and-scan-tasks.yaml
Verify Task test và scan
kubectl get tasks run-unit-tests trivy-scan -n tekton-pipelines
Cấu hình Tekton Trigger để tự động chạy pipeline
Để tự động hóa quy trình CI khi có commit mới vào Git repository, bạn cần cấu hình Tekton Trigger. Đây là bộ phận lắng nghe webhook từ Git provider (như GitHub, GitLab) và kích hoạt Pipeline.
Bạn cần tạo 3 tài nguyên: TriggerTemplate (mẫu cấu hình chạy), TriggerBinding (liên kết event từ webhook với template), và Trigger (kết hợp Binding và Template). File cấu hình lưu tại ./tekton-pipeline/trigger-config.yaml.
cat > ./tekton-pipeline/trigger-config.yaml
Trước khi áp dụng Trigger, bạn cần đảm bảo đã tạo một PipelineRun mẫu (my-ci-pipeline) và PVC (my-pvc-source) tương ứng. Sau đó áp dụng file trigger-config.yaml. Kết quả là Tekton Trigger Controller sẽ lắng nghe trên port 9000 (hoặc port đã cấu hình) để nhận webhook.
kubectl apply -f ./tekton-pipeline/trigger-config.yaml
Để Trigger hoạt động được với bên ngoài, bạn cần expose service của Tekton Trigger Controller. Đây là bước quan trọng để Git provider có thể gửi webhook vào cluster.
kubectl patch service trigger-listener -n tekton-pipelines -p '{"spec": {"type": "LoadBalancer"}}'
kubectl get service trigger-listener -n tekton-pipelines
Verify Trigger và Endpoint
Kiểm tra xem Trigger đã được tạo và Service đã có địa chỉ IP Public hay không để cấu hình webhook trên GitHub/GitLab.
kubectl get triggers -n tekton-pipelines
kubectl get service trigger-listener -n tekton-pipelines
Sau khi có IP, bạn sẽ cấu hình Webhook trên GitHub/GitLab với URL: http://YOUR_CLUSTER_IP:8080/github (hoặc port tương ứng của service).
Điều hướng series:
Mục lục: Series: Series: Xây dựng hệ thống CI/CD an toàn và tự động hóa cho Kubernetes với ArgoCD, Tekton và HashiCorp Vault
« Phần 2: Triển khai HashiCorp Vault trên Kubernetes
Phần 4: Triển khai và cấu hình ArgoCD cho GitOps »