Непрерывное развертывание для Node.js в Google Cloud Platform

1656559466 nepreryvnoe razvertyvanie dlya nodejs v google cloud platform

от Гаутама Арора

Z8xzrpjaZ8HZ6w5m3gufafMkpOeYYUbWHDaf
Фото Акселя Ахоя на Unsplash

Google Cloud Platform (GCP) предоставляет разработчикам Node множество возможностей для легкого развертывания наших приложений. Хотите управляемый хостинг, например Heroku? App Engine, проверьте! Хотите разместить контейнерное приложение? Kubernetes Engine, проверьте! Хотите развернуть приложение без сервера? Облачные функции, проверьте!

Недавно я наслаждался использованием нашей внутренней службы непрерывного развертывания, которая быстро создает, тестирует и разворачивает новые комиты, присланные на GitHub. Поэтому, когда я прочитал новую службу Google Cloud Build, я захотел познакомиться с ней и увидеть, смогу ли я воспроизвести подобный опыт беспрепятственного развертывания для себя. Кроме того, в разговоре с Fransizka из команды Google Cloud она определила это как область, где учебное пособие будет полезно. Итак, мы идем…

Но подождите, что такое Cloud Build?

Cloud Build – это управляемая служба сборки в GCP, которая может получать код из разных источников, выполнять ряд шагов сборки для создания образа сборки для программы, а затем развертывать это изображение на парке серверов.

Cloud Build хорошо работает с собственным хранилищем исходного кода Google, Bit Bucket или GitHub. Он может создать образ сборки с помощью файла конфигурации Docker (Dockerfile) или собственный конфигурационный файл Cloud Build (cloudconfig.yaml). Он может развертывать приложения (и API) в App Engine, Kubernetes Engine и Cloud Functions. Действительно крутая функция – триггеры Build Triggers. Их можно настроить, чтобы наблюдать за новым комитом в хранилище кода и запускать новую сборку и развертывание.

Прежде чем прыгнуть в глубину…

В этой публикации приведены подробные шаги и код для настройки непрерывного развертывания приложений Node на GCP. Предполагается, что вы знакомы с разработкой простых приложений Node, работаете с командной строкой и имеете некоторый высокий уровень понимания развертывания программ в облачных сервисах, таких как Heroku, AWS, Azure или GCP.

Для каждого из разделов предоставляется сопутствующее хранилище кода GitHub, за которым вы можете следить. Но не волнуйтесь — не стесняйтесь просматривать статью, чтобы узнать идеи высокого уровня, и вы можете добавить ее в закладки и перейти к ней позже, если планируете настроить это. Настоящее удовольствие от такой установки состоит в том, что вы быстро разворачиваете приложения.

Непрерывное развертывание для App Engine Standard

Развернуть приложение Node в App Engine довольно просто. Создайте новый проект в Google Cloud Console, добавьте файл app.yaml конфигурационный файл в нашем каталоге кода (который описывает время выполнения узла, который мы хотим использовать — я использовал Node 8), и запустите gcloud app deploy на нашем терминале – и готово!

Если вы хотите попробовать это на себе, вот несколько ресурсов:

Итак, то, что мы сделали на данный момент, следуя краткому руководству выше:

  1. Создан новый проект в Google Cloud Console
  2. Развернул наше приложение Node на App Engine с помощью развертывание программы gcloud

….как теперь мы можем автоматизировать настройки, чтобы изменения кода разворачивались автоматически при нажатии GitHub?

Вот что нам нужно сделать:

  1. Разместите наш код на GitHub
  • Перейдите на GitHub, чтобы создать новое хранилище
  • Затем следуйте инструкциям, чтобы отправить код со своего компьютера на GitHub

2. Включите Cloud Build

3. Создайте конфигурационный файл Cloud Build

  • Создайте новый файл cloudbuild.yaml это выглядит так:
steps:- name: 'gcr.io/cloud-builders/npm'  args: ['install']- name: 'gcr.io/cloud-builders/npm'  args: ['test']- name: "gcr.io/cloud-builders/gcloud"  args: ["app", "deploy"]timeout: "1600s"

