1. Обзор
В ходе этой лабораторной работы вы развернете приложение .Net в Cloud Run с помощью Cloud Deploy. Вы создадите образ контейнера с помощью Cloud Build без использования Dockerfile. Вы настроите конвейер с тремя целевыми средами с помощью Cloud Deploy и выполните шаги по продвижению выпуска через среды. Наконец, вы утвердите выпуск для развертывания в производственной среде.
Что такое облачная сборка?
С помощью Cloud Build вы можете быстро создавать программное обеспечение на всех языках программирования.
Что такое облачное развертывание?
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 Run с помощью Cloud Deploy
- Продвигайте выпуски Cloud Deploy
Предварительные условия
- Эта лабораторная работа предполагает знакомство с облачной консолью и средами оболочки.
2. Настройка и требования
Настройка облачного проекта
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы можете обновить его в любое время.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Кроме того, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага, и он останется в силе на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить весь проект. Новые пользователи 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 в качестве целевой службы.
скаффолд.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: {}
Просмотрите файлы конфигурации службы.
развертывание-dev.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
resources:
limits:
cpu: 1000m
memory: 128Mi
развертывание-qa.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
развертывание-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 Deploy в учетную запись службы 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. Продвигайте выпуск в средах QA и PROD.
С помощью Cloud Console или Cloud Shell перенесите выпуск на следующую цель (qa-env).
Продвигайте выпуск с помощью Cloud Shell. Для продвижения выпуска выполните команду gcloud.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Подождите, пока не завершится развертывание в среде контроля качества. Продвигать выпуск до следующей цели (prod-env).
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 (DORA). |
Частота неудачных развертываний | Процент неудачных развертываний до конечной цели в вашем конвейере доставки. |
Просмотрите развернутые приложения в Cloud Run :
7. Поздравляем!
Поздравляем, вы завершили работу над кодом!
Что мы рассмотрели:
- Как создать конвейер Cloud Deploy
- Как создать образ контейнера для приложения .Net с помощью Cloud Build
- Как развернуть приложение в Cloud Run с помощью Cloud Deploy
- Как продвигать выпуск Cloud Deploy
Очистить
Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий ресурсы, либо сохраните проект и удалите отдельные ресурсы.
Удаление проекта
Самый простой способ избавиться от выставления счетов — удалить проект, созданный вами для этого руководства.