12. tháng 1 2025
Gần đây, tôi luôn bận rộn với việc viết tài liệu API, sử dụng dịch vụ tài liệu dựa trên swaggo. Vì cần phối hợp với đội ngũ frontend, nên mỗi ngày tôi phải cập nhật tài liệu API liên tục, điều này khá phiền phức. Trước đây, quy trình của tôi chỉ ở mức bán tự động:
Mới đây, khi xem xét Makefile của một dự án mã nguồn mở, tôi phát hiện ra rằng có thể sử dụng lệnh ssh để thực thi các lệnh từ xa. Điều này giúp tôi không cần phải đăng nhập thủ công vào server để thao tác, thật tuyệt vời!
.PHONY: tai-lieu
tai-lieu:
swag init --output api_tai_lieu --tags "Ứng dụng di động WeChat, Quản lý thiết bị" --parseDependency --parseInternal --parseGoList=false --parseDepth=1
cd api_tai_lieu/ && go build
.PHONY: trien-khai-tai-lieu
trien-khai-tai-lieu:
make tai-lieu
scp api_tai_lieu/api_tai_lieu nguoi_dung@dia_chi_may_chu:~/du_an/api_tai_lieu/api_tai_lieu2
ssh nguoi_dung@dia_chi_may_chu 'cd ~/du_an && make tai-lieu'
.PHONY: tai-lieu-lai
tai-lieu-lai:
sudo systemctl stop go_tai_lieu
sleep 1
cp api_tai_lieu/api_tai_lieu2 api_tai_lieu/api_tai_lieu
sudo systemctl start go_tai_lieu
sleep 1
sudo systemctl status go_tai_lieu
Như vậy, giờ đây tôi có thể triển khai và khởi động lại dịch vụ chỉ với một dòng lệnh:
make trien-khai-tai-lieu
Đối với những tình huống phức tạp hơn, chẳng hạn như kiểm tra sự tồn tại của thư mục, tự động sao lưu trước khi thay thế, i9bet chúng ta sẽ cần nhiều đoạn mã shell hơn. Làm xèng thế nào để viết thành nhiều dòng?
Do không nhớ rõ cú pháp của shell, tôi đã nhờ đến trợ lý ChatGPT:
Có thể thực hiện giải nén và chạy nhiều lệnh ssh từ xa bằng cách viết thành nhiều dòng không? Tôi cảm thấy mình gần như đã trở thành chuyên gia về Linux Shell rồi! 😄
ssh nguoi_dung@dia_chi_may_chu '
tar -zxvf /duong_dan_den/tap_tin.tar.gz -C /duong_dan_tren_host_va_remote && \
lenh1 && \
lenh2 && \
lenh3
'