CYBERSOFT
Đăng nhập

PACT Broker & CI: can-i-deploy và triển khai độc lập an toàn

Chuyên nâng caoContract/PACTCI/CDNâng cao
🗓 1 tháng trước19 phút đọc·👁 1,738 lượt xem👤 136 người đọc

Kiến trúc Broker, publish pact kèm version/tag, ma trận tương thích, can-i-deploy, record-deployment, webhooks, pending/WIP pacts và pipeline CI đầu-cuối.

1. Vì sao pact file rải rác là không đủ

Khi mới bắt đầu, ta chép tay pact file từ consumer sang provider. Cách này sập ngay khi hệ thống lớn lên: một nền tảng SaaS đa tenant có thể có hàng chục dịch vụ, mỗi cặp consumer–provider lại có nhiều version đang chạy ở các môi trường khác nhau. Câu hỏi thật sự cần trả lời không phải 'file pact ở đâu' mà là 'version consumer tôi sắp deploy có tương thích với version provider đang chạy production không'. Không một file tĩnh nào trả lời được câu này; ta cần một nơi tập trung ghi nhớ mọi pact, mọi version, và mọi kết quả verify.

Pact Broker là hạ tầng đó. Nó là một dịch vụ lưu trữ pact được publish, gắn mỗi pact với version và tag của consumer, nhận kết quả verify từ provider, và từ đó xây một ma trận tương thích. Trên nền ma trận này, Broker cung cấp câu trả lời 'có/không' cho câu hỏi deploy — biến contract testing từ một bộ test rời rạc thành một cơ chế điều phối release an toàn cho cả tổ chức.

Oracle của bài này: KHÔNG BAO GIỜ deploy một version mà các hợp đồng của nó chưa được verify tương thích với môi trường đích.

2. Kiến trúc Pact Broker

Về mặt kiến trúc, Pact Broker là một ứng dụng web có database (thường PostgreSQL) lưu bốn nhóm dữ liệu: các pact đã publish, các version và tag của consumer/provider, các kết quả verification, và các bản ghi deployment/release. Consumer CI đẩy pact lên; provider CI kéo pact về, verify, rồi đẩy kết quả lên. Có thể tự host bằng Docker image chính thức, hoặc dùng bản quản lý PactFlow. Với đội nhỏ, một container Broker + một PostgreSQL là đủ để bắt đầu.

Pact Broker · ブローカーの役割 Consumer CIpublish pact Pact Brokerpacts + versionstags + resultsmatrixcan-i-deploy Provider CIverify + publish webhook: pact mới → kích hoạt provider verify / new pact triggers provider verify
Broker đứng giữa: nhận pact từ consumer, kết quả từ provider, trả lời can-i-deploy.
yaml
# docker-compose.yml — Pact Broker tự host tối thiểu
services:
  postgres:
    image: postgres:16
    environment: { POSTGRES_USER: pact, POSTGRES_PASSWORD: pact, POSTGRES_DB: pact }
  broker:
    image: pactfoundation/pact-broker:latest
    ports: ["9292:9292"]
    depends_on: [postgres]
    environment:
      PACT_BROKER_DATABASE_URL: "postgres://pact:pact@postgres/pact"
      PACT_BROKER_BASIC_AUTH_USERNAME: admin
      PACT_BROKER_BASIC_AUTH_PASSWORD: ${BROKER_PASSWORD}

3. Publish pact kèm version & tag

Sau khi test consumer sinh ra pact, bước publish đẩy nó lên Broker cùng hai mẩu metadata quan trọng: consumer version (nên là git sha để truy vết) và branch/tag (ví dụ nhánh main hay môi trường). Tag là cách Broker biết một version đang 'ở đâu' trong vòng đời — nhờ tag, câu hỏi 'consumer nào đang chạy production' có câu trả lời chính xác. Việc publish thường dùng CLI pact-broker hoặc lệnh tích hợp trong thư viện.

bash
# publish pact với version = git sha và gắn branch hiện tại
pact-broker publish ./pacts \
  --consumer-app-version "$GIT_SHA" \
  --branch "$GIT_BRANCH" \
  --broker-base-url "$PACT_BROKER_URL" \
  --broker-token "$PACT_BROKER_TOKEN"

# ví dụ: consumer 'wallet-web' version a1b2c3 trên branch main
🔒

Nội dung bị khoá

Bạn đang xem bản xem trước. Đăng nhập để mở khoá toàn bộ bài viết và tất cả tài liệu Tester/QA.

Đã xem 23% nội dung
  • Đọc trọn vẹn mọi bài viết
  • Lưu bài & ghi chú cá nhân
  • Theo dõi tiến độ đã đọc
  • Luyện phỏng vấn, ISTQB, Mock
Đăng nhập để đọc tiếp

Chưa có mã? Lấy mã qua Fanpage / Zalo CyberSoft.

0

💬 Bình luận (0)

Bạn có thể đọc mọi bình luận. Đăng nhập để bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!