Hồi trước mình sợ "merge conflict" lắm, giờ thì lại nghiện GitHub Actions.
Nói thật đi, hồi mới làm dev backend, mình thấy Git chỉ là công cụ để lưu file, còn GitHub thì chỉ để khoe code cho sếp thấy mình có làm việc. Nhưng rồi đến giai đoạn phải deploy liên tục, mỗi lần push lên production là tim đập nhanh như chạy marathon. Sợ nhất là cái lúc server sập vì một dòng code ngu ngốc nào đó mà mình sửa mà quên test.
Đó là lúc mình bắt đầu tìm hiểu về CI/CD và rồi vô vàn với GitHub Actions. Ban đầu thấy cái file .github/workflows/deploy.yml toàn tiếng Anh, toàn YAML, đọc mà như đọc sách thánh. Nhưng rồi thấm cái là thấy sướng ghê. Thay vì phải login vào server, chạy từng lệnh thủ công, giờ chỉ cần một cái push lên branch chính, Actions tự động đứng ra làm hết: chạy test, build Docker image, rồi deploy lên cloud.
Mình nhớ có lần đang code feature mới, nóng vội quá mà quên chạy test local. Push lên thì may mà Actions phát hiện ra lỗi ngay lập tức, báo đỏ lòm trên giao diện GitHub, chặn không cho merge. Nếu không có cái workflow đó, chắc đã phải mất nửa đêm để debug server sập rồi.
Có một tip nhỏ mình muốn chia sẻ là đừng cố viết một workflow quá phức tạp ngay từ đầu. Hãy bắt đầu đơn giản, chỉ cần run test. Ví dụ như đoạn này mình hay dùng để test project NodeJS:
name: Node CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run tests
run: npm test
Nhìn đơn giản vậy mà nó cứu mình khỏi biết bao "nightmare". Giờ mình xem Git không còn là nơi lưu file nữa, mà là một "nhà máy" tự động. Mỗi commit là một nguyên liệu, và GitHub Actions là dây chuyền sản xuất. Có những lúc mình lại thích cái cảm giác tự tay gõ lệnh git push origin main hơn, vì nó như một cái nút bấm thần kỳ kích hoạt cả một quy trình tự động.
Nói chung, nếu bạn là dev mà chưa biết gì về CI/CD hay GitHub Actions, thì hãy thử ngay đi. Đừng nghĩ nó khó, chỉ cần bắt đầu từ những bước nhỏ. Cảm giác thấy code của mình tự động chạy test và deploy thành công mà không cần can thiệp thì cực kỳ "phê". Đó là một trong những trải nghiệm "sướng" nhất mà mình có được trong nghề.