Có bao giờ bạn ngồi nhìn cái workflow GitHub Actions của mình chạy mà cảm thấy vừa tự hào vừa muốn khóc không? Mình thì có. Hồi mới bắt đầu đi làm, mình nghĩ CI/CD (Continuous Integration/Continuous Deployment) là thứ chỉ dành cho các công ty lớn, team có đủ người để lo chuyện "xếp hàng" build và deploy. Nhưng rồi đến tay mình, khi dự án nhỏ bé cần phải deploy mỗi ngày mà không muốn mất công login vào server để gõ lệnh thủ công, mình bắt đầu mày mò.
Thật ra, cái khó nhất không phải là viết code, mà là hiểu logic của nó. Lúc đầu mình cứ nghĩ GitHub Actions giống như một cái cron job đơn giản, cứ đến giờ là chạy. Nhưng nào có thế! Nó phức tạp hơn nhiều vì nó liên quan đến event (khi push, khi pull request, khi merge). Có lần mình cấu hình sai, cứ mỗi lần push một commit nhỏ xíu về branch master là nó tự động trigger toàn bộ quy trình test, build Docker, rồi deploy lên production luôn. Tưởng là "siêu tốc", nhưng hóa ra là "tự sát" vì server bị quá tải và code chưa được review kỹ đã tung lên production rồi.
Đó là lúc mình thấm thía câu: "DevOps is not a tool, it's a culture". Mình bắt đầu học cách chia nhỏ workflow. Thay vì một file .github/workflows/deploy.yml khổng lồ bao la, mình tách ra thành các workflow riêng biệt: một cái cho test, một cái cho build, và một cái riêng cho deploy chỉ chạy khi có tag release. Cảm giác như đang lắp ráp một bộ Lego vậy, càng nhiều mảnh nhỏ thì càng dễ sửa, dễ nhìn và an toàn hơn.
Một tip nhỏ mà mình học được sau bao đêm debug: Đừng bao giờ viết code phức tạp quá trong phần - run: echo "..." mà hãy tận dụng các actions có sẵn của cộng đồng. Ví dụ, thay vì tự viết script để login vào Docker Hub, mình dùng action docker/login-action có sẵn. Nó giúp code của bạn dễ đọc hơn, ít lỗi hơn và quan trọng là ai vào team cũng có thể hiểu ngay mà không cần phải là "thần đồng" Linux.
Giờ nghĩ lại, cái trải nghiệm tự build pipeline CI/CD từ con số 0 này dạy mình nhiều thứ hơn là viết một thuật toán phức tạp. Nó dạy mình sự cẩn trọng, cách tư duy về tự động hóa và quan trọng nhất là niềm tin vào công nghệ để giải phóng sức lao động cho những việc sáng tạo hơn. Còn bạn, bạn đã từng "đau đầu" với một workflow nào chưa? Chia sẻ chút kinh nghiệm nhé!