paint-brush
Triển khai GitHub (Bản xem trước) với Google Cloud Platform: Hướng dẫn cần thiếttừ tác giả@patrickheneise
470 lượt đọc
470 lượt đọc

Triển khai GitHub (Bản xem trước) với Google Cloud Platform: Hướng dẫn cần thiết

từ tác giả Patrick Heneise6m2023/06/02
Read on Terminal Reader

dài quá đọc không nổi

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. Nó cho phép bạn 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. Hình ảnh Docker chưa sẵn sàng được xây dựng; bạn sẽ cần phải tự xây dựng nó và đẩy nó vào sổ đăng ký của mình.
featured image - Triển khai GitHub (Bản xem trước) với Google Cloud Platform: Hướng dẫn cần thiết
Patrick Heneise HackerNoon profile picture
0-item

Động lực và giới thiệu

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.

ảnh chụp màn hình hiển thị trạng thái triển khai github đang diễn ra

Trạng thái triển khai GitHub

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.

từ chối trách nhiệm

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.

Trình triển khai GitHub (Node.js & Docker)

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):


  1. Nếu chưa hoàn thành, hãy tạo một kho lưu trữ Artifact Registry


  2. Tạo Ứng dụng GitHub và cài đặt nó trên tổ chức của bạn

  3. 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)


  4. 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 )

ảnh chụp màn hình hiển thị Ứng dụng GitHub với nút 'Định cấu hình'

Xây dựng hình ảnh Docker

Nguồn


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

Chạy hình ảnh Docker cục bộ

docker run -it -e REPO_NAME=test -e REF=main -e ENVIRONMENT=test us-central1-docker.pkg.dev/[PROJECT]/docker/gh-deployer:latest create


Các biến môi trường bắt buộc:

  • 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 định
  • DESCRIPTION : tùy chọn một mô tả của việc triển khai

Cá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ới
  • pending - bản dựng đang chờ xử lý
  • in_progress - quá trình xây dựng đang được tiến hành
  • queued - bản dựng được xếp hàng đợi
  • success - việc triển khai đã thành công
  • error - đã 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:


  1. gh-deployer/create để tạo triển khai tạm thời cho một cam kết
  2. pgh-deployer/ending trực tiếp sau khi tạo
  3. Chạy bản dựng kaniko để xây dựng hình ảnh Docker để triển khai
  4. gh-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 khai
  5. gh-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 :


  1. Trong bước xây dựng, hãy ghi URL vào /workspace/deployer_environment_url
  2. Truyền đối số thứ hai cho hình ảnh Docker sau khi 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

Cấu hình xây dựng đám mây/Terraform

đám mâybuild.yaml

đám mâybuild.yaml

Đâ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


Hành động GitHub

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

tối ưu hóa

Phần kết luận

ảnh chụp màn hình hiển thị trạng thái triển khai github đã hoàn tất

Trạng thái triển khai GitHub Đã xong


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.