1. Giới thiệu
Để hiểu rõ hơn về CI/CD minh sẽ làm 1 dự án nhỏ, là viết một ứng dụng để kiểm tra địa chỉ ip (giống như what is my ip, ifconfig.me, …)
Đây chỉ là một dự án nhỏ có thể chưa đi sâu quá nhiều vào chủ đề CI/CD, nhưng cũng giúp hiểu một phần nào.
2. CI/CD là gì
CI/CD là viết tắt của:
- CI – Continuous Integration (tích hợp liên tục)
- CD – Continuous Delivery/ Continuous Deployment (phân phối/ triển khai liên tục)
Đây là một tập hợp các thực hành (practices) nhằm tự động hóa quá trình: viết code -> kiểm tra -> đóng gói -> triển khai
Mục tiêu cốt lõi của CI/CD:
- Giảm lỗi do con người.
- Phát hiện bug sớm.
- Triển khai nhanh, lặp lại được, rollback dễ.
- Code luôn ở trạng thái “có thể deploy”
3. Thực hành
Giai đoạn test: Ở đây minh sẽ có một ubuntu, minh sẽ thực hiện việc test trên local máy này luôn.
Giai đoạn deploy: Sau khi test thành công sẽ push dữ liệu lên github, github sẽ có flow và tạo một image trên docker hub.
Lúc này tới này trên VPS AWS minh sẽ có sẵn file docker-compose.yml để thực thi image trên.
Cây thư mục cho dự án của minh:

Có thể tham khảo tại github: https://github.com/syvtit/ip-info-api/
3.1. Continuous Integration (CI) – Tích hợp liên tục
CI trong project của minh:
- Chạy FastAPI bằng uvicorn trên localhost.
- Build Docker image local
- Chạy container từ image local để xác minh hành vi
- Chỉ khi tất cả test pass thì mới chuyển sang CD.
Mình sẽ mô phỏng một số task trong CI này luôn:
B1: test với uvicorn

B2: thử truy cập vào web kiểm tra

B3: Build image

B4: thử chạy với image đã tạo trên

B5: Kiểm tra kết quả khi truy cập

B6: Kiểm tra health

3.2. Continuous Delivery (CD) – Phân phối liên tục
Continuous Delivery đảm bảo rằng:
- Sau khi CI pass.
- Code luôn ở trạng thái sẵn sàng để deploy.
- Việc deploy có thể là thủ công (chạy lệnh).
CD trong project này của minh sẽ kiểu bán tự động:
- Push code lên github.
- Server pull code/pull image.
- Build và chạy container mới
- Nginx reverse proxy sang container mới
Mình sẽ mô phòng một số task trong project minh luôn.
B1: Kết nối ssh vào github

B2: kết nối vào repository

B3: Kiểm tra trạng thái

B4: Đưa tất cả thay đổi vào thư mục hiện tại

B5: Thực hiện commit

B6: Đẩy tất cả thay đổi lên github (mình sẽ cho phép ghi đè, vì mình đảm bảo các file)

B7: Kiểm tra trên github thì đã thấy được cập nhật
B8: Kiểm tra trên docker hub thì sẽ thấy cập nhật mới
B9: trên máy chủ để deploy production minh đã có sẵn file docker-compose.yml. Lúc này minh chỉ cần thực thi lệnh: sudo docker compose up -d, là đã deploy xong dự án, mỗi khi có gì cập nhật cũng vậy là xong.
