Таким образом, вы хотите, чтобы ваше приложение было развернуто для вашего кластера Kubernetes, не заботясь о любом ручном шаге? Я забрал вас, это супер просто, чтобы создать постоянный конвейер развертывания с облаком Google. Ради понимания я выбираю приложение Nodejs Express, но он также работает с реагированием или PHP или любым другим уровнем приложений.
Давайте начнем:
Потому что я админ
Сначала нам нужно дать контейнер построить права доступа к нашим API Kubernetes. Помните, что это не дает доступа к определенному кластеру. Это просто позволяет учетной записи службы CloudBuilder для доступа к нашему кластеру Kubernetes. Так что прыгай к IAM Настройки страницы и искать учетную запись службы CloudBuitild. Если это не существует, вам, возможно, придется включить CloudBuild API.
Это должно выглядеть так
Нам нужно добавить права на доступ к API Kubernetes наших кластеров, так что Klick на ручке и ищете следующее.
Подготовьте заявку
Я не буду вспоминаю детали о том, как настроить экспресс-приложение и ввести тестирование к нему. Я создал репозиторий с примером приложения, что мы можем использовать
Mfahlandt/GCP-непрерывное развертывание-узел-демонстрация
Это пример проекта, чтобы показать, как вы можете легко создать постоянное развертывание в Google Cloud
Nodejs непрерывное развертывание, выполненное с контейнером-строителем и двигателем Kubernetes
Чтобы найти все детали о том, как использовать этот репозиторий, пожалуйста, смотрите относится к соответствующему блоку пост на dev.to
Чтобы дать вам обзор, у нас есть приложение Basic Express с двумя пусними маршрутами для получения пользователей или пользователей по ID. Также у нас есть тестовая папка, имеющая тесты на две маршруты в нем. Эти тесты написаны с помощью Чай и Мока. Если вы загрузите репозиторий, вы можете сделать следующее, чтобы увидеть, работают ли тесты.
npm install npm test
До приложения может работать, нам нужна услуга и развертывание в кластере Kubernetes. Итак, давайте быстро создадим услугу и развертывание. Все файлы вы также можете найти в репозитории.
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: server-production labels: app: YOUR-PROJECT-ID spec: replicas: 2 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 template: metadata: labels: app: server spec: containers: - name: server image: gcr.io/PROJECT_ID/REPOSITORY:master imagePullPolicy: Always ports: - containerPort: 3000 env: - name: NODE_ENV value: "production"
Единственная важная часть здесь заключается в том, что вы изменяете идентификатор проекта и хранилище к пути, которое будет иметь репозиторий.
После этого нам нужен только услуга, чтобы открыть наше приложение в Интернет. Так быстро примените услугу.
kind: Service apiVersion: v1 metadata: name: server spec: selector: app: server ports: - name: server protocol: TCP port: 80 targetPort: 3000 type: LoadBalancer
Готов развернуть
Теперь нам нужно перейти к самой важной части всей настроек. CloudBuild.yaml. Там мы определим все для наших постоянных шагов развертывания.
Первая удивительная часть будет, что можно поставить все важные данные в переменных среды, определенные в сборке, поэтому вы можете использовать облачную сборку для разных установок.
Сначала мы устанавливаем все зависимости узла и запустите тест.
- name: 'gcr.io/cloud-builders/npm' args: ['install'] - name: 'gcr.io/cloud-builders/npm' args: ['run', 'test']
После этого мы создаем документ Docker со всеми файлами репозиториев внутри и правильной определенной средой, поэтому вы также можете легко выполнить развертывание постановки или даже развертывание ветви. И мы нажимаем его на репозиторий Google Image.
- name: 'gcr.io/cloud-builders/docker' args: - build - '--build-arg' - 'buildtime_variable=$_NODE_ENV' - '-t' - gcr.io/$PROJECT_ID/$REPO_NAME:$BUILD_ID - '.' - name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/$PROJECT_ID/$REPO_NAME:$BUILD_ID']
Также важно увидеть, мы пометим изображение с уникальным идентификатором сборки, чтобы использовать применить способность Kubernetes, поэтому изображение фактически изменяется.
- name: 'gcr.io/cloud-builders/kubectl' args: - set - image - deployment - $_DEPLOYMENT - $_DEPLOYMENT=gcr.io/$PROJECT_ID/$REPO_NAME:$BUILD_ID env: - 'CLOUDSDK_COMPUTE_ZONE=$_CLUSTER_ZONE' - 'CLOUDSDK_CONTAINER_CLUSTER=$_CLUSTER_NAME'
И, наконец, мы установили изображение в кластере Kubernetes. БАМ! Крюк, автоматизированное тестирование, если успешно автоматизированное развертывание, без простоя.
Теперь мы открываем Контейнерный строитель триггер и выберите, где находится наш код.
На последнем шаге триггера мы теперь можем добавить пользовательские переменные. Это первая точка, когда мы на самом деле определяем кластер. Так что все агрегировано в одном месте и готово к работе.
Теперь нам просто нужно обрести мастеру, а триггер начнется.
Yiha теперь у нас есть постоянное развертывание, не создавая дополнительных услуг, таких как Дженкинс, Муравей или шеф-повар. Довольно удивительно
Я думаю о создании серии учебных пособий от нуля до героя в облаке. Оставьте мне комментарий!
Оригинал: «https://dev.to/mfahlandt/nodejs-continuous-deployment-done-with-container-builder-and-kubernetes-engine-in-google-cloud-570p»