App Engine: источник для Prod

  1. Создание трубопровода
  2. Этап развертывания
  3. Редактировать этап балансировки нагрузки
  4. Этап ручного суждения
  5. Этап ожидания

Этот кодовый ярлык содержит обзор интеграции Spinnaker с App Engine. Вы создадите и запустите простой конвейер развертывания App Engine, выполнив следующие шаги:

Вы создадите и запустите простой конвейер развертывания App Engine, выполнив следующие шаги:

  • Убедитесь, что у вас есть идентификатор проекта Google Cloud Platform. Это значение будет упоминаться как GCP-PROJECT-ID ниже.
  • Убедитесь, что у вас установлен gcloud и что он аутентифицирован в вашем проекте GCP. В большинстве случаев для этого нужно только запустить gcloud auth login < [электронная почта защищена] > и следуйте инструкциям в подсказке. Если у вас нет gcloud, установленного локально, вы всегда можете запустить gcloud из Cloud Shell, которую вы можете открыть из консоли GCP.
  • Убедитесь, что для вашего проекта GCP включены API-интерфейсы App Engine Admin и Compute Engine:

Службы gcloud включают appengine.googleapis.com Службы gcloud включают compute.googleapis.com

  • Если вы впервые используете приложение App Engine в своем проекте, выполните следующую команду, чтобы создать приложение App Engine. Вы не можете изменить регион, поэтому выбирайте мудро: gcloud app create --region <например, us-central>.

Мы собираемся запустить наши конвейеры Spinnaker, используя веб-зацепки Github. Для этого нам нужно будет выставить шлюз Spinnaker API для внешнего трафика. Если вы собираетесь использовать эту установку вне этой кодовой метки, вы должны следовать направляющие для крепления спинакера.

Создайте новое правило брандмауэра для вашего проекта GCP. Github отправляет webhooks с IP-адресов в CIDR диапазоны запрашивается ниже.

