Рубрики
Uncategorized

Разверните полное приложение для стека на платформе Google Cloud с GitLab CI

Я развернул приложение Flowstack (I.E. Frontend / Backend) на платформе Google Cloud с Kubernetes … Теги с DevOps, GCloud, Gitlabci, Docker.

Я развернул приложение Flowstack (I.E. Frontend/Backend) на платформе Google Cloud с Kubernetes. А с Разработчики ленивые Я все автоматизировал с Gitlab CI.

Это далеко от PHP, развернутого вручную на сервере Apache. Если вы заинтересованы в перемещении снаряжения и посмотрите, как это работает, читать дальше.

Мое заявление

Мой проект, который я сейчас работаю, делится на три части: Frontend , Backend , Очередь работы Отказ

Каждая часть работает в отдельном Контейнеры Докер. Таким образом, у них все есть `Dockerfile ‘:

  1. Frontend Использует изображение Node.js, которое строит Угловая 9 а затем изображение Nginx, которое обслуживает статические файлы
  2. Backend использует Node.js Изображение, которое запускает веб-сервер на порт 3000
  3. job_queue также использует изображение Node.js, которое запускает Node.js Скрипт, который связывается с базой данных Postgres и выполняет автономные действия.

Таким образом, мой проект имеет следующую структуру:

├── Backend ├── Докер ├── Docker-Compose.yml.yml.yml └── внешний интерфейс

Поэтому я хотел создать эти изображения автоматически во время Git push И публикуйте его на Google Cloud Platform с Kubernetes. Для этого я использовал Gitlab ci. Но логика должна быть идентична кругу GitHub CI.

База данных Postgres не зависит от Kubernetes и работает на [Google Cloud SQL для PostgreSQL] ( https://cloud.google.com/sql/docs/postgres ). Я не буду говорить об этом здесь ..

Автоматизация с GitLab CI

GitLab позволяет определить рабочий процесс вещей, когда вы нажимаете код через .gitlab-ci.yml файл. Это часто полезно для запуска A трубопровод (последовательность действий), которая будет запустить модульные тесты, код линтера и т. Д… ` В моем случае я создал следующие действия:

  1. `test ‘: Испытания запуска запуска
  2. Опубликовать : Создание докера изображения и публикации в личном реестре GCloud
  3. Развертывание : говорит GCloud развертывать изображения ранее Загружено Отказ

Таким образом, структура файла `.gitlab-Ci.yml ‘выглядит так:

# .gitlab-ci.yml
# ...
stages: [test, publish, deploy]

job:test:backend:
  stage: test
  # ...

job:publish:backend:
  stage: publish
  # ...

job:deploy-develop:backend:
  stage: deploy
  # ...

Я только держал работу, которая включает в себя «бэкэнд», чтобы упростить.

Я пойду на тебя через шаги. Вот так.

Тест: беговые тесты

Это самый простой шаг. Я не буду тратить слишком много времени на это, потому что многие учебники существуют, и это не предмет этой статьи.

Итак, мы начинаем две работы:

  1. Работа: Тест: Backend Инициализируйте приложение, подключите базу данных Postgres и запустите Тест пряжи Отказ
job:test:backend:
  stage: test
  services:
    - postgres:12.3-alpine
  variables:
    POSTGRES_DB: database
    POSTGRES_USER: user
    POSTGRES_PASSWORD: password
    POSTGRES_HOST_AUTH_METHOD: trust
  before_script:
    - cd backend
    - cp .example.env .env
    - yarn install
  script: yarn test
  1. Работа: Тест: Frontend будет инициализировать приложение и запустить Тест пряжи Но из изображения, содержащего хромированный драйвер для эмуляции навигации.
job:test:frontend:
  image: weboaks/node-karma-protractor-chrome:alpine
  stage: test
  before_script:
    - cd frontend
    - yarn install
  script: yarn test

Там вы идете.

Опубликовать: создание образа докера и публикуя его в личном реестре изображений GCloud.

Опубликовать Шаг будет построить докер изображения различных приложений и опубликовать их на GCloud — реестр контейнера Отказ Для этого мы создадим работу для каждого изображения (Frontend, Backend и работника).

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

Тогда можно использовать:

  • gcloud auth подключиться к GCloud в контейнере.
  • GCloud Auth Configure-Docker для подключения докера к GCloud
  • Docker Build/push создать изображение и опубликовать его

Последнее, что нужно знать: подключиться к GCloud в GitLab CI, вы должны сначала войти в систему. Для этого необходимо добавить учетные данные GCloud в настройках GitLab CI в разделе «Настройки> Переменные». Как только это будет сделано, можно войти в работу, используя следующую команду:

