1. Przegląd
W tym module wdrożysz aplikację .NET w Cloud Run za pomocą Cloud Deploy. Utworzysz obraz kontenera za pomocą Cloud Build bez użycia Dockerfile. Skonfigurujesz potok z 3 środowiskami docelowymi za pomocą Cloud Deploy i przejdziesz przez kolejne etapy awansowania wersji w środowiskach. Na koniec zatwierdzisz wersję, która ma zostać wdrożona w środowisku produkcyjnym.

Co to jest Cloud Build?
Dzięki Cloud Build możesz szybko tworzyć oprogramowanie we wszystkich językach programowania.
Co to jest Cloud Deploy?
Cloud Deploy to w pełni zarządzana usługa trybu ciągłego dostarczania. Za pomocą Cloud Deploy możesz tworzyć potoki wdrażania dla GKE, Anthos i Cloud Run.
Co to jest Cloud Run?
Cloud Run umożliwia wdrażanie skalowalnych aplikacji skonteneryzowanych napisanych w dowolnym języku (w tym Go, Python, Java, Node.js, .NET i Ruby) na w pełni zarządzanej platformie.
Czym jest Skaffold?
Skaffold to narzędzie wiersza poleceń, które umożliwia ciągłe programowanie aplikacji natywnych dla Kubernetes. Cloud Deploy używa Skaffold do operacji renderowania i wdrażania.
Czego się nauczysz
W tym module nauczysz się:
- Tworzenie potoku Cloud Deploy
- Tworzenie obrazu kontenera dla aplikacji .NET za pomocą Cloud Build bez użycia Dockerfile
- Wdrażanie aplikacji w Cloud Run za pomocą Cloud Deploy
- Promowanie wersji Cloud Deploy
Wymagania wstępne
- Zakładamy, że użytkownik zna konsolę Cloud i środowiska powłoki.
2. Konfiguracja i wymagania
Konfigurowanie projektu w Google Cloud
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.



- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle jest on oznaczony jako
PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i będzie obowiązywać przez cały czas trwania projektu. - Warto wiedzieć, że istnieje też trzecia wartość, czyli numer projektu, z której korzystają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Konfiguracja środowiska
Aktywuj Cloud Shell, klikając ikonę po prawej stronie paska wyszukiwania.

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. Sprawdzanie plików konfiguracji

Sklonuj 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
Przejrzyj 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: {}
Sprawdź 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 tworzenia obrazu kontenera i wersji 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
Tworzenie potoku Cloud Deploy:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
Sprawdź utworzony potok w Cloud Deploy.
5. Tworzenie obrazu kontenera i wersji
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 wdrażania w środowisku deweloperskim.
6. Promowanie wersji w środowiskach kontroli jakości i produkcyjnym
Za pomocą Cloud Console lub Cloud Shell promuj wersję do następnego środowiska docelowego(qa-env).
Promuj wersję za pomocą Cloud Shell, uruchamiając polecenie gcloud.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Poczekaj na zakończenie wdrażania w środowisku QA. Promowanie wersji do następnego środowiska docelowego(środowiska produkcyjnego).
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ę do wdrożenia produkcyjnego.

Sprawdź stan potoku Cloud Deploy i dostępne wskaźniki DORA („liczba wdrożeń”, „częstotliwość wdrażania”, „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 przeprowadza wdrożenia w swoim ostatecznym miejscu docelowym.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. |
Sprawdź wdrożone aplikacje w Cloud Run:

7. Gratulacje!
Gratulacje! Codelab został ukończony.
Omówione zagadnienia:
- Jak utworzyć potok Cloud Deploy
- Jak utworzyć obraz kontenera dla aplikacji .NET za pomocą Cloud Build
- Jak wdrażać aplikacje w Cloud Run za pomocą Cloud Deploy
- Jak promować 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.
Usuwanie projektu
Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego w tym samouczku.