04

Kỹ sư DevOps · Bước 4/8 · 8 phút

CI/CD: tích hợp và phát hành liên tục

Giải thích pipeline làm gì với mỗi thay đổi và tự viết một pipeline đơn giản.

Tích hợp liên tục

Tích hợp liên tục, CI (continuous integration), nghĩa là mọi thay đổi được gộp thường xuyên và kiểm tra tự động. Khi bạn mở pull request, một pipeline build code, chạy test và linter, rồi báo kết quả. Vấn đề được phát hiện trong vài phút, khi thay đổi còn nóng hổi trong đầu bạn.

Phát hành và triển khai liên tục

Phát hành liên tục, CD (continuous delivery), nghĩa là mọi thay đổi đã qua kiểm tra đều sẵn sàng phát hành, thường chỉ cần bấm một nút. Triển khai liên tục (continuous deployment) tiến thêm một bước: thay đổi đã qua sẽ tự động lên production.

Cả hai đều cần tin vào test của bạn. Các đội tăng độ an toàn bằng triển khai theo giai đoạn: lên môi trường test, rồi cho một phần nhỏ người dùng, rồi cho tất cả. Feature flag (cờ tính năng) cho phép phát hành code ở trạng thái tắt và bật lên sau.

Pipeline dưới dạng code

Pipeline được viết thành file nằm trong repository, thường là YAML. Công cụ phổ biến gồm GitHub Actions, GitLab CI/CD, Jenkins, CircleCI và Azure Pipelines. Ý tưởng dùng chung được: trigger, job, step, cache và artifact.

Lưu bí mật trong kho bí mật của công cụ, không bao giờ ghi trong YAML. Chỉ cấp cho mỗi pipeline đúng quyền nó cần, vì một pipeline có quyền triển khai là mục tiêu giá trị với kẻ tấn công.

Nhanh và ổn định hơn là khéo léo

Pipeline chạy mất một tiếng sẽ bị phớt lờ. Pipeline lỗi ngẫu nhiên dạy mọi người bấm chạy lại cho đến khi xanh. Giữ cho nó nhanh bằng cache và job song song, và sửa các test chập chờn (flaky test) thay vì giấu chúng đi.

Thử ngay

Thêm workflow CI vào repository

  1. 1.Trong repository ở bước 3, thêm một script hoặc chương trình nhỏ kèm một test.
  2. 2.Hỏi chatbot bằng câu lệnh bên dưới, rồi thêm file workflow nó gợi ý.
  3. 3.Đối chiếu mọi action và phiên bản trong file với tài liệu chính thức của GitHub Actions trước khi commit.
  4. 4.Push và xem lượt chạy trong tab Actions. Repository công khai được chạy job trên máy của GitHub miễn phí.
Viết một workflow GitHub Actions tối giản chạy trên mọi pull request, cài dependency cho một dự án [ngôn ngữ] và chạy test. Dùng ít quyền nhất có thể. Giải thích từng dòng.
Phát hành liên tục (continuous delivery) và triển khai liên tục (continuous deployment) khác nhau thế nào?

Tự kiểm tra

Phát hành liên tục (continuous delivery) và triển khai liên tục (continuous deployment) khác nhau thế nào?