5.5 KiB
5.5 KiB
name, description
| name | description |
|---|---|
| GenerateGitHubActions | Hướng dẫn tạo CI/CD pipeline tự động hóa Build, Test, Docker Build & Deploy bằng GitHub Actions. |
GenerateGitHubActions Skill
Khi user yêu cầu tạo CI/CD Pipelines (ví dụ: GitHub Actions, hoặc tương đương cho GitLab CI / Azure DevOps), bạn cần sinh ra file luồng tự động hóa theo các bước chuẩn sau đây.
Mục đích
- Tự động hóa quá trình kiểm tra mã nguồn (CI) và triển khai (CD).
- Đảm bảo code push lên nhánh
mainluôn hoạt động đúng đắn và sẵn sàng lên production.
Hướng dẫn sinh cấu hình (GitHub Actions)
Tạo file luồng công việc Workflow cho GitHub Actions.
1. Đường dẫn và tên file
- Đường dẫn:
.github/workflows/ci-cd.yml - (Hoặc theo định dạng của platform tương ứng:
.gitlab-ci.ymlcho GitLab,azure-pipelines.ymlcho Azure DevOps).
2. Các bước cấu hình bắt buộc trong file YAML
Workflow cần trải qua các luồng chính sau (mẫu dưới dây cho GitHub Actions):
Phân đoạn 1: Build & Test (CI)
- Triggers: Lắng nghe sự kiện
pushhoặcpull_requestvào nhánhmain. - Setup môi trường:
- Checkout mã nguồn (ví dụ dùng
actions/checkout@v4). - Cài đặt .NET SDK tương ứng với dự án (ví dụ
actions/setup-dotnet@v4cho .NET 8.0). Lưu ý: Bật tính năng cache Nuget để tăng tốc độ build.
- Checkout mã nguồn (ví dụ dùng
- Run Tests:
- Chạy khối lệnh
dotnet restore,dotnet build --no-restore. - Quan trọng nhất: Chạy
dotnet test --no-build --verbosity normal. (Chỉ khi Test Xanh (Passed) thì các bước sau mới được chạy tiếp).
- Chạy khối lệnh
Phân đoạn 2: Docker Build & Push (Bắt đầu CD)
- Cần điều kiện: Chỉ chạy khi Job Build & Test thành công (
needs: build). - Đăng nhập Container Registry:
- Login vào Docker Hub hoặc Azure Container Registry (ACR) sử dụng System Secrets (ví dụ
DOCKER_USERNAMEvàDOCKER_PASSWORD).
- Login vào Docker Hub hoặc Azure Container Registry (ACR) sử dụng System Secrets (ví dụ
- Build & Push Image:
- Build Image từ Dockerfile (chú ý chỉ đường dẫn thư mục gốc nơi chứa dự án chính để
docker buildcó thể truy cập qua các tầng thư mục Clean Architecture). - Gắn tag cho Image (ví dụ:
latesthoặc theo Commit SHA/phiên bản). - Push Image lên Registry.
- Build Image từ Dockerfile (chú ý chỉ đường dẫn thư mục gốc nơi chứa dự án chính để
Phân đoạn 3: Deploy to Server (CD - Webhook / SSH)
- Dùng thư viện
appleboy/ssh-action(hoặc tương tự) để SSH vào Server đích. - Yêu cầu server pull file Image mới nhất từ Registry.
- Quan trọng: Ưu tiên sử dụng
docker composeđể deploy (pull và up) nếu cấu trúc dự án của user có filedocker-compose.yml, giúp khởi động lại toàn bộ stack (API, DB, Redis...) thay vì chỉ chạydocker runđộc lập.
Mẫu File Mặc Định (ci-cd.yml)
Dưới đây là khung mẫu bạn cần căn cứ để thiết kế khi sinh file cho user:
name: CI/CD Pipeline
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
cache: true # Bật cache Nuget, lần sau build nhanh gấp đôi
cache-dependency-path: '**/packages.lock.json'
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore
- name: Test
run: dotnet test --no-build --verbosity normal
docker-build-push:
needs: build-and-test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/chi-tiet-ten-project-lowercase:latest
deploy:
needs: docker-build-push
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
cd /path/to/your/project/on/server # Trỏ tới thư mục chứa docker-compose.yml
docker compose pull # Kéo image mới nhất về (dựa theo file compose)
docker compose up -d --build # Khởi động lại các service có sự thay đổi
Lưu ý cho AI Agent
- Khi User yêu cầu sinh pipeline, hãy yêu cầu User xác nhận về tên tài khoản Docker Hub, Server Credentials và nhắc họ cấu hình đầy đủ
Secretstrên GitHub sau khi sinh file. - Hãy tự động thay thế chuỗi tên project (
chi-tiet-ten-project-lowercasetrong mẫu) bằng tên thật của Project / Repository mà User đang thao tác. Chuyển tất cả về chữ thường (lowercase) khi đặt tên Docker Image để tránh lỗi định dạng của Docker. - Nếu user có dùng
docker-compose, hãy ưu tiên sinh lệnhdocker compose up -dthay vìdocker runthuần.