Эта конфигурация имеет три этапа сборки (каждая строка, начинающаяся с дефиса, является шагом сборки), которые будут выполняться npm installпотом npm test и если все смотрится хорошо, разверните наш код на App Engine.

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

Давайте попробуем так: для строки, начинающейся с «name», прочтите его последнее слово, а затем прочтите значение в строке «args». Надеюсь, теперь этот файл имеет больше смысла!

4. Запустите сборку вручную (необязательно только для проверки)

  • Теперь мы можем развернуть наше приложение с нашего компьютера с помощью Cloud Build
  • Запустите команду облачной сборки на своем терминале: gcloud builds submit — config cloudbuild.yaml .Эта команда запускает сборку на Cloud Build с помощью конфигурационного файла, который мы создали выше.
  • Перейдите на страницу Cloud Builds, чтобы увидеть, как начинается сборник.
  • Дождитесь завершения сборки, а затем проверьте программу Node, используя URL-адрес App Engine для этого приложения.
  • Вы можете внести изменения в программу Node и снова вызвать эту команду, чтобы начать больше сборников, если хотите.

5. Создайте триггер постройки

  • Перейдите на страницу Cloud Build Triggers и выберите Создать триггер
  • На странице настройки триггера сборки выберите GitHub в качестве репозитория исходного кода. Для этого вам нужно будет предоставить GCP доступ к вашим хранилищам GitHub, что вам нужно будет одобрить. После завершения выберите репозиторий GitHub для программы Node, которую вы передали на GitHub ранее.
  • Создайте триггер с именем continuous deploymentа для типа триггера выберите ответвление с регулярным выражением для имени ветви как master. Это гарантирует, что сборки, тестирование и развертывание будут выполняться только для push в главную ветвь, а не любую ветвь.
  • Для файла конфигурации сборки выберите cloudbuild.yaml
  • Теперь нажмите кнопку Build Trigger

6. Запустите сборку автоматически, нажав фиксацию на GitHub

  • Создав наш триггер сборки, сделайте простую фиксацию для вашей программы узла, например смените Hello, World! на «Привет, GCP!» и зафиксировать и отправить этот код на GitHub
  • Вернитесь на страницу Cloud Builds, и вы заметите, что сборка была запущена автоматически (если это не так, дайте ей еще несколько секунд или нажмите кнопку обновления на странице)
  • Когда сборка будет завершена, и вы увидите зеленую галочку, вы можете посетить свое приложение, используя его URL App Engine, и убедиться, что ваши изменения действуют!

Вот снимок экрана для сборок, запускаемых через GitHub push для нашей программы:

BwblpfTf5PSxQ4rXkzWshokcpg5iQJJEsThF

Слишком хорошо, чтобы быть правдой? Выполните последний шаг несколько раз, чтобы проверить его несколько раз. Наше первое приложение теперь разворачивают в App Engine во время каждого комита для освоения?

U057rpI1bqLVgfjn5DFIEZV-niVp6HY05VQ9
Фото Виллиана Джастена де Васконселлоса на Unsplash

Непрерывное развертывание для Kubernetes Engine

Прекрасно, поэтому мы настроили наше приложение для развертывания в App Engine на GitHub push, но что делать, если нам нужно такая же настройка для наших контейнерных приложений? Давайте попробуем!

На высоком уровне развертывания приложения Node на движке Kubernetes имеет две главные задачки. Во-первых, подготовьте наше приложение: поместите приложение в контейнер с помощью Docker, создайте его и перенесите изображение Docker в реестр контейнеров Google. Затем настройте вещи на конце GCP: создайте кластер Kubernetes, создайте развертывание с изображением приложения, а затем создайте службу, чтобы предоставить доступ к запущенному приложению.

Если вы хотите попробовать это на себе, вот несколько ресурсов:

Итак, что мы уже сделали, используя приведенные выше пособия:

  1. Создан еще один новый проект в Google Cloud Console
  2. Созданы кластер, развертывание и сервис Kubernetes
  3. Развернул нашу программу Containerized Node на Kubernetes Engine с помощью kubectl

