Tạo CI/CD với BKE sử dụng Github Action

592
29-05-2023
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:

  1. Tạo file workflow
  2. Tạo tài nguyên trên k8s
  3. Chạy workflow

Mô hình:

Tạo CI/CD với BKE sử dụng Github Action - Ảnh 1.

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

Tạo CI/CD với BKE sử dụng Github Action - Ảnh 2.

Ở đâ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
Tạo CI/CD với BKE sử dụng Github Action - Ảnh 3.

Các thành phần trong file workflow

1.1 Xác định event sẽ kích hoạt workflow.

Tạo CI/CD với BKE sử dụng Github Action - Ảnh 4.

Ở đâ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-onsteps

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 usesrun

Tạo CI/CD với BKE sử dụng Github Action - Ảnh 5.

Ở đâ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

Tạo CI/CD với BKE sử dụng Github Action - Ảnh 6.

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

Tạo CI/CD với BKE sử dụng Github Action - Ảnh 7.

Ở đây ta sẽ dùng action kubectl để restart pod, ở đây ta sẽ cần khai báo KUBE_CONFIGargs: 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 

Tạo CI/CD với BKE sử dụng Github Action - Ảnh 8.

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

Tạo CI/CD với BKE sử dụng Github Action - Ảnh 9.

Khi truy cập vào trang web thì có thể thấy trả về dữ liệu là Hello there + path

3Thực hiện thay đổi để chạy github action

Tạo CI/CD với BKE sử dụng Github Action - Ảnh 10.

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

Tạo CI/CD với BKE sử dụng Github Action - Ảnh 11.

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)

SHARE