Tạo CI/CD với BKE sử dụng Github Action
Giới thiệu
Trong techblog này, tôi sẽ hướng dẫn deploy một ứng dụng python đơn giản lên cụm BKE, và sẽ triển khai CI CD cho ứng dụng.
Công việc gồm có 3 bước chính sau:
- Tạo file workflow
- Tạo tài nguyên trên k8s
- Chạy workflow
Mô hình:
Chuẩn bị:
Trước khi tạo workflow cho CI/CD github chúng ta cần chuẩn bị những thành phần sau
- Repo Github để có thể thực hiện deploy code khi push code lên Git.
- BizflyCloud Container Registry
- BizflyCloud Kubernetes Engine
- Docker file để build image ứng dụng
- FIle Yaml để Kubernetes deploy
Tạo các tài nguyên:
Đầu tiên ta cần tạo 1 Repo Github để chứa code, trong này cần có Dockerfile để thực hiện build, ở đây có repo mẫu:
https://github.com/lmq1999/cicd_test
ta cần tạo cluster K8S: https://bizflycloud.vn/kubernetes-engine trong bài viết sẽ tạo cluster K8S trên dịch vụ BKE của BizflyCloud.
Tiếp theo ta sẽ cần một nơi để lưu image, ta sẽ sử dụng dịch vụ Container Registry của Bizfly Cloud: https://bizflycloud.vn/container-registry
Tạo CI/CD
1. Tạo file workflow
Tạo 2 job là build và deploy
Ở đây ta sẽ thấy có biến dạng ${{ secrets.xxx }} biến này ở trong Setting → Secret and Variable
Ta sẽ khai báo 3 biến là
- USER_CLOUD: tên tài khoản đăng nhập vào bizflycloud
- PASS: password của tài khoản
- KUBE_CONFIG: Kubeconfig ở dạng base64
Các thành phần trong file workflow
1.1 Xác định event sẽ kích hoạt workflow.
Ở đây chỉ khi ta push vào brand main thì mới kích hoạt được workflow
Tạo Workflow Run
Workflow run sẽ khai báo các job, các job này có thể chạy song song với nhau hoặc tuần tự.
Trong đó sẽ khai báo loại hđh để chạy job và các bước trong job đó, sử dụng 2 từ khóa là run-on và steps
1.2. Xác định các bước trong job
Các bước (step) là các task riêng biệt sẽ chạy các câu lệnh trong job, Các step sẽ có từ khóa uses và run
Ở đây ta sẽ checkout repository vào GITHUB_WORKSPACE
để job có thể truy cập được
GITHUB_WORKSPACE
là một biến môi trường trong runtime Github Action. Thư mục này sẽ copy repository khi kích hoạt workflow. Các thay đổi trong đây sẽ được lưu trong job
Tiếp theo ta khai báo action để build image đẩy lên container registry
Ở đây ta sẽ dùng container registry của BizflyCloud để lưu docker image, các từ khóa ý nghĩa như sau
- registry: domain của CR mà sẽ sử dụng
- name: link đến repository
- username/password: Thông tin đăng nhập vào registry
Tiếp theo ta khai báo steps deploy
Ở đây ta sẽ dùng action kubectl để restart pod, ở đây ta sẽ cần khai báo KUBE_CONFIG và args: rollout restart để restrart pod, như vậy khi có image mới lên thì pod pull về
2. Triển khai app lên Kubernetes
Ta apply file yaml này vào cụm Kubernetes vừa dựng. Sau khi đã tạo được LoadBalancer, ta truy cập vào
Khi truy cập vào trang web thì có thể thấy trả về dữ liệu là Hello there + path
3. Thực hiện thay đổi để chạy github action
Sau khi deploy thành công ta quay lại trang web, ta đã thay đổi dữ liệu trả về thành Xin chao + /path
Như vậy chỉ cần deploy code thì hệ thống cũng được cập nhật code mới theo luôn. Rút ngắn quá trình triển khai
>> Có thể bạn quan tâm: 10 lợi ích hàng đầu của tích hợp liên tục & phân phối liên tục (CI/CD)