Chạy GitHub Actions cục bộ với act: Debug pipeline ‘thần tốc’ không cần push code

Docker tutorial - IT technology blog
Docker tutorial - IT technology blog

Cơn ác mộng mang tên “Fix CI/CD” lúc 2 giờ sáng

Kịch bản này chắc chắn không xa lạ: Production lăn ra chết lúc nửa đêm. Bạn vội vã vá code, push lên và ngồi “khấn” cho GitHub Actions chạy thành công. Nhưng không, vòng tròn cứ xoay rồi hiện dấu X đỏ chót. Lỗi chẳng nằm ở logic code, mà chỉ vì file YAML thừa một dấu cách hoặc thiếu một biến môi trường (Environment Variable).

Thế là chuỗi ngày tăm tối bắt đầu. Sửa YAML, push code, đợi 3-5 phút cho Runner khởi động. Lại báo đỏ. Lại sửa, lại push. Sau 2 tiếng vật lộn, Git history trông như một bãi chiến trường với 20 commit kiểu: “fix ci”, “fix ci again”, “hope this works”… Vừa mất thời gian, vừa ức chế kinh khủng!

Tại sao debug GitHub Actions lại tốn sức đến thế?

Cái “đau” nhất của CI/CD Cloud chính là feedback loop (vòng lặp phản hồi) quá chậm. Mỗi thay đổi nhỏ nhất cũng buộc bạn phải đẩy code lên server GitHub. Bạn hoàn toàn mù mờ về những gì diễn ra bên trong container của GitHub, trừ khi chèn hàng tá lệnh ls -la hoặc echo $VAR để soi log một cách thủ công.

Tôi từng mất nguyên một buổi sáng chỉ để push đi push lại đúng một dòng chmod +x deploy.sh vì quên set quyền thực thi. Đồng nghiệp nhìn vào lịch sử commit mà chỉ biết lắc đầu ngao ngán. Nếu lúc đó biết cách chạy workflow ngay dưới máy mình, tôi đã tiết kiệm được ít nhất 3 giờ làm việc và hàng tá dung lượng miễn phí của GitHub Actions.

Các giải pháp tình thế (và điểm yếu của chúng)

  • Chạy script thủ công: Bạn copy lệnh từ YAML ra terminal máy nhà. Kết quả? Máy bạn là macOS/Windows, còn Runner là Ubuntu. Lên GitHub vẫn lỗi vì lệch phiên bản Node hoặc thiếu thư viện hệ thống.
  • Dùng branch rác để test: Cách này giúp giữ branch chính sạch đẹp, nhưng bạn vẫn phải đợi Runner khởi động. Cảm giác chờ 5 phút chỉ để biết mình thiếu một dấu ngoặc kép thực sự rất “thốn”.

Cứu tinh xuất hiện: Mang GitHub Actions về máy với “act”

Để chấm dứt sự lãng phí này, hãy dùng act. Công cụ này sử dụng Docker để dựng lên một môi trường giả lập gần như y hệt GitHub Runner ngay trên máy tính của bạn. Nó đọc file workflow, tự tải image và chạy job trong tích tắc.

Cài đặt act trong 30 giây

Việc cài đặt act cực kỳ đơn giản. Tùy hệ điều hành, bạn hãy dùng các lệnh sau:

# macOS (Homebrew)
brew install nektos/tap/act

# Windows (Winget)
winget install nektos.act

# Linux
curl https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash

Lưu ý: Bạn cần cài sẵn Docker vì đây là nền tảng cốt lõi để act tạo môi trường chạy job.

Kích hoạt workflow đầu tiên

Chỉ cần di chuyển vào thư mục root của dự án (nơi có folder .github/) và gõ:

act

Mặc định, lệnh này sẽ chạy các job ứng với sự kiện push. Để chạy job cho các event khác hoặc chỉ định job cụ thể, bạn có thể dùng:

# Chạy event pull_request
act pull_request

# Xem danh sách các job hiện có
act -l

# Chỉ chạy đúng job có tên 'build-test'
act -j build-test

Quản lý Secrets không còn là nỗi lo

Thay vì phải lên giao diện web của GitHub để cấu hình Secrets, bạn chỉ cần tạo một file .env tại máy cục bộ:

act --secret-file .env

Nội dung file .env cực kỳ quen thuộc:

DOCKER_PASSWORD=my_secret_key
AWS_ACCESS_KEY_ID=AKIAXXXXXXXXXXXX

Quan trọng: Hãy chắc chắn đã thêm .env vào .gitignore để tránh biến máy mình thành mục tiêu tấn công khi lỡ tay push secret lên repo.

Kinh nghiệm “xương máu” để dùng act hiệu quả

Dù mạnh mẽ, act vẫn có những điểm khác biệt so với môi trường cloud thật sự. Hãy lưu ý 3 điểm sau:

1. Đừng tham Image lớn

Khi mới chạy, act sẽ hỏi bạn chọn Image (Small, Medium, Large). Image mặc định của GitHub nặng tới hơn 15GB. Nếu ổ cứng không quá dư dả, hãy chọn bản Medium (~500MB). Bản Small thường thiếu git hoặc curl, dễ gây lỗi vặt khiến bạn hiểu lầm là do file YAML sai.

2. Xử lý Docker-in-Docker

Nếu workflow của bạn có lệnh docker build, bạn phải chia sẻ Docker socket từ máy thật vào container của act bằng flag:

act --container-daemon-socket /var/run/docker.sock

3. Kiểm tra Artifacts

act không tự đẩy file build (Artifacts) lên cloud. Để kiểm tra sản phẩm sau khi chạy xong, hãy dùng --artifact-server-path để lưu file trực tiếp vào một folder trên máy bạn.

Kết luận: Hãy làm chủ CI/CD thay vì để nó hành hạ

Sử dụng act không chỉ là chuyện tiết kiệm thời gian. Nó giúp bạn xây dựng tư duy DevOps chuyên nghiệp: Thử nghiệm nhanh, sai sớm, sửa ngay tại chỗ. Đừng để những lỗi cú pháp ngớ ngẩn làm hỏng giấc ngủ hay biến Git history của bạn thành một bãi rác.

Hãy cài thử act ngay hôm nay, bạn sẽ thấy việc debug CI/CD cũng thú vị chẳng kém gì lúc viết code!

Share: