CI/CD với GitHub Actions: Tự động Build & Push Docker Image Redis + Elasticsearch + Backend
Phần 5: CI/CD với GitHub Actions – Build & Push Docker Image chứa Redis + Elasticsearch + Backend
Tóm tắt: Trong phần trước, chúng ta đã gộp Redis, Elasticsearch và Backend vào một Docker image duy nhất. Giờ là lúc biến quá trình build đó thành một chuỗi CI/CD tự động – mỗi lần bạn push code mới lên GitHub, image sẽ được build và đẩy lên Docker Hub tự động.
1. Mục tiêu
- Tự động build Docker image từ code repo
- Tự động push lên Docker Hub sau mỗi lần push/pull request
- Không cần build bằng tay nữa
2. Điều kiện cần
- Có tài khoản Docker Hub
- Có tài khoản GitHub
- Đã có
Dockerfile
chuẩn từ các phần trước
3. Tạo GitHub Secrets
- Vào GitHub repo của bạn
- Chọn
Settings > Secrets and variables > Actions
- Nhấn New repository secret và tạo:
DOCKERHUB_USERNAME
– tên tài khoản Docker HubDOCKERHUB_TOKEN
– token truy cập (lấy ở Docker Hub > Security)
4. Tạo file GitHub Actions
Tạo file .github/workflows/docker-publish.yml
với nội dung:
name: Build and Push Docker Image on: push: branches: [main] pull_request: branches: [main] jobs: build-and-push: runs-on: ubuntu-latest steps: - name: Check out the repository uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v5 with: context: . push: true tags: ${{ secrets.DOCKERHUB_USERNAME }}/allinone-backend:latest
5. Cấu trúc repo chuẩn
your-repo/ ├── .github/ │ └── workflows/ │ └── docker-publish.yml ├── Dockerfile ├── index.js ├── package.json ├── supervisord.conf ├── elasticsearch.yml
6. Kiểm tra kết quả
- Mỗi khi bạn push lên nhánh main, GitHub sẽ tự động:
- Checkout code
- Login Docker Hub
- Build Dockerfile
- Push image mới lên Docker Hub
- Truy cập Docker Hub → Repositories để thấy image mới
7. (Tùy chọn) Gắn tag theo Git commit
Nếu muốn tự động gắn tag theo hash commit hoặc version, bạn có thể chỉnh lại như sau:
tags: ${{ secrets.DOCKERHUB_USERNAME }}/allinone-backend:latest, ${{ secrets.DOCKERHUB_USERNAME }}/allinone-backend:${{ github.sha }}
8. Tổng kết
Bạn đã thiết lập CI/CD chuẩn devops: cứ mỗi lần cập nhật code, Docker image sẽ được build và xuất hiện trên Docker Hub hoàn toàn tự động. Từ đây, bạn có thể dùng image đó để deploy sang staging, production hoặc local nhanh gọn hơn rất nhiều.
🔥 Tiếp theo (gợi ý): Làm phần deploy từ image đó lên VPS hoặc dùng trong Kubernetes.
Blog: www.baotrongit.com
Tham gia cuộc trò chuyện