Tích hợp Spinner API vào luồng CD ứng dụng

Bài viết sau sẽ hướng dẫn tích hợp Spinner API vào luồng CD của ứng dụng, ví dụ được thực hiện trên gitlab

Pre-condition

  • Có sẵn một spinner trong workspace

  • Có sẵn một ứng dụng và một project của ứng dụng trên gitlab

Cài đặt cấu hình ứng dụng lần đầu qua Sun Spinner

Người dùng truy cập vào workspace và triển khai ứng dụng với spinner. Ứng dụng có thể viết bằng các ngôn ngữ khác nhau như: java, golang, php, csharp,…. Trong bài này sẽ hướng dẫn với triển khai một ứng dụng golang với version ban đầu là v1.0.0.

Sau khi triển khai ứng dụng với spinner, export một domain ra ngoài internet để có thể truy cập vào ứng dụng và hiển thị ra version của ứng dụng.

Step Step

Version hiện tại đang là 1.0.0

Tạo Spinner API key

Quá trình CD của ứng dụng sẽ bao gồm việc update version cho ứng dụng qua Spinner API. Để có thể sử dụng Spinner API người dùng phải dùng có một access key(token) được tạo ra từ chức năng Spinner API Key. Tạo sẵn một Spinner API Key có quyền access vào spinner vừa tạo.

Thiết lập kịch bản CD của ứng dụng

Để xây dựng được luồng CD cho ứng dụng, người dùng cần tạo thêm 2 file đó là: Dockerfile và .gitlab-ci.yml.

Dockerfile là các bước để build ứng dụng thành image . Còn file .gitlab-ci.yml sẽ là các bước thực hiện build ứng dụng và triển khai ứng dụng với version mới lên spinner.

Dockerfile sẽ có nội dung như sau:

Step

file .gitlab-ci.yml:

Step

Quá trình CD ứng dụng sẽ được chia làm hai giai đoạn là build-image và deploy được định nghĩa trong stages:

Giai đoạn build image: đây là giai đoạn build ứng dụng của người dùng thành image và push image lên repository docker hub.

Việc Build image sẽ được thực hiện bởi câu lệnh:

docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG .

Sau đó image sẽ được push lên repository với câu lệnh:

docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG

Người dùng cần cung cấp một số biến môi trường để có thể hoàn thành được quá trình build image:

  • $REGISTER_USER: username docker hub.

  • $REGISTRY_PASS: password hoặc token của docker hub.

  • $CI_REGISTRY_IMAGE: repository của docker hub mà người dùng push image lên.

  • $CI_COMMIT_TAG: tag là version mà người dùng muốn nâng cấp ứng dụng. Biến này sẽ được tự động thêm vào trong quá trình chạy luồng CD của ứng dụng khi người dùng đánh tag cho ứng dụng, người dùng không cần phải cấu hình thủ công.

Giai đoạn deploy: đây là giai đoạn update ứng dụng với version được build ở giai đoạn build image.

Việc update sẽ được thực hiện bằng cách trigger call API update với câu lệnh:

curl -X PUT "https://client-access-prod.sunteco.vn/spinner-management/v1/spinner/container/image" -H "accept:*/*" -H "Api-key:$SPINNER_TOKEN" -H "Content-Type:application/json" -d '{ "containerName":"$CONTAINER_NAME", "imageTag":"$CI_COMMIT_TAG", "spinnerUUID":"$SPINNER_UUID", "workspaceUUID":"$WORKSPACE_UUID" }

Các biến môi trường người dùng cần cung cấp thêm:

  • $SPINNER_TOKEN: token dùng để tương tác với Spinner API, được lấy từ bước tạo Spinner Token.

  • $CONTAINER_NAME: tên của container đang chạy ứng dụng.

  • $SPINNER_UUID: UUID của spinner, người dùng có thể lấy thông tin này tại màn hình danh sách spinner trên trang dashboard.

  • $WORKSPACE_UUID: UUID của workspace, người dùng có thể lấy thông tin này tại màn hình danh sách workspace trên trang dashboard.

Step
Step

Các biến môi trường được cài đặt trong phần Setting → CI/CD → Variables.

Step

Tiến hành CD cho ứng dụng:

Tại phần source code của ứng dụng, người dùng tiền hành commit, push code lên project trên gitlab. Đồng thời đánh tag cho ứng dụng và push tag lên gitlab. Cụ thể ở ví dụ này, tag mới sẽ được push lên là v1.0.1. Thực hiện các câu lênh sau để đánh đấu và push tag lên gitlab.

git tag v1.0.1

git push origin v1.0.1

Sau khi thực hiện xong việc push tag, tại project của ứng dụng, chọn tag vừa được push sẽ thấy được luồng CD sẽ được tự động chạy với hai giai đoạn là build_image và deploy.

Step
Step

Ứng dụng sẽ được update version v1.0.1 sau khi hai giai đoạn được thực hiện thành công.

Tại giai đoạn deploy có thể thấy đoạn script call api trigger update version của ứng dụng sang v1.0.1.

Step

Kết quả

Quay Trở lại trang giao diện dashboard để check xem version đã được update thành công hay chưa.

Step

Version mới đã được cập nhật vào hệ thống

Step

Version mới được deploy

Cập nhật Image có thay đổi biến môi trường

Trên đây là một trường hợp update version ứng dụng với spinner api trong luồng CD. Ngoài update version, người dùng có thể update các biến môi trường của ứng dụng. Quá trình CD update các biến môi trường của ứng dụng tương tự như update version chỉ cần thay đổi body lúc trigger update ở đoạn scripts được viết trong file .gitlab-ci.yml. Ở đây sẽ demo nhanh phần update các biến môi trường bằng api qua postman.

Step
Step

Link source code golang người dùng có thể tham khảo ở đây: https://github.com/Sunteco/spinner-cd