Xem trước bản dựng không có gì mới hoặc sáng tạo. Heroku đã có chúng trong nhiều năm. Tuy nhiên, nếu bạn đang xây dựng trên Google Cloud Platform, mọi thứ sẽ khó khăn hơn một chút. Google Cloud Build có thể được sử dụng để triển khai cho Cloud Function, Cloud Run, Kubernetes, App Engine, v.v. Đây là điều khiến cho việc xem trước hơi phức tạp vì Cloud Build không biết bạn đang triển khai ứng dụng hoặc dịch vụ của mình đến đâu. Họ có Ứng dụng GitHub để kết nối các kho lưu trữ và hiển thị trạng thái bản dựng trong GitHub, nhưng chỉ có vậy. Không có bản xem trước, nhận xét hoặc bất kỳ nội dung "bình thường" nào mà chúng tôi quen dùng từ các sản phẩm như Heroku, Vercel hoặc Fly.
Có một cách "dễ dàng" để đăng nhận xét về Yêu cầu kéo GitHub từ Cloud Build bằng một yêu cầu HTTP đơn giản. Nhưng tại sao lại dễ dàng khi bạn có thể sử dụng API triển khai GitHub .
Với API này, bạn có thể tạo Môi trường, có các biến khác nhau cho mỗi môi trường và hiển thị trạng thái xây dựng & triển khai trực tiếp trên Yêu cầu kéo. Và sau khi quá trình triển khai hoàn tất trên nền tảng CD của bạn, bạn có thể thêm URL vào trạng thái triển khai. Đây là những gì chúng ta sẽ làm trong bài viết này.
Một lần nữa, có một cách khác để thực hiện việc này bằng cách sử dụng API Triển khai trực tiếp với các yêu cầu HTTP. Tuy nhiên, điều này đôi khi có thể phức tạp và bạn sẽ cần xác định Mã thông báo truy cập cá nhân để xác thực với GitHub. Thay vào đó, chúng tôi quyết định kết hợp một dịch vụ Node.js nhỏ sử dụng Ứng dụng GitHub để tạo mã thông báo ứng dụng và tương tác với API triển khai. Điều này cho phép kiểm soát tốt hơn một chút đối với quá trình triển khai.
Bài viết này được viết riêng cho Google Cloud Platform và GitHub. Giả sử hiểu biết cơ bản về Google Cloud Platform, Google Cloud Build và các quyền IAM.
Bạn nên thiết lập dự án Google Cloud Platform.
GitHub Deployer là một dịch vụ Node.js nhỏ được ủy quyền với Ứng dụng GitHub và tương tác với API Triển khai GitHub. Các lệnh được xác định trước và một số thông tin cần được tích hợp vào hình ảnh Docker, nếu không, cấu hình thời gian chạy trong Cloud Build sẽ trở nên quá phức tạp.
Hình ảnh Docker chưa sẵn sàng được xây dựng; bạn sẽ cần tự xây dựng nó và đẩy nó vào sổ đăng ký của mình. Nơi tốt nhất là Google Artifact Registry nơi cũng lưu trữ hình ảnh cho ứng dụng của bạn (Container Registry không được dùng nữa):
Nếu chưa hoàn thành, hãy tạo một kho lưu trữ Artifact Registry
Tạo Ứng dụng GitHub và cài đặt nó trên tổ chức của bạn
Quyền cần thiết: 'pull_requests', 'triển khai', 'siêu dữ liệu'
Sao chép ID ứng dụng (từ màn hình Cài đặt ứng dụng) và ID cài đặt ứng dụng (sau khi nhấp vào "Định cấu hình", bạn sẽ tìm thấy ID cài đặt trong URL. Không biết có thể tìm thấy ở đâu khác)
Tạo và tải xuống khóa riêng tư và chuyển đổi nó thành base64 ( base64 -i your.private-key.pem
)
Cloud Build chạy trên amd64
, vì vậy chúng tôi cần buildx
để xây dựng hình ảnh cho nền tảng x86:
docker buildx build --platform linux/amd64 . -t us-central1-docker.pkg.dev/[PROJECT]/docker/gh-deployer \
--build-arg GH_APP_ID=[GITHUB_APP_ID] \
--build-arg GH_APP_PRIVATE_KEY=[GITHUB_PRIVATE_KEY_BASE_64] \
--build-arg GH_APP_INSTALLATION_ID=[GITHUB_INSTALLATION_ID] \
--build-arg GH_OWNER=[GITHUB_ORG]
Đẩy hình ảnh vào sổ đăng ký của bạn:
docker push us-central1-docker.pkg.dev/[PROJECT]/docker/gh-deployer
docker run -it -e REPO_NAME=test -e REF=main -e ENVIRONMENT=test us-central1-docker.pkg.dev/[PROJECT]/docker/gh-deployer:latest create
REPO_NAME
: yêu cầu tên của kho lưu trữ (ví dụ: gh-deployer
)REF
: yêu cầu nhánh, thẻ hoặc SHA triển khai (ví dụ: main
)ENVIRONMENT
: yêu cầu môi trường để triển khai (ví dụ: preview
)TRANSIENT_ENVIRONMENT
: tùy chọn/false nếu được đặt thành true
, việc triển khai sẽ bị xóa sau một thời gian nhất địnhDESCRIPTION
: tùy chọn một mô tả của việc triển khaiCác lệnh sau có sẵn dưới dạng đối số đầu tiên:
create
- tạo một triển khai mớipending
- bản dựng đang chờ xử lýin_progress
- quá trình xây dựng đang được tiến hànhqueued
- bản dựng được xếp hàng đợisuccess
- việc triển khai đã thành côngerror
- đã xảy ra sự cốfailure
- việc triển khai thất bại
Với Cloud Build, các tùy chọn hiện có một chút hạn chế. Không có trạng thái pending
vì Cloud Build cần bắt đầu để tạo triển khai ban đầu. queued
cũng không có nhiều ý nghĩa, vì vậy trong thiết lập của riêng chúng tôi, chúng tôi đang sử dụng như sau:
gh-deployer/create
để tạo triển khai tạm thời cho một cam kếtpgh-deployer/ending
trực tiếp sau khi tạogh-deployer/in_progress
sau khi quá trình xây dựng hoàn tất và trước khi hình ảnh được triển khaigh-deployer/success
sau khi hình ảnh được triển khai
Một lần nữa, với Cloud Build, chúng tôi không biết nơi triển khai sẽ diễn ra, vì vậy, có hai cách để chuyển URL triển khai đến bước success
:
/workspace/deployer_environment_url
success
Chúng tôi sử dụng Cloud Run cho các triển khai của mình, vì vậy, đây là bước xây dựng để truy xuất URL triển khai cho một số Yêu cầu kéo nhất định:
- tên: gcr.io/google.com/cloudsdktool/cloud-sdk
env: - PR_NUMBER=$_PR_NUMBER script: >- gcloud run services list --project [project] --filter preview-$PR_NUMBER --format "value(status.address.url)" > /workspace/deployer_environment_url
Đây là một ví dụ hoàn chỉnh sử dụng tệp cấu hình cloudbuild.yaml
. Chúng tôi sử dụng Kaniko để xây dựng và Cloud Run làm mục tiêu triển khai.
Nếu bạn làm việc với Terraform, thì cũng có một tệp Terraform: preview.tf
Bằng cách sử dụng Deployments API, bạn có thể kích hoạt GitHub Actions trên deployment_status
. Điều này giúp dễ dàng chạy kiểm tra đảm bảo chất lượng, kiểm tra từ đầu đến cuối, v.v. trên mỗi bản dựng xem trước. Dưới đây là ví dụ về cách chạy Playwright trên mỗi bản xem trước bằng cách sử dụng environment_url
được chuyển vào trạng thái success
:
nhà viết kịch-qa:
if: ${{ github.event.deployment\_status.state == 'success' }} timeout-minutes: 60 runs-on: ubuntu\-latest steps: \- uses: actions/[\[email protected\]](/cdn-cgi/l/email-protection) \- uses: actions/setup\-[\[email protected\]](/cdn-cgi/l/email-protection) with: node-version: 20 cache: 'npm' \- run: npm ci \- name: Install Playwright Browsers run: npm exec playwright install \-\-with\-deps \-y \- name: Run Playwright tests run: pnpm exec playwright test env: BASE\_URL: ${{github.event.deployment\_status.environment\_url}} \- uses: actions/upload\-[\[email protected\]](/cdn-cgi/l/email-protection) if: always() with: name: playwright\-report path: playwright\-report/ retention-days: 30
gcr.io/google.com/cloudsdktool/cloud-sdk
tương đối lớn. Bạn có thể xây dựng hình ảnh gcloud nhỏ của riêng mình bằng các thành phần Cloud Run để tăng tốc độ xây dựng.
Nhận xét về Yêu cầu kéo GitHub lúc đầu rất dễ dàng, nhưng khi bạn có nhiều triển khai cho mỗi Yêu cầu kéo, các bản dựng không thành công, v.v. thì chúng không mang lại nhiều tính linh hoạt và khó bảo trì/cập nhật. API Triển khai GitHub cung cấp một cách tinh tế để tạo và quản lý các triển khai từ bất kỳ hệ thống CI/CD bên thứ ba nào. Với GitHub Deployer
, chúng tôi đã cố gắng hợp lý hóa sự tương tác với API triển khai và xử lý một số tác dụng phụ hoặc cạm bẫy không thể giải quyết chỉ bằng API HTTP.
Một lợi ích khác của việc sử dụng API triển khai GitHub là bạn có thể sử dụng trình kích hoạt deployment_status
cho các Tác vụ GitHub và nhận trực tiếp environment_url
với tải trọng sự kiện.
Bạn có thể tìm thấy hướng dẫn cài đặt/xây dựng chi tiết hơn một chút và tất cả mã trên kho lưu trữ GitHub
Nếu bạn có bất kỳ câu hỏi hoặc nhận xét nào , vui lòng liên hệ trên BlueSky / Twitter hoặc tham gia thảo luận trên GitHub .
Cũng được xuất bản ở đây.