…но мы хотим непрерывного развертывания, чтобы новый комит начинал сборник и развертывание.

Вот что нам нужно сделать:

  1. Разместите наш код на GitHub
  • Мы проделаем те же действия, что и в разделе ранее о App Engine. Создайте новый репозиторий и отправьте код из нашей машины на GitHub.

2. Включите Cloud Build

3. Создайте конфигурационный файл Cloud Build

  • Создайте новый файл cloudbuild.yaml это выглядит так:
steps:- name: 'gcr.io/cloud-builders/npm'  args: ['install']- name: 'gcr.io/cloud-builders/npm'  args: ['test']- name: 'gcr.io/cloud-builders/docker'  args: ["build", "-t", "gcr.io/$PROJECT_ID/my-image:$REVISION_ID", "."]- name: 'gcr.io/cloud-builders/docker'  args: ["push", "gcr.io/$PROJECT_ID/image:$REVISION_ID"]- name: 'gcr.io/cloud-builders/kubectl' args: - 'set' - 'image' - 'deployment/my-deployment' - 'my-container=gcr.io/$PROJECT_ID/image:$REVISION_ID' env: - 'CLOUDSDK_COMPUTE_ZONE=us-east1-b' - 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'

Эта конфигурация содержит пять этапов сборки, которые будут выполняться npm install и затем npm test чтобы убедиться, что наша программа работает, она создаст образ Docker и нажмет на GCR, а затем развернет нашу программу в нашем кластере Kubernetes. Ценности my-cluster, my-deployment and my-container в этом файле ссылайтесь на ресурсы в созданном нами кластере Kubernetes (в соответствии с руководством, которым мы руководствовались выше). $REVISION_ID — это значение переменной, которое вводит Cloud Build в конфигурацию на основе фиксации GitHub, которая запускает эту сборку.

4. Запустите сборку вручную (необязательно для проверки)

  • Теперь мы можем развернуть наше приложение с нашего компьютера с помощью Cloud Build
  • Запустите команду облачной сборки на своем терминале: gcloud builds submit — config cloudbuild.yaml --substitutions=REVISION_ID=1 .

Мы также передаем идентификатор ревизии в этой команде, поскольку мы вручную запускаем этот сборник, а не запускаем GitHub.

  • Перейдите на страницу Cloud Builds, чтобы увидеть сборник в действии.
  • В конце сборника вы можете протестировать свою программу Node с помощью URL-адреса Kubernetes
  • Вы можете внести изменения в программу Node и снова вызвать эту команду, чтобы начать больше сборников, если хотите

5. Создайте триггер постройки

  • Действия для настройки такие же, как в разделе выше App Engine. Перейдите на страницу Cloud Build Triggers для этого проекта, выберите правильный репозиторий GitHub, создайте триггер под названием continuous deployment только для master Ответвление, и все готово.
  • Запустите сборку автоматически, нажав GitHub
  • Это также то же, что и приведенный выше раздел App Engine — внесите изменения, добавьте, зафиксируйте и нажмите на GitHub, который начнет сборку, которую вы сможете увидеть на своей странице Cloud Builds. После завершения сборки можно увидеть обновленное приложение с помощью URL-адреса Kubernetes.

Вот снимок экрана для сборки, запускаемой через GitHub push для нашей программы:

lhzzRfcvgfRJaV-NXGSZw6KvyrwTjKVj-WZA

Действия в этой главе были почти такими же, как и в разделе App Engine. Основные отличия заключались в том, что нам пришлось контейнеризировать нашу программу с помощью Docker, развернуть наш кластер Kubernetes, а затем создать конфигурацию Cloud Build всего в нескольких шагах.

Но по сути своей Cloud Build и его триггеры Build работают почти одинаково и дают нам бесперебойный опыт развертывания. Наша вторая программа теперь разворачивается в Kubernetes Engine во время каждого комита для овладения ??

jIX1ztshIMTpBiKNuw-YruekKbP0LIuxV6pB
Фото Максимилиана Вайсбекера на Unsplash

