Update Bash Script & Makefile – Cặp đôi tự động hóa thần thánh

0 0 0

Người đăng: Cường Đoàn Ngọc

Theo Viblo Asia

1. 🧠 Là gì? Sinh ra để giải quyết vấn đề gì?

Bash Script là gì?

  • Là file .sh chứ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ệnh make.

  • 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

  1. Tự động hóa lệnh phức tạp: Viết 1 lần – chạy nhiều lần.

  2. Kiểm soát chặt chẽ logic: Có thể dùng if, for, while, function, xử lý lỗi ($?)...

  3. Dễ debug, tái sử dụng: Chạy độc lập, kiểm thử từng bước.


🎯 Makefile

  1. Dễ dùng cho team: make test, make deploy → ai cũng chạy được.

  2. Giảm quên lệnh: Không cần nhớ các câu lệnh dài, phức tạp.

  3. 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:

  1. Chạy test

  2. Build Docker image

  3. Deploy lên server

  4. 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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Xây dựng pipeline học máy với FuseML

Vậy là chỉ 2, 3 tháng nữa là lại đến một mùa bảo vệ khóa luận/đồ án. Trên tình thần hỗ trợ các anh chị em bịa thêm một chương trong báo cáo của mình, bài viết này giới thiệu về giải pháp được cung cấp

0 0 22

- vừa được xem lúc

Khoá học WanDB: Chương 2 - Theo dõi thí nghiệm với WanDB

Khoá học WanDB là một trong những khoá học nằm trong chuỗi các khoá học miễn phí của Sun* AI Research chia sẻ về các chủ đề nhỏ trong lĩnh vực AI. Khoá học này cung cấp các ví dụ cơ bản về WanDB cũng

0 0 18

- vừa được xem lúc

Mờ Lờ Óp #3 - Hiện tượng Concept Drift và Data Drift

Mở đầu. Nghĩ đi anh.

0 0 19

- vừa được xem lúc

Mờ Lờ Óp #2 - Quá trình Deployment

Mở bài. Như chúng ta đã biết Deploy là một bước không thể thiếu trong quá trình Đưa mô hình AI đến tay người dùng.

0 0 17

- vừa được xem lúc

Mờ Lờ Óp #1 - Tổng quan về Mờ Lờ Óp

Mở đầu. Trong Kinh Thánh có một câu nói nổi tiếng rằng Đức tin mà không có việc làm là một ĐỨC TIN CHẾT.

0 0 20

- vừa được xem lúc

[Điểm Tin AI Tuần Qua] Số thứ nhất: 20/11/2022 - 27/11/2022

Đến với số đầu tiên, chúng ta sẽ cùng điểm qua một số nội dung chính như sau:. 1, Các hoạt động đáng chú ý trong tuần:.

0 0 25