Giới thiệu về CI/CD trên AWS
Trong môi trường phát triển phần mềm hiện đại, việc tự động hóa quy trình phát triển và triển khai ứng dụng thông qua CI/CD (Continuous Integration/Continuous Deployment) là cực kỳ quan trọng. Trong bài viết này, chúng ta sẽ khám phá cách xây dựng một pipeline CI/CD trên AWS, bắt đầu với các công cụ mà bạn sẽ làm quen trong 4 ngày tới.
Công cụ sử dụng trong Pipeline
Trong 4 ngày tới, bạn sẽ học và làm việc với các công cụ sau:
- AWS CodeCommit: Quản lý mã nguồn cho các repository Git của bạn.
- AWS CodeBuild: Biên dịch và kiểm tra mã trong pipeline.
- AWS CodeDeploy: Tự động triển khai ứng dụng tới các tài nguyên tính toán của bạn.
- AWS CodePipeline: Công cụ điều phối kết nối mọi thứ lại với nhau.
- Amazon S3: Dùng để lưu trữ các artifact.
AWS CodeCommit là gì?
AWS CodeCommit là dịch vụ quản lý mã nguồn hoàn toàn do AWS cung cấp, hoạt động tương tự như GitHub hay GitLab nhưng trong môi trường AWS.
- Lưu trữ và quản lý mã nguồn: Bạn có thể lưu trữ, quản lý và phiên bản mã nguồn một cách an toàn.
- Hỗ trợ các lệnh Git: Bao gồm clone, push, pull.
- Tích hợp với IAM: Cung cấp xác thực và quyền truy cập chi tiết.
- Hữu ích cho hợp tác và tích hợp: Giúp việc hợp tác và tuân thủ quy định trở nên dễ dàng hơn.
Điều kiện tiên quyết
Trước khi bắt đầu, bạn cần chuẩn bị những điều sau:
- Cài đặt Git trên máy của bạn.
- Cài đặt và cấu hình AWS CLI v2 (
aws configure) với một người dùng/nhóm IAM có quyền CodeCommit. - Người dùng IAM (hoặc vai trò) có thể truy cập CodeCommit (gắn chính sách AWSCodeCommitPowerUser hoặc chính sách chi tiết phù hợp).
NHIỆM VỤ 01 — Tạo một repository CodeCommit và kết nối từ máy cục bộ
A — Tạo repository
Console (nhanh):
- Đăng nhập vào AWS console → Dịch vụ → CodeCommit → Tạo repository. Đặt tên và mô tả rồi tạo.
bash
aws codecommit create-repository \
--repository-name MyDemoRepo \
--repository-description "Demo CI/CD Day50"
Lệnh trên trả về JSON chứa metadata của repository.
B — Chọn phương thức xác thực (chọn một)
Tùy chọn 1 — HTTPS sử dụng thông tin đăng nhập Git IAM (tên người dùng/mật khẩu tĩnh)
- Trong AWS Console → IAM → Người dùng → chọn người dùng IAM của bạn → tab Thông tin bảo mật → dưới mục Thông tin đăng nhập Git HTTPS cho AWS CodeCommit, nhấn Tạo.
- Lưu thông tin tên người dùng/mật khẩu được tạo một cách an toàn (bạn sẽ sử dụng khi Git yêu cầu).
Tùy chọn 2 — HTTPS sử dụng AWS CLI credential helper (khuyên dùng cho các profile AWS / vai trò instance)
- Đảm bảo
aws configuređã được thiết lập (hoặc bạn có một instance/profile với quyền truy cập). - Đặt Git sử dụng AWS credential helper:
bash
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
Với thiết lập này, AWS CLI (hoặc vai trò instance) cung cấp thông tin xác thực cho Git, vì vậy bạn không cần thông tin đăng nhập Git tĩnh.
Tùy chọn 3 — git-remote-codecommit (hữu ích cho xác thực liên kết/federated/SSO/thông tin tạm thời) — xem tài liệu nếu bạn sử dụng SSO hoặc thông tin tạm thời.
C — Nhân bản repository (mới/trống)
Lấy URL clone từ console CodeCommit (hoặc sử dụng mẫu dưới đây). Sau đó:
Nếu bạn muốn clone một repository trống (URL từ console):
bash
git clone https://git-codecommit.<region>.amazonaws.com/v1/repos/<repo-name> my-repo
cd my-repo
Thay thế <region> và <repo-name> bằng giá trị của bạn.
(Nếu bạn sử dụng git-remote-codecommit, bạn có thể sao chép URL GRC từ console thay vào đó.)
NHIỆM VỤ 02 — Thêm tệp vào máy cục bộ, commit, đẩy lên CodeCommit
Chọn kịch bản phù hợp với bạn:
Nếu bạn đã clone repository trống (bạn đang ở trong my-repo):
bash
# tạo một tệp
echo "# Day50 Repo" > README.md
# stage, commit
git add README.md
git commit -m "chore: thêm README cho Day50"
# đẩy lên (sử dụng phương thức xác thực mà bạn đã cấu hình)
git push origin main # hoặc 'master' tùy thuộc vào nhánh mặc định của bạn
Nếu bạn bắt đầu với một repository cục bộ và muốn thêm CodeCommit làm remote:
bash
# trong thư mục dự án cục bộ của bạn
git init
git add .
git commit -m "chore: commit ban đầu"
# đảm bảo tên nhánh là 'main' (tùy chọn)
git branch -M main
# thêm remote CodeCommit (thay thế các placeholder)
git remote add origin https://git-codecommit.<region>.amazonaws.com/v1/repos/<repo-name>
# đẩy lên
git push -u origin main
Thực hành tốt nhất
- Thường xuyên cập nhật mã nguồn: Đảm bảo bạn commit và đẩy mã thường xuyên để tránh mất mã.
- Sử dụng nhánh phát triển: Tạo nhánh phát triển cho tính năng mới và chỉ merge vào nhánh chính khi đã hoàn tất kiểm tra.
Cạm bẫy phổ biến
- Quên xác thực: Đảm bảo bạn đã cấu hình đúng các thông tin xác thực để không gặp phải lỗi khi truy cập repository.
- Chọn nhánh sai: Kiểm tra kỹ nhánh bạn đang làm việc để tránh đẩy mã không mong muốn.
Mẹo hiệu suất
- Sử dụng Git LFS: Nếu bạn làm việc với các tệp lớn, hãy xem xét sử dụng Git LFS để quản lý chúng hiệu quả hơn.
- Tối ưu hóa build: Sử dụng AWS CodeBuild để chỉ build các phần mà có thay đổi.
Khắc phục sự cố
- Lỗi xác thực: Kiểm tra lại thông tin xác thực IAM và đảm bảo vai trò của bạn có quyền truy cập vào CodeCommit.
- Lỗi không tìm thấy nhánh: Đảm bảo bạn đã tạo nhánh trên CodeCommit trước khi push.
Kết luận
Trong bài viết này, chúng ta đã khám phá các công cụ chính để xây dựng một pipeline CI/CD trên AWS, bắt đầu với AWS CodeCommit. Hãy tiếp tục theo dõi các phần tiếp theo để tìm hiểu sâu hơn về từng công cụ và cách tích hợp chúng vào quy trình làm việc của bạn. Hãy thử ngay hôm nay và xây dựng pipeline CI/CD hoàn hảo cho dự án của bạn!
Câu hỏi thường gặp (FAQ)
1. AWS CodeCommit có miễn phí không?
AWS CodeCommit có một tầng miễn phí cho người dùng mới, nhưng bạn sẽ bị tính phí cho các repository lớn hơn.
2. Có thể sử dụng CodeCommit với các công cụ CI/CD khác không?
Có, CodeCommit có thể tích hợp với nhiều công cụ CI/CD khác như Jenkins, CircleCI, v.v.
3. Làm thế nào để xóa một repository trong CodeCommit?
Bạn có thể xóa repository bằng cách vào AWS Console, chọn repository và nhấn nút xóa.
4. Có thể sử dụng CodeCommit cho các dự án mã nguồn mở không?
Có, bạn có thể sử dụng CodeCommit cho các dự án mã nguồn mở, nhưng hãy chú ý đến quyền truy cập và chia sẻ mã nguồn của bạn.
Tài nguyên tham khảo
Hãy cùng nhau khám phá các phần tiếp theo để hoàn thiện pipeline CI/CD của bạn trên AWS!