Непрерывное развертывание для облачных функций

Конечно, App Engine и Kubernetes Engine великолепны, но как насчет автоматизированного развертывания нашего бессерверного приложения? Я имею в виду, что вообще лучше всего не управлять серверами, не правда ли? Давай сделаем это!

Чтобы развернуть программу Node в функциях Cloud, от нас потребуется создать новый проект. Конфигурационные файлы не требуются, и как только функции GCloud будут развернуты на нашем терминале, наши функции будут развернуты!

Если вы хотите попробовать это на себе, вот ресурсы, которые вам понадобятся:

Если вы следили, вы, вероятно, уже можете вообразить, какие шаги нам нужно сделать:

  1. Разместите наш код на GitHub
  • Мы уже знаем, как это сделать

2. Включите Cloud Build

3. Создайте конфигурационный файл Cloud Build

  • Создайте новый файл cloudbuild.yaml это выглядит так:
steps:- name: 'gcr.io/cloud-builders/npm'  args: ['install']- name: 'gcr.io/cloud-builders/npm'  args: ['test']- name: 'gcr.io/cloud-builders/gcloud' args: - beta - functions - deploy - helloWorld - -- source=. - -- runtime=nodejs8 - -- trigger-http

Подобно конфигурации App Engine, эта конфигурация имеет 3 шага для установки. Затем протестируйте сборку, и если все хорошо, разверните ее в Cloud Functions.

4. Запустите сборку вручную (необязательно для проверки)

  • Теперь мы можем развернуть нашу функцию с нашей машины с помощью Cloud Build
  • Запустите это в своем терминале: gcloud builds submit — config cloudbuild.yaml .
  • Перейдите на страницу Cloud Builds, чтобы увидеть сборник в действии.
  • В конце сборника вы можете протестировать свою бессерверную программу с помощью URL-адреса Cloud Function

5. Создайте триггер постройки

  • Действия для настройки такие же, как в разделе выше App Engine и Kubernetes Engine. Перейдите на страницу Cloud Build Triggers для этого проекта, выберите правильный репозиторий GitHub, создайте триггер под названием continuous deployment только для master ветвь, и все готово.

6. Запустите сборку автоматически, нажав GitHub

  • Это также то же, что и в разделе выше для App Engine и Kubernetes Engine: внесите изменения, добавьте, зафиксируйте и нажмите GitHub, который начнет сборку, которую вы сможете увидеть на своей странице Cloud Builds. После завершения сборки вы сможете увидеть обновленное приложение с помощью URL-адреса Cloud Functions

Вот снимок экрана для сборки, запускаемой через GitHub push для нашего образца программы:

UVSiRQerOS6aBhi8XUTJTxuVX976dsMDFgX5

Облачные функции было очень легко настроить с помощью автоматизированных сборок, что делает рабочий процесс «код → сборка → тест → нажатие → развертывание» очень быстрым! Наша третья программа теперь разворачивается к функциям облака во время каждого комита для овладения???

41hLHGgzW9-5Np9cXWpgoltzPVltTqLNCfY0
Фото: Jassim Vailoces на Unsplash

Подведению

Фу! В этой публикации мы рассмотрели многие вопросы. Если это была ваша первая попытка GCP для Node, надеюсь, вы убедились, насколько легко и просто испытать разные варианты. Если вам очень хотелось понять, как настроить непрерывное развертывание для программ на GCP, я надеюсь, вы тоже не были разочарованы!

Прежде чем вы уйдете, я просто хотел убедиться, что вы не упустили тот факт, что во всех разделах есть пример программы: Hello World для App Engine, Hello World для Kubernetes Engine и Hello World для Cloud Functions.

Пока все! Давайте отправим код! ?

Спасибо, что следите. Если у вас есть вопросы или хотите сообщить об ошибках в этой публикации, оставьте комментарий.

Если эта статья была вам полезна, не стесняйтесь?

И вы можете подписаться на меня в Twitter здесь.

Добавить комментарий

Ваш адрес email не будет опубликован.