Series Làm chủ Bitbucket | Bài 4: Continuous Deployment (CD) - "Nhấn Merge, Code lên Server"
Trước đây, sau khi review và merge code, bạn thường phải ssh vào server, chạy git pull, rồi php artisan migrate, composer install... Quá trình này không chỉ mất thời gian mà còn đầy rủi ro sai sót (nhầm branch, quên migrate). Continuous Deployment (CD) sẽ làm thay bạn tất cả mọi việc đó ngay khi code được Merge vào nhánh main.
1. Cơ chế Deploy của Bitbucket Pipelines
Chúng ta sẽ sử dụng phương thức SSH để Bitbucket "đăng nhập" vào server của bạn và thực hiện các câu lệnh.
Bước 1: Tạo SSH Key cho Pipeline
- Trong Bitbucket, vào Repository Settings -> Pipelines -> SSH keys.
- Nhấn Generate keys.
- Copy Public Key và lưu nó vào file ~/.ssh/authorized_keys trên Server thật của bạn.
- Lưu Private Key (đã được Bitbucket tạo sẵn).
Bước 2: Khai báo IP Server (Known Hosts)
Trong cùng mục SSH keys đó, nhập địa chỉ IP của server bạn vào phần Known hosts và nhấn Add host. Bước này giúp Bitbucket tin tưởng server của bạn.
2. Cấu hình bitbucket-pipelines.yml cho CD
Bây giờ, hãy mở rộng file bitbucket-pipelines.yml để thêm bước Deploy sau khi Test xong:
image: php:8.2
pipelines:
branches:
main: # Khi merge vào nhánh main
- step:
name: "Chạy Unit Test"
script:
- php artisan test
- step:
name: "Deploy lên Server Metro"
deployment: production # Đánh dấu đây là môi trường production
script:
- pipe: atlassian/ssh-run:0.8.0 # Dùng sẵn pipe của Atlassian
variables:
SSH_USER: 'hieu_engineer'
SERVER: '103.x.x.x' # IP Server của bạn
COMMAND: |
cd /var/www/afc-system
git pull origin main
composer install --no-dev
php artisan migrate --force
php artisan config:cache
3. Tại sao kỹ sư AFC cần "CD" hơn ai hết?
- Zero Downtime: Với các hệ thống như của bạn, việc chạy lệnh php artisan migrate một cách thủ công trên server rất dễ gây lỗi nếu thiếu bước. Với Pipelines, mọi thứ diễn ra theo một kịch bản đã được lập trình sẵn.
- Khả năng quay đầu (Rollback): Nếu sau khi deploy mà hệ thống lỗi, bạn chỉ cần dùng lệnh git revert trên Bitbucket và chạy lại Pipeline, server sẽ tự động quay về trạng thái ổn định trước đó.
- Audit log: Bạn sẽ biết chính xác ai là người deploy, lúc nào, và code nào đang chạy trên server thông qua lịch sử của Bitbucket.
4. Lưu ý sống còn khi làm CD
- Luôn Backup trước khi migrate: Trong lệnh COMMAND, hãy thêm lệnh backup database (mysqldump từ Bài 4 series XAMPP) trước khi php artisan migrate.
- Biến môi trường (Environment Variables): Đừng bao giờ hardcode mật khẩu DB trong file yaml. Hãy dùng Repository Variables (trong Settings -> Pipelines) để lưu mật khẩu DB và khóa SSH một cách an toàn.
Tổng kết series Bitbucket
Từ Bài 1 đến Bài 4, bạn đã đi từ việc tạo một repository đơn giản đến việc xây dựng một hệ thống CI/CD hoàn chỉnh.
Giờ đây, quy trình của bạn đã là: Code -> Push (Feature) -> Pull Request -> Review -> Merge -> Tự động Test -> Tự động Deploy lên Server. Đây chính là tiêu chuẩn mà các công ty công nghệ lớn (như Atlassian hay các hệ thống hạ tầng thông minh) đang áp dụng.
All rights reserved