echo $GCLOUD_SERVICE_KEY > ${HOME}/gcloud-service-key.json
gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json

Ниже окончательный результат для Работа: Опубликовать: Backend :

job:publish:backend:
  stage: publish
  image: google/cloud-sdk:latest
  when: on_success
  services:
    - docker:dind
  tags:
    - dind
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_TLS_CERTDIR: ""
  before_script:
    - cd backend
    - cp .develop.env .env
    - echo $GCLOUD_SERVICE_KEY > ${HOME}/gcloud-service-key.json
    - gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json
    - gcloud auth configure-docker
  script:
    - docker build --compress -t us.gcr.io/${PROJECT_NAME}/${APP_NAME}-backend:${CI_COMMIT_SHA} .
    - docker push us.gcr.io/${PROJECT_NAME}/${APP_NAME}-backend:${CI_COMMIT_SHA}
    - docker image rm -f us.gcr.io/${PROJECT_NAME}/${APP_NAME}-backend:${CI_COMMIT_SHA}
    - echo "us.gcr.io/${PROJECT_NAME}/${APP_NAME}-backend:${CI_COMMIT_SHA} image build with success and pushed"

Я пропускаю детали двух других, потому что они очень похожи.

Развертывание: Спросите GCloud развернуть изображения, ранее загруженные.

Использовать kubectl Мы также будем использовать Google/Cloud-SDK Изображение, которое содержит утилиту Kubernetes.

Но прежде чем мы начнем кодировать скрипт, нам нужно создать три развертывание :

  1. DPL-My-App-Frontend на https://my-app/
  2. DPL-My-App-Backend на https://api.my-app/ Отказ
  3. DPL-My-App-app - рабочий это не выставлено

Чтобы создать их, вы можете использовать интерфейс GCloud или использовать kubectl Прямо на вашем компьютере (не забудьте Настроить кластерный доступ для Kubectl ).

Для версии командной строки используйте Kubectl Создать развертывание :

kubectl create deployment dpl-develop-data-frontend --image=us.gcr.io/mazen-158916/data-k8s-frontend
kubectl create deployment dpl-develop-data-backend --image=us.gcr.io/mazen-158916/data-k8s-backend
kubectl create deployment dpl-develop-data-worker --image=us.gcr.io/mazen-158916/data-k8s-worker

Мы можем проверить, что все прошло хорошо с Kubectl Получить развертывание который должен перечислить наши три новых развертывания.

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

Для этого вам также нужно использовать gcloud auth Как вы видели раньше. Тогда просто позвоните в методы:

  • Kubectl Set Image Чтобы обновить изображение контейнера.
  • Kubectl Patch Развертывание Чтобы обновить информацию контейнера (например, изменение метаданных)

Вот полная версия для Работа: Развернуть - Разработка: Backend :

job:deploy-develop:backend:
  stage: deploy
  image: google/cloud-sdk:latest
  before_script:
    - echo $GCLOUD_SERVICE_KEY > ${HOME}/gcloud-service-key.json
    - gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json
    - gcloud config set compute/zone us-east1-c
    - gcloud config set project ${GCLOUD_PROJECT_NAME}
    - gcloud container clusters get-credentials ${K8S_CLUSTER_NAME}
    - gcloud auth configure-docker
  script:
    - kubectl set image deployment/${APP_NAME}-backend data-k8s-backend=us.gcr.io/${PROJECT_NAME}/${APP_NAME}-backend:${CI_COMMIT_SHA}
    - kubectl patch deployment ${APP_NAME}-backend -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}"

Там вы идете.

Тогда просто перейдите в интерфейс GCloud в разделе «ДВИГАТЕЛЬ ДВИГАТЕЛЬНОСТИ ДВИГАТЕЛЬНОСТИ CUBERNETES>», найдите соответствующие рабочие нагрузки и создайте записи DNS на провайдер имени доменных имен и укажите их в соответствующие развертывания.

Вывод

Для моей части я нашел подход платформы Google Cloud Solution, но довольно хорошо документирован. Время вложено в изучение этой технологии, кажется мне хорошо инвестированным, потому что архитектура действительно Масштабируемое и позволяет снизить затраты на инфраструктуру.

Единственная черная точка может быть то, что мы зафиксируем себя в провайдере Но я думаю, что веб-сервис Amazon или Microsoft Azure разделяет ту же терминологию, потому что их технология также основана на Kubernetes на мой взгляд.

Ссылки

Оригинал: «https://dev.to/madeindjs/deploy-a-fullstack-application-on-google-cloud-plateform-with-gitlab-ci-1n91»