gcloud compute firewall-rules создает allow-github-webhook \ --allow = "tcp: 8084" \ --source-range = $ (curl -s https://api.github.com/meta | python -c "import sys, json; print ','. join (json.load (sys.stdin) ['hooks']) ") \ --target-tags =" allow-github-webhook "

Предоставление новой виртуальной машины. Мы установим Spinnaker на эту машину:

экземпляры вычислений gcloud создают $ USER -spinnaker \ --scopes = "https://www.googleapis.com/auth/cloud-platform" \ --machine-type = "n1-highmem-4" \ --image-family = "ubuntu-1404-lts" \ --image-project = "ubuntu-os-cloud" \ --zone = "us-central1-f" \ --tags = "allow-github-webhook"

Затем выполните следующую команду для SSH на компьютере, который мы только что подготовили. Мы также передадим флаги на прямые порты 9000 и 8084 - серверы пользовательского интерфейса и API Spinnaker прослушивают эти порты.

gcloud compute ssh $ USER -spinnaker --ssh-flag = "-L 9000: localhost: 9000" --ssh-flag = "-L 8084: localhost: 8084"

Скачайте и установите Halyard на эту машину. Halyard - это инструмент для настройки, установки и обновления Spinnaker.

curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/debian/InstallHalyard.sh sudo bash InstallHalyard.sh

После установки Halyard выполните следующие команды, чтобы настроить Spinnaker для развертывания в App Engine:

редактирование версии конфигурации hal - версия $ (последняя версия -q): настройка поставщика конфигурации hal включить учетную запись поставщика конфигурации hal добавить учетную запись my-appengine --project $ GCP -PROJECT-ID хранилище конфигурации hal редактировать gcs --project $ GCP -PROJECT-ID редактирование хранилища настроек hal --type gcs

Затем выполните следующую команду, чтобы разрешить шлюзу Spinnaker API принимать внешние запросы:

mkdir -p ~ / .hal / default / service-settings echo "host: 0.0.0.0" | тройник ~ / .hal / default / service-settings / gate.yml

Запустите sudo hal deploy apply, чтобы установить и запустить Spinnaker.

Процесс установки займет несколько минут. Пока вы ожидаете запуска Spinnaker, вы можете настроить ваш Github webhook:

  • Определите внешний IP-адрес вашего экземпляра Spinnaker:
    Примеры вычислений gcloud описывают $ USER-spinnaker | grep natIP
  • Создайте этот репозиторий, содержащий пример приложения App Engine: https://github.com/danielpeach/redblue ,
  • Внутри вашего форка нажмите «Настройки», затем «Веб-хуки», затем «Добавить веб-хук».
  • В поле «URL-адрес полезной нагрузки» введите http: // {externalIP}: 8084 / webhooks / git / github.
  • В разделе «Тип содержимого» выберите приложение / json.

На этом этапе Spinnaker должен быть запущен. Направьте ваш браузер на локальный: 9000 для просмотра пользовательского интерфейса Spinnaker.

Сначала мы создадим приложение Spinnaker.

  • В правом верхнем углу пользовательского интерфейса нажмите «Действия», затем «Создать приложение».
  • В поле «Имя» введите кодовую метку.
  • В поле «Email владельца» введите свой адрес электронной почты.
  • В разделе «Учетные записи» выберите my-appengine-account. Это учетная запись, которую мы настроили с помощью Halyard - она ​​связана с набором учетных данных, которые позволяют Spinnaker развертываться в App Engine в вашем проекте. Вы можете настроить Spinnaker с несколькими учетными записями для развертывания в нескольких проектах GCP.
  • Нажмите «Создать».

Нажмите «Создать»

  • Как только ваше приложение будет создано, вы попадете на вкладку «Кластеры». Нажмите «Создать группу серверов». Группа серверов Spinnaker - это версия App Engine. При создании групп серверов Spinnaker применяет свои собственные соглашения об именах: все версии, созданные из приложения «codelab», будут иметь префикс «codelab-».
  • В поле «Стек» введите значение по умолчанию. Опустить «Деталь». В приложении Spinnaker кластер представляет собой логическую группу групп серверов с одинаковыми стеками и деталями. Может быть полезно использовать имя службы App Engine в качестве значения для стека - в нашем случае наша версия будет развернута в службе с именем «default».
  • В разделе «URL-адрес хранилища Git» введите https://github.com/ enjYourGitHubUsername broadcast/redblue.git; т. е. URL-адрес хранилища, который вы разветвили ранее.
  • Под «Филиал» введите мастер.
  • Под «Config Filepaths» введите app.yaml.
  • Нажмите «Создать».

Нажмите «Создать»

Ваша группа серверов займет некоторое время для развертывания. Как только он появится в пользовательском интерфейсе, щелкните раздел «V000». Вы должны увидеть панель справа с подробной информацией о группе серверов. Чтобы просмотреть только что развернутое приложение, нажмите одну из ссылок в разделе «DNS». Это должна быть страница «Hello World» с ярко-красным фоном.

Нажмите на вкладку с надписью «Балансировщики нагрузки». Вы увидите панель с надписью «по умолчанию». Это ваша служба App Engine по умолчанию. При развертывании версий в разных службах App Engine эти службы также будут отображаться на этой вкладке.

Далее мы построим конвейер развертывания. Он будет включать следующие этапы:

  • Запустить на веб-крюке GitHub - это будет вызвано нажатием на раздвоенный репозиторий.
  • Развертывание - мы развернем обновленное приложение в App Engine.
  • Отредактируйте балансировщик нагрузки - мы разделим трафик между двумя группами серверов.
  • Оценка вручную - мы проверим, готовы ли мы переместить весь трафик в новую группу серверов. Этот этап может быть заменой интеграционных тестов или анализа канареек.
  • Включить - мы отправим 100% трафика на новую группу серверов.
  • Подождите - мы подождем две минуты, чтобы убедиться, что все в порядке, прежде чем уничтожать старую группу серверов. В реальном конвейере развертывания вероятно, что это время ожидания будет больше - возможно, час или больше.
  • Уничтожить - мы уничтожим старую группу серверов.

Создание трубопровода

  • Нажмите на вкладку «Конвейеры» рядом с вкладками «Кластеры» и «Задачи».
  • Нажмите «Новый».
  • Под «Имя конвейера» введите «Развертывание и продвижение».
  • Нажмите «Создать».

Триггер

В разделе «Автоматизированные триггеры»:

  • Под «Type» выберите Git.
  • Под «Тип репо» выберите github.
  • В разделе «Организация или Пользователь» введите свое имя пользователя GitHub.
  • В разделе «Проект» введите красный синий.
  • В разделе «Ветка» введите выпуск.

В разделе «Ветка» введите выпуск

Этап развертывания

  • Нажмите «Добавить этап».
  • В разделе «Тип» выберите «Развернуть».

В разделе «Тип» выберите «Развернуть»

  • Нажмите «Добавить группу серверов».
  • В поле «Стек» введите значение по умолчанию.
  • В разделе «URL-адрес хранилища Git» введите https://github.com/ enjYourGithubUsername‹/redblue.git; т. е. URL-адрес хранилища, который вы разветвили ранее.
  • В разделе «Ветка» введите выпуск.
  • При настройке триггера Git webhook вы можете указать регулярное выражение - конвейер будет запускаться только в том случае, если фиксация в хранилище происходит в ветви, соответствующей регулярному выражению. Мы можем динамически развернуть в App Engine из ветви, соответствующей регулярному выражению, нажав «Разрешить через триггер» в этом диалоговом окне.
  • Под «Config Filepaths» введите app.yaml.
  • Нажмите «Добавить».

Редактировать этап балансировки нагрузки

  • Нажмите «Добавить этап», затем в разделе «Тип» выберите «Редактировать балансировщик нагрузки».
  • В поле «Имя сцены» введите «Разделить трафик» на 5% / 95%.
  • Нажмите «Добавить балансировщик нагрузки». В появившемся диалоговом окне выберите default - это служба App Engine по умолчанию.

В появившемся диалоговом окне выберите default - это служба App Engine по умолчанию

Эта следующая часть хитрая. Мы уточним, сколько трафика получит каждая группа серверов. Мы могли бы указать их точные имена - например, codelab-default-v000 и codelab-default-v001 - но мы хотим запускать этот конвейер снова и снова по мере внесения изменений в наше приложение. Нам нужно будет динамически разрешать имена групп серверов.

Эти шаги позволяют нам распределить трафик для новейшей группы серверов в кластере codelab-default - это всегда будет группа серверов, которую мы развернем на этапе «Развертывание»:

  • Рядом с символом процента введите 5. Это процент трафика, который получит эта группа серверов.
  • Под «Локатором» выберите Координаты.
  • В разделе «Кластер» нажмите «Переключить список существующих кластеров», затем выберите codelab-default.
  • Под «Target» выберите «Новейшая группа серверов».

Эти шаги для выделения трафика второй по возрасту группе серверов в кластере codelab-default - при первом запуске этого конвейера это будет группа серверов, которую мы развернули в начале этой кодовой метки:

  • Нажмите «Добавить распределение»
  • Рядом с символом процента введите 95. Это процент трафика, который получит эта группа серверов.
  • Под «Локатором» выберите Координаты.
  • В разделе «Кластер» нажмите «Переключить список существующих кластеров», затем выберите codelab-default.
  • Под «Target» выберите «Предыдущая группа серверов».
  • Нажмите «Готово».

Нажмите «Готово»

Этап ручного суждения

  • Нажмите «Добавить этап», затем в разделе «Тип» выберите «Ручное суждение».
  • В поле «Имя этапа» введите «Подтвердить выпуск».
  • В разделе «Инструкции» введите Подтвердить, что новый выпуск должен получать 100% трафика.

Включить этап

  • Нажмите «Добавить этап», затем в разделе «Тип» выберите «Включить группу серверов».
  • В поле «Имя сцены» введите «Включить выпуск».
  • В разделе «Кластер» нажмите «Переключить список существующих кластеров», затем выберите codelab-default.
  • Под «Target» выберите «Новейшая группа серверов».

Когда этот этап выполняется, весь трафик будет направлен на группу серверов, развернутую в этом конвейере.

Этап ожидания

  • Нажмите «Добавить этап», затем под «Тип» выберите «Ожидание».
  • В поле «Время ожидания (секунды)» введите 120.

Уничтожить этап

  • Нажмите «Добавить этап», затем в разделе «Тип» выберите «Уничтожить группу серверов».
  • Под «Имя сцены» введите «Уничтожить предыдущий выпуск».
  • В разделе «Кластер» нажмите «Переключить список существующих кластеров», затем выберите codelab-default.
  • Под «Target» выберите «Предыдущая группа серверов».

Когда мы запустим этот конвейер в первый раз, этот этап уничтожит первую группу серверов, которую мы развернули в этой кодовой метке.

Закончив настройку этапов, нажмите «Сохранить изменения» в правом нижнем углу экрана.

  • Если вы этого еще не сделали, клонируйте свой разветвленный репозиторий на локальную рабочую станцию.
  • Проверьте новую ветку под названием «релиз».
  • Откройте «main.py» в вашем любимом текстовом редакторе.
  • В строке, которая начинается с self.response.write, замените background-color: red на background-color: blue.
  • Используя git, добавьте и зафиксируйте ваши изменения. Вставьте ваши изменения в удаленный репозиторий; то есть, git push оригинал релиз.
  • Если мы все настроили правильно, вы должны увидеть запуск вашего конвейера в Spinnaker. Если вы не настроили веб-крючок, вы также можете нажать «Начать выполнение вручную», чтобы запустить конвейер.

На вкладке «Конвейеры» вы должны увидеть работающий конвейер.

После завершения этапа «Разделить трафик 5% / 95%» ваш конвейер приостановится на этапе «Подтвердить выпуск». Две точки интереса:

  • На вкладке «Кластеры» вы должны увидеть новую группу серверов. Нажмите на новую группу серверов; панель должна открыться справа. Нажмите одну из ссылок в разделе «DNS» - фон вашего сайта изменится на синий.
  • На вкладке «Балансировщики нагрузки» нажмите на балансировщик нагрузки с надписью «По умолчанию»; панель должна открыться справа. В разделе «Разделение трафика» вы должны увидеть относительное распределение трафика между двумя группами серверов:

В разделе «Разделение трафика» вы должны увидеть относительное распределение трафика между двумя группами серверов:

Когда вы будете готовы, вернитесь на вкладку «Конвейеры». Нажмите «Продолжить» на этапе «Подтвердить выпуск». Ваш трубопровод будет продолжен:

  • Ваша новая группа серверов получит 100% трафика.
  • Ваш конвейер будет ждать две минуты.
  • Первая группа серверов (которую мы развернули в начале этой кодовой метки) будет уничтожена.

Если вы закончили работу с этим codelab, запустите gcloud compute instance, удалите $ USER-spinnaker, чтобы уничтожить вашу установку Spinnaker.