1. Обзор
В этой лабораторной работе вы развернете .NET-приложение в Cloud Run с помощью Cloud Deploy. Вы создадите образ контейнера с помощью Cloud Build без использования Dockerfile. Вы настроите конвейер с тремя целевыми средами с помощью Cloud Deploy и выполните шаги по продвижению релиза по средам. Наконец, вы утвердите релиз для развертывания в производственной среде.

Что такое Cloud Build?
С помощью Cloud Build вы можете быстро создавать программное обеспечение на всех языках программирования.
Что такое Cloud Deploy?
Cloud Deploy — это полностью управляемый сервис непрерывной доставки. С помощью Cloud Deploy вы можете создавать конвейеры развертывания для GKE, Anthos и Cloud Run.
Что такое Cloud Run?
С помощью Cloud Run вы можете развертывать масштабируемые контейнерные приложения, написанные на любом языке (включая Go, Python, Java, Node.js, .NET и Ruby), на полностью управляемой платформе.
Что такое Скаффолд?
Skaffold — это инструмент командной строки, обеспечивающий непрерывную разработку приложений, работающих в Kubernetes. Cloud Deploy использует Skaffold для операций рендеринга и развертывания.
Что вы узнаете
В этой лабораторной работе вы научитесь выполнять следующие действия:
- Создание конвейера развертывания в облаке
- Создание образа контейнера для .NET-приложения с помощью Cloud Build без использования Dockerfile.
- Разверните приложение в облаке с помощью Cloud Deploy.
- Продвижение релизов Cloud Deploy
Предварительные требования
- Для выполнения этой лабораторной работы предполагается знакомство с Cloud Console и командной оболочкой.
2. Настройка и требования
Настройка облачного проекта
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы можете изменить её в любое время.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он останется неизменным на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить весь проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Настройка среды
Активируйте Cloud Shell, нажав на значок справа от строки поиска.

В командной оболочке Cloud Shell выполните следующую команду, чтобы установить переменные среды проекта:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1
Включить API:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com
Создайте репозиторий в реестре артефактов для хранения образов контейнеров приложений:
gcloud artifacts repositories create containers-repo \
--repository-format=docker \
--location=${REGION} \
--description="Containers repository"
3. Проверьте конфигурационные файлы.

Клонируйте исходный код приложения:
git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy
Проверьте конфигурацию конвейера 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
Просмотрите файл skaffold.yaml , в котором определены три среды, и вы увидите, что в качестве целевой службы используется Cloud Run.
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: {}
Просмотрите файлы конфигурации службы.
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
Ознакомьтесь с файлом cloudbuild.yaml , содержащим пошаговые инструкции по созданию образа контейнера и выпуску релиза 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. Создайте конвейер развертывания в облаке.
Замените значение _PROJECT_ID в файле clouddeploy.yaml:
sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml
Создание конвейера развертывания в облаке:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
Проверьте созданный конвейер в Cloud Deploy .
5. Создайте образ контейнера и выполните релиз.
Добавьте разрешения оператора развертывания облака к учетной записи службы 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
Создайте образ контейнера и выполните релиз в 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}
Проверьте созданный релиз в Cloud Deploy . Дождитесь завершения развертывания в среду разработки.
6. Обеспечить выпуск продукта в среды тестирования и производства.
Используя Cloud Console или Cloud Shell, перенесите релиз на следующую целевую среду (среду тестирования).
Для продвижения релиза с помощью Cloud Shell выполните команду gcloud.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Дождитесь завершения развертывания в тестовой среде. Перенесите релиз на следующую целевую среду (производственную).
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Откройте Cloud Deploy в Cloud Console и подтвердите выпуск для развертывания в производственной среде.

Просмотрите состояние конвейера Cloud Deploy и доступные метрики DORA («количество развертываний», «частота развертываний», «частота сбоев развертывания»).
Метрика | Описание |
Количество развертываний | Общее количество успешных и неудачных развертываний на целевом объекте в вашем конвейере доставки. |
Частота развертывания | Как часто конвейер доставки развертывает приложения в конечный пункт назначения. Одна из четырех ключевых метрик, определенных программой DevOps Research and Assessment (DORA). |
Показатель отказов при развертывании | Процент неудачных внедрений по отношению к конечной цели в вашем конвейере доставки. |
Просмотрите развернутые приложения в Cloud Run :

7. Поздравляем!
Поздравляем, вы завершили практическое занятие!
Что мы рассмотрели:
- Как создать конвейер развертывания в облаке
- Как создать образ контейнера для .NET-приложения с помощью Cloud Build
- Как развернуть приложение в облаке с помощью Cloud Deploy
- Как продвигать релиз Cloud Deploy
Уборка
Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий эти ресурсы, либо сохраните проект и удалите отдельные ресурсы.
Удаление проекта
Самый простой способ избежать выставления счетов — удалить проект, созданный для этого урока.