Wdrażanie aplikacji Cloud Run za pomocą Cloud Deploy

1. Omówienie

W tym module wdrożysz w Cloud Run aplikację .Net za pomocą Cloud Deploy. Utworzysz obraz kontenera za pomocą Cloud Build bez użycia Dockerfile. W Cloud Deploy skonfigurujesz potok z 3 środowiskami docelowymi i wykonasz czynności pozwalające awansować wersję przez środowiska. Na koniec zatwierdzisz wersję do wdrożenia w środowisku produkcyjnym.

916a54f51af5ee54.png

Co to jest Cloud Build?

Cloud Build pozwala szybko tworzyć oprogramowanie we wszystkich językach programowania.

Co to jest Cloud Deploy?

Cloud Deploy to w pełni zarządzana usługa ciągłego dostarczania. Za pomocą Cloud Deploy możesz tworzyć potoki wdrożenia dla GKE, Anthos i Cloud Run.

Co to jest Cloud Run?

Cloud Run pozwala wdrażać skalowalne skonteneryzowane aplikacje napisane w dowolnym języku (w tym Go, Python, Java, Node.js, .NET i Ruby) na platformie w pełni zarządzanej.

Co to jest Skaffold?

Skaffold to narzędzie wiersza poleceń, które umożliwia ciągłe programowanie natywnych aplikacji Kubernetes. Cloud Deploy wykorzystuje Skaffold do operacji renderowania i wdrażania.

Czego się nauczysz

Z tego modułu nauczysz się:

  • Tworzenie potoku Cloud Deploy
  • Utwórz obraz kontenera dla aplikacji .Net za pomocą Cloud Build bez użycia Dockerfile
  • Wdrażanie aplikacji w Cloud Run za pomocą Cloud Deploy
  • Promuj wersje Cloud Deploy

Wymagania wstępne

  • W tym module zakładamy, że znasz środowisko Cloud Console i środowiska powłoki.

2. Konfiguracja i wymagania

