Update Bash Script & Makefile – Cặp đôi tự động hóa thần thánh
1. 🧠 Là gì? Sinh ra để giải quyết vấn đề gì?
✅ Bash Script là gì?
-
Là file
.shchứa các dòng lệnh shell (thường là Bash) được thực thi tuần tự. -
Sinh ra để:
-
Tự động hoá các thao tác hệ thống lặp đi lặp lại như cài đặt, deploy, backup, xử lý file...
-
Thay vì gõ thủ công từng lệnh → chỉ cần chạy 1 file.
-
✅ Makefile là gì?
-
Là file định nghĩa các "target" (ví dụ:
test,build,deploy) dùng bởi lệnhmake. -
Sinh ra để:
-
Quản lý nhiều lệnh thành menu điều khiển – ngắn gọn, dễ nhớ.
-
Dùng nhiều trong build code C/C++, nhưng giờ được dùng rộng rãi cho bất kỳ project nào.
-
2. 💎 3 Lợi Ích Của Mỗi Công Cụ
🎯 Bash Script
-
Tự động hóa lệnh phức tạp: Viết 1 lần – chạy nhiều lần.
-
Kiểm soát chặt chẽ logic: Có thể dùng
if,for,while,function, xử lý lỗi ($?)... -
Dễ debug, tái sử dụng: Chạy độc lập, kiểm thử từng bước.
🎯 Makefile
-
Dễ dùng cho team:
make test,make deploy→ ai cũng chạy được. -
Giảm quên lệnh: Không cần nhớ các câu lệnh dài, phức tạp.
-
Tổ chức pipeline rõ ràng: Từng bước gọn, dễ đọc như menu.
3. ⚖️ So sánh Bash Script vs Makefile
| Tiêu chí | Bash Script | Makefile |
|---|---|---|
| Mục đích | Thực thi logic từng bước | Tổ chức & gọi các bước |
| Cách dùng | bash deploy.sh |
make deploy |
| Viết như nào? | Lệnh bash thuần | target:\n\t<lệnh> |
| Mạnh về | Logic phức tạp, xử lý linh hoạt | Menu gọn, dễ dùng, dễ nhớ |
| Dùng cho | Triển khai, backup, test, logic cụ thể | Orchestration nhiều bước, teamwork |
✅ Tóm lại:
-
Bash Script là nơi viết logic chi tiết
-
Makefile là "menu điều khiển" gọi những logic đó
4. 🚀 Best Practices Khi Kết Hợp Bash Script & Makefile
| Thực hành tốt | Ý nghĩa |
|---|---|
| ✅ Tách logic vào script riêng | Mỗi script làm 1 việc (test.sh, build.sh...) |
| ✅ Makefile gọi các script | Target make deploy chỉ gọi bash scripts/deploy.sh |
✅ Dùng .PHONY cho các target |
Tránh lỗi khi target trùng tên file |
| ✅ Thêm menu help | Gợi nhớ lệnh: make help |
| ✅ Đặt log + kiểm tra lỗi trong script | Bắt $?, dùng exit 1 nếu có lỗi |
| ✅ Sử dụng shellcheck, bash-lint | Phát hiện lỗi Bash sớm |
🔥 Bonus: Ví dụ mẫu
🚀 Use Case: Tự động hoá CI/CD đơn giản cho Web App dùng Docker
🎯 Mục tiêu:
Tự động hóa quy trình:
-
Chạy test
-
Build Docker image
-
Deploy lên server
-
Gửi thông báo sau khi deploy
📁 Cấu trúc dự án:
project/
├── scripts/
│ ├── test.sh
│ ├── build.sh
│ ├── deploy.sh
│ └── notify.sh
├── Makefile
├── docker-compose.yml
├── app/ (source code)
└── README.md
⚙️ Bash Scripts – Viết riêng biệt, modular
scripts/test.sh
#!/bin/bash
echo "🔍 Running unit tests..."
pytest
if [ $? -ne 0 ]; then
echo "❌ Test failed. Abort pipeline."
exit 1
fi
echo "✅ Tests passed!"
scripts/build.sh
#!/bin/bash
echo "🔨 Building Docker image..."
docker build -t myapp:latest .
echo "✅ Build complete!"
scripts/deploy.sh
#!/bin/bash
echo "🚀 Deploying app via docker-compose..."
docker-compose down
docker-compose up -d
echo "✅ Deployment complete!"
scripts/notify.sh
#!/bin/bash
echo "📧 Sending notification..."
echo "Deployment successful at $(date)" | mail -s "Deploy Success" you@example.com
🧰 Makefile – Điều hướng và tổ chức workflow
.PHONY: all test build deploy notify ci
all: ci
test:
bash scripts/test.sh
build:
bash scripts/build.sh
deploy:
bash scripts/deploy.sh
notify:
bash scripts/notify.sh
ci: test build deploy notify
@echo "🎉 CI/CD pipeline completed successfully!"
💡 Cách sử dụng
| Lệnh | Ý nghĩa |
|---|---|
make hoặc make all |
Chạy toàn bộ pipeline |
make test |
Chạy test |
make build |
Build Docker image |
make deploy |
Deploy app |
make notify |
Gửi thông báo |
make ci |
Chạy CI/CD end-to-end |
✅ Best Practice Giải Thích
| Tiêu chí | Áp dụng |
|---|---|
| Modular hóa | Scripts chia nhỏ, dễ tái sử dụng và bảo trì |
| Tối ưu teamwork | Makefile như một menu giúp cả team dễ dùng, dễ nhớ |
| Kiểm soát lỗi | Script có kiểm tra lỗi, exit 1 nếu cần |
| Tách biệt concern | Logic Bash nằm trong scripts, Makefile chỉ điều phối |
| Có thể mở rộng | Dễ thêm make backup, make rollback, make lint,... |
✅ Tổng kết:
Bash Script = thực hiện từng bước cụ thể
Makefile = menu orchestration – chạy tuần tự, gọn, dễ dùng cho cả team
All rights reserved