1. Цели
В этом руководстве вы создадите три кластера GKE с именами preview, canary и prod. Затем создадите целевой объект Cloud Deploy, соответствующий каждому кластеру, и конвейер Cloud Deploy, который определит последовательность шагов для выполнения развертывания в этих целевых объектах.
Процесс развертывания будет запущен конвейером CloudBuild, который создаст релиз Cloud Deploy и выполнит развертывание в кластере предварительной версии. После того, как вы убедитесь в успешности и корректной работе развертывания в предварительной версии, вам необходимо вручную перевести релиз в кластер канареечного развертывания. Для перевода релиза в производственный кластер потребуется подтверждение; вам нужно будет подтвердить производственный конвейер в пользовательском интерфейсе Cloud Deploy и, наконец, перевести его.
Цели данного руководства можно разделить на следующие этапы:
- Подготовьте рабочее место
- Определите целевые объекты развертывания в облаке.
- Определение конвейера развертывания в облаке
- Создать релиз
- Содействовать развертыванию
- Одобрить выпуск продукта в производство
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google, и вы можете изменить её в любое время.
- Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID), поэтому, если он вам не нравится, сгенерируйте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он "замораживается" после создания проекта. - Существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud, чтобы использовать ресурсы/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, следуйте инструкциям по «очистке», приведенным в конце практического задания. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
2. Настройка платформы
Подготовка рабочего места
Здесь мы настроим среду, необходимую для выполнения этого руководства. После завершения этого шага у нас будет создан кластер GKE, в котором мы сможем запускать развертывания.
- Настройте параметры конфигурации gcloud по умолчанию.
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- Репозиторий клонов
git clone https://github.com/gushob21/software-delivery-workshop
cd software-delivery-workshop/labs/cloud-deploy/
cloudshell workspace .
rm -rf deploy && mkdir deploy
- Установите переменные среды
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
- Включить API
gcloud services enable \
cloudresourcemanager.googleapis.com \
`container.googleapis.com \`
`cloudbuild.googleapis.com \`
`containerregistry.googleapis.com \`
`secretmanager.googleapis.com \`
`clouddeploy.googleapis.com`
- Создание кластеров GKE
`gcloud container clusters create preview \`
--zone=us-central1-a --async
`gcloud container clusters create canary \`
--zone=us-central1-b --async
`gcloud container clusters create prod \`
--zone=us-central1-c
Определение целей развертывания в облаке
- Создайте в каталоге развертывания файл с именем preview.yaml и выполните следующую команду в Cloudshell:
cat <<EOF >deploy/preview.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: preview
annotations: {}
labels: {}
description: Target for preview environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-a/clusters/preview
EOF
As you noticed, the "kind" tag is "Target". It allows us to add some metadata to the target, a description and finally the GKE cluster where the deployment is supposed to happen for this target.
- Создайте файл с именем canary.yaml в каталоге deploy и выполните следующую команду в Cloudshell:
cat <<EOF >deploy/canary.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: canary
annotations: {}
labels: {}
description: Target for canary environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-b/clusters/canary
EOF
- Создайте файл с именем prod.yaml в каталоге развертывания и выполните следующую команду в Cloudshell:
cat <<EOF >deploy/prod.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: prod
annotations: {}
labels: {}
description: Target for prod environment
requireApproval: true
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-c/clusters/prod
EOF
Обратите внимание на тег requireApproval, который установлен в значение true. Это не позволит перевести релиз в производственную среду, пока не будет получено одобрение. Для утверждения релиза требуется роль roles/clouddeploy.approver.
- Создайте целевые объекты развертывания.
`gcloud config set deploy/region us-central1`
gcloud beta deploy apply --file deploy/preview.yaml
gcloud beta deploy apply --file deploy/canary.yaml
gcloud beta deploy apply --file deploy/prod.yaml
3. Создание приложения
В процессе создания нового приложения обычно настраивается конвейер CICD для выполнения автоматической сборки, интеграционного тестирования и развертывания. Следующие шаги считаются частью процесса настройки нового приложения. Для каждого нового приложения будет настроен конвейер развертывания.
Определение конвейера развертывания в облаке
- Создайте в каталоге развертывания файл с именем pipeline.yaml и выполните следующую команду в Cloudshell:
cat <<EOF >>deploy/pipeline.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: DeliveryPipeline
metadata:
name: sample-app
labels:
`app: sample-app`
description: delivery pipeline
serialPipeline:
stages:
- targetId: preview
`profiles:`
`- preview`
- targetId: canary
`profiles:`
`- canary`
- targetId: prod
`profiles:`
`- prod`
EOF
As you noticed, the "kind" tag is "DeliveryPipeline". It lets you define the metadata for the pipeline, a description and an order of deployment into various targets via serialPipeline tag.
В теге serialPipeline содержится тег stages, представляющий собой список всех целевых объектов, для которых настроен данный конвейер доставки.
targetId определяет конкретный целевой объект, используемый на данном этапе конвейера доставки. Значением является свойство metadata.name из определения целевого объекта.
profiles — это список из нуля или более имен профилей Skaffold из файла skaffold.yaml. Cloud Deploy использует профиль с командой skaffold render при создании релиза.
- Применить конвейер
gcloud beta deploy apply --file deploy/pipeline.yaml
4. Этап разработки
В процессе разработки приложений автоматизированные цепочки инструментов CICD будут создавать и сохранять ресурсы. Следующие команды выполняются для сборки приложения с использованием Skaffold и сохранения ресурсов для развертывания с помощью Cloud Deploy. Этот шаг будет выполняться вашим процессом CICD для каждой сборки приложения.
- Создайте и сохраните приложение с помощью Skaffold.
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5. Этап выпуска
В конце процесса CICD, как правило, когда код помечен для производственной среды, вы запускаете процесс выпуска, вызывая команду cloud deploy release . Позже, после проверки и утверждения развертывания, вы перемещаете релиз по различным целевым средам, продвигая и утверждая действие с помощью автоматизированных процессов или ручных согласований.
Создание релиза
В этом руководстве мы ранее создали файлы Cloud Deploy, чтобы понять, как работает Cloud Deploy. Для демонстрации мы создали такие же файлы Cloud Deploy и загрузили их в репозиторий GitHub вместе с примером приложения на Go, и будем использовать Cloud Deploy для выпуска этого приложения.
export REL_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud beta deploy releases create \
sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--description="Release demo" \
--build-artifacts=artifacts.json \
--annotations="release-id=rel-${REL_TIMESTAMP}"
Ознакомьтесь с релизом
При создании релиза Cloud Deploy он автоматически развертывается в первой целевой системе, которая находится в режиме предварительного просмотра.
- Перейдите в раздел <Развертывание в облаке> в консоли Google Cloud.
- Нажмите на "пример приложения"
На этом экране вы увидите графическое представление вашего конвейера обработки данных.
- Подтвердите наличие зеленой рамки в левой части окна предварительного просмотра, что означает, что релиз развернут в данной среде.
- При желании вы можете ознакомиться с дополнительными сведениями о релизе, щелкнув по названию релиза в разделе «Подробности релиза» в нижней части экрана.
- Убедитесь, что релиз успешно развернут, выполнив следующую команду в cloushell.
gcloud container clusters get-credentials preview --zone us-central1-a && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- Нажмите на значок предварительного просмотра веб-страницы в правом верхнем углу экрана.
- Выберите «Предварительный просмотр» на порту 8080.
Это переведет вас на новую страницу, где отобразится сообщение "Hello World!".
- Для завершения переадресации портов используйте
ctrl+cв терминале.
Продвижение релиза
Теперь, когда ваш релиз развернут на первом целевом сервере (preview) в конвейере, вы можете перевести его на следующий целевой сервер (canary). Выполните следующую команду, чтобы начать процесс.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
Ознакомьтесь с рекламной кампанией релиза.
- Перейдите к конвейеру sample-app в консоли Google Cloud.
- Подтвердите наличие зеленой рамки в левой части окна Canary, что означает, что релиз развернут в данной среде.
- Убедитесь в корректности развертывания приложения, создав к нему туннель.
gcloud container clusters get-credentials canary --zone us-central1-b && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- Нажмите на значок предварительного просмотра веб-страницы в правом верхнем углу экрана.
- Выберите «Предварительный просмотр» на порту 8080.
Это переведет вас на новую страницу, где отобразится сообщение "Hello World!".
- Для завершения переадресации портов используйте
ctrl+cв терминале.
Утверждение выпуска продукта в производство
Помните, когда мы создавали целевой объект для продакшена через prod.yaml, мы указывали тег requireApproval со значением true. Это принудительно устанавливает требование одобрения для продвижения в продакшен.
- Переведите тестовую версию в рабочую среду с помощью следующей команды.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- Перейдите к конвейеру sample-app в консоли Google Cloud.
- Обратите внимание на желтый индикатор с пометкой «1 ожидающий».
Это сообщение указывает на то, что в очередь на развертывание в рабочую среду поставлен релиз, требующий проверки и утверждения.
- Нажмите на кнопку «Проверить», расположенную чуть ниже желтого уведомления.
- На следующем экране снова нажмите «Проверить», чтобы перейти к экрану утверждения для производства.
- При желании вы можете просмотреть изменения в файле Manifest Diff. В данном случае это совершенно новый файл.
- Нажмите кнопку «Одобрить».
- Вернитесь на страницу конвейера тестирования демонстрационного приложения , где вы увидите, что процесс выпуска в продакшн находится в процессе.
Ознакомьтесь с релизом.
Как и в других средах, вы можете проверить завершение развертывания, выполнив описанные ниже шаги.
- Выполните следующую команду в Cloudshell, чтобы создать переадресацию портов.
gcloud container clusters get-credentials prod --zone us-central1-c && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- Нажмите на значок предварительного просмотра веб-страницы в правом верхнем углу экрана.
- Выберите «Предварительный просмотр» на порту 8080.
Это переведет вас на новую страницу, где отобразится сообщение "Hello World!".
- Для завершения переадресации портов используйте
ctrl+cв терминале.