Konfigurowanie projektu Cloud

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zmienić.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po jego ustawieniu nie można go zmienić). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń z programowania konieczne jest odwołanie się do identyfikatora projektu (zwykle nazywa się on PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Potem nie będzie można go zmienić. Pozostanie ono przez czas trwania projektu.
  • Dostępna jest trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Konfiguracja środowiska

Aktywuj Cloud Shell, klikając ikonę po prawej stronie paska wyszukiwania.

eb0157a992f16fa3.png

Aby ustawić zmienne środowiskowe projektu, uruchom w Cloud Shell to polecenie:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1

Włącz interfejsy API:

gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  clouddeploy.googleapis.com \
  artifactregistry.googleapis.com

Utwórz repozytorium Artifact Registry do przechowywania obrazów kontenerów aplikacji:

gcloud artifacts repositories create containers-repo \
  --repository-format=docker \
  --location=${REGION} \
  --description="Containers repository"

3. Przejrzyj pliki konfiguracji

29c2533441779de0.png

Klonuj kod źródłowy aplikacji:

git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy

Sprawdź konfigurację potoku Cloud Deploy:

clouddeploy.yaml

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
 name: cloud-run-pipeline
description: application deployment pipeline
serialPipeline:
 stages:
 - targetId: dev-env
   profiles: [dev]
 - targetId: qa-env
   profiles: [qa]
 - targetId: prod-env
   profiles: [prod]
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: dev-env
description: Cloud Run development service
run:
 location: projects/_PROJECT_ID/locations/us-west1
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: qa-env
description: Cloud Run QA service
run:
 location: projects/_PROJECT_ID/locations/us-central1
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: prod-env
description: Cloud Run PROD service
run:
 location: projects/_PROJECT_ID/locations/us-south1

Sprawdź plik skaffold.yaml, który definiuje 3 środowiska i używa Cloud Run jako usługi docelowej.

skaffold.yaml

apiVersion: skaffold/v3alpha1
kind: Config
metadata: 
  name: cloud-run-app
profiles:
- name: dev
  manifests:
    rawYaml:
    - deploy-dev.yaml
- name: qa
  manifests:
    rawYaml:
    - deploy-qa.yaml
- name: prod
  manifests:
    rawYaml:
    - deploy-prod.yaml
deploy:
  cloudrun: {}

Przejrzyj pliki konfiguracji usługi.

deploy-dev.yaml

kind: Service
metadata:
  name: app-dev
spec:
  template:
    spec:
      containers:
      - image: app
        resources:
          limits:
            cpu: 1000m
            memory: 128Mi

deploy-qa.yaml

kind: Service
metadata:
  name: app-dev
spec:
  template:
    spec:
      containers:
      - image: app

deploy-prod.yaml

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: app-prod
spec:
  template:
    spec:
      containers:
      - image: app

Sprawdź plik cloudbuild.yaml z instrukcjami, aby utworzyć obraz kontenera i utworzyć wersję Cloud Deploy:

cloudbuild.yaml

steps:
- name: 'gcr.io/k8s-skaffold/pack'
  entrypoint: 'pack'
  args: ['build',
         '--builder=gcr.io/buildpacks/builder',
         '--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
  id: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
  args: 
      [
        "deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
        "--delivery-pipeline", "cloud-run-pipeline",
        "--region", "${_REGION}",
        "--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
      ]
  entrypoint: gcloud

4. Tworzenie potoku Cloud Deploy

Zastąp wartość _PROJECT_ID w pliku clouddeploy.yaml:

sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml

Utwórz potok Cloud Deploy:

gcloud deploy apply \
  --file=clouddeploy.yaml \
  --region=${REGION} \
  --project=${PROJECT_ID}

Sprawdź utworzony potok w Cloud Deploy.

5. Skompiluj obraz kontenera i utwórz wersję

Dodaj uprawnienia operatora Cloud Deploy do konta usługi Cloud Build:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/clouddeploy.operator

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/iam.serviceAccountUser

Utwórz obraz kontenera i wersję Cloud Deploy:

export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')

gcloud builds submit \
  --config cloudbuild-plus.yaml \
  --substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}

Sprawdź utworzoną wersję w Cloud Deploy. Poczekaj na zakończenie wdrożenia w środowisku programistycznym.

6. Awansuj wersję do środowisk kontroli jakości i PROD

Za pomocą Cloud Console lub Cloud Shell awansuj wersję do następnego środowiska docelowego(qa-env).

Awansuj wersję za pomocą Cloud Shell i uruchom polecenie gcloud, aby awansować wersję.

gcloud beta deploy releases promote \
    --release="release-${RELEASE_TIMESTAMP}" \
    --delivery-pipeline=cloud-run-pipeline \
    --region=${REGION} \
    --quiet

Poczekaj na zakończenie wdrożenia w środowisku kontroli jakości. Awansuj wersję do następnego środowiska docelowego(prod-env).

gcloud beta deploy releases promote \
    --release="release-${RELEASE_TIMESTAMP}" \
    --delivery-pipeline=cloud-run-pipeline \
    --region=${REGION} \
    --quiet

Otwórz Cloud Deploy w konsoli Cloud i zatwierdź wersję na potrzeby wdrożenia produkcyjnego.

4c838b60770e9691.png

Sprawdź stan potoku Cloud Deploy i dostępne wskaźniki DORA („liczba wdrożeń”, „częstotliwość wdrażania” czy „odsetek błędów wdrożenia”).

Dane

Opis

Liczba wdrożeń

Łączna liczba udanych i nieudanych wdrożeń w ostatecznym miejscu docelowym w potoku dostarczania.

Częstotliwość wdrażania

Częstotliwość, z jaką potok dostarczania wdraża się w ostatecznym miejscu docelowym w potoku dostarczania.Jeden z 4 kluczowych wskaźników zdefiniowanych w programie DevOps Research and Assessment (DORA).

Odsetek nieudanych wdrożeń

Odsetek nieudanych wdrożeń w ostatecznym miejscu docelowym w potoku dostarczania.

Przejrzyj wdrożone aplikacje w Cloud Run:

d6372b5350f10875.png

7. Gratulacje!

Gratulacje. Udało Ci się ukończyć ćwiczenia z programowania.

Omówione zagadnienia:

  • Jak utworzyć potok Cloud Deploy
  • Jak utworzyć obraz kontenera dla aplikacji .Net za pomocą Cloud Build
  • Jak wdrożyć aplikację w Cloud Run za pomocą Cloud Deploy
  • Jak awansować wersję Cloud Deploy

Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby.

Usuwam projekt

Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby samouczka.

8. Co dalej?