• Skip to primary navigation
  • Skip to content
  • Skip to primary sidebar

Dev-Ops-Notes.RU

Python, Docker, Kubernetes, Jenkins, GCP и AWS

  • Учебник Kubernetes
  • Учебник Docker
  • Скидка на курсы Udemy
  • Релокация в США
  • Для авторов

Jenkins – Деплой проекта в Google Cloud

В прошлых статьях этой серии мы установили Jenkins сервер в Docker контейнере, создали в нем задачу по синхронизацию репозиториев с GitHub, настроили возможность реагировать на GitHub commit-hook и запустили собственный Jenkins slave агент на базе нашего собственного Docker образа. Пришло время следать последний шаг: организовать деплой проекта в Google AppEngine.

Предварительные требования

В этой статье предполагается, что:

  • Вы знакомы с Google Cloud и знаете о существовании консольной утилиты gcloud, при помощи которой можно эффективно управлять всеми облачными сервисами Google.
  • У вас есть виртуальный или физический сервер с установленным на нем Docker Engine-ом, в котором установлен сервер Jenkins и собранный нами Jenkins slave агент.

Для создания процесса деплоя в Google AppEngine из Jenkins вам необходимо создать отдельную сервисную учетную запись в Google Cloud IAM. Мы выдадим ей все необходимые минимальные привилегии, необходимые Jenkins для публикации вашего кода.

Набор необходимых привилегий:

  • AppEngine Admin (непосредственно для деплоя и переключения трафика)
  • Storage Object Creator (возможность загрузить код на Cloud Storage)
  • Storage Object Viewer (возможность читать код с Cloud Storage)

Чтобы настроить эти привилегии, перейдите в меню управления Google Cloud - IAM & admin - Service accounts:

Нажмите на CREATE SERVICE ACCOUNT и заполните форму следующим образом:

Нажмите на CREATE и сохраните .json файл с аутентификационной информацией. Он понадобится далее для делегирования Jenkins возможности делать делой вашего проекта.

Создание проекта и деплой

После создания необходимой для Jenkins сервисной учетной записи в Google Cloud можно переходить к созданию и настройке проекта в Jenkins. Для этого в Jenkins необходимо создать 2 переменные окружения, в которых будет храниться аутентификационная информация для утилиты gcloud, необходимая ей для подключения к Google Cloud. Мы создадим эти переменные на уровне Jenkins slave ноды-контейнера. Перейдем в настройки ноды, созданной нами в прошлой статье Jenkins - Manage Jenkins - Manage Nodes:

Переходим в ноду jenkins_slave и выбираем в меню Configure:

Спускаемся вниз до Node Properties, устанавливаем галочку в Environment variables и нажимаем кнопку Add 2 раза:

Далее необходимо создать 2 переменные:

  • GCP_PROJECT_ID: имя вашего проекта в Google Cloud
  • GCP_SECRET_KEY: base64 строка .json файла, полученного нами при создании сервисной учетной записи для Jenkins
$ cat my_json_secret_key.json | base64

И нажимаем кнопку Save. Далее можно переходить к созданию в Jenkins проекта для автоматизации деплоя.

Создание проекта в Jenkins для деплоя кода в Google AppEngine

Для создания проекта для сборки\деплоя вашего кода в Jenkins перейдите в меню Jenkins - New Item.

Задаем имя задачи, например, test_project - Deploy, тип проекта – Freestyle project.

В разделе General - GitHub project указываем URL вашего репозитория, в моем случае – это https://github.com/andreivmaksimov/test_project/.

В разделе Source Code Management - GitHub устанавливаем параметры доступа к нашему репозиторию, а в качестве Build Triggers выбираем GitHub hook trigger GITScm polling:

В качестве Build step выбираем Execute shell. Используем следующее содержание:

echo $GCP_SECRET_KEY | base64 -d --ignore-garbage > $HOME/.gcloud_secret_key.json

gcloud auth activate-service-account --key-file $HOME/.gcloud_secret_key.json

gcloud config set project $GCP_PROJECT_ID

pip install -t lib -r requirements.txt

gcloud app deploy app.yaml --project $GCP_PROJECT_ID --quiet #--log-http --verbosity=debug

Суть этого шага в том, чтобы взять закодированное в base64 содержимое аутентификационного ключа и сохранить его в файле на локальной системе, активировать на основании него сервисную учетную запись, и определить проект, в который будет происходить деплой. В самом конце скачать все зависимости этого Python демо-проекта и вызвать деплой. В качестве результата демонстрирую выполнившуюся задачу:

Обратите внимание на закомментированные параметры --log-http и --verbosity=debug. Эти параметры нужны вам для того, чтобы отследить возможные ошибки в процессе настройки автоматического деплоя. В зависимости от вашего проекта, у вас могут быть не включены те или иные необходимые для автоматизации API. При использовании этих флагов в сообщениях возможных ошибок от Google будут прилетать ссылки, говорящие вам о том, куда зайти и что нажать, чтобы все заработало. Ребята реально постарались! Очень качественный API!

Ну и собственно наше приложение

Заключение

Надеюсь, вам понравилась серия статей, посвященная автоматизации деплоя в Google Cloud при помощи Jenkins. На самом деле, продемонстрированный подход работает похожим образом и для Azure, и AWS, и DigitalOcean, и многих-многих других облаков. Возможно, в ближайшее время я выпущу еще несколько статей, посвященных Jenkins, где сконцентрируюсь, напрмиер, на построении Jenkins Pipeline. Все будет зависеть от вашего интереса. Присылайте ваши вопросы, пожелания и предложения! Также буду очень рад, если кто-то из вас точно так же как и я, готов делиться своими наработками в виде интересных статей или видео-материалов. Само собой не безвозмездно 😉

Источники информации

  • Базовый образ для Jenkins slave агента: https://hub.docker.com/r/google/cloud-sdk/
  • Инструкции для сборки jenkins_slave взяты из: https://hub.docker.com/r/evarga/jenkins-slave/~/dockerfile/
  • Установка openjdk-1.8 (для поддержки slave.jar Jenkins-a): https://xmoexdev.com/wordpress/installing-openjdk-8-debian-jessie/
  • Настройка gcloud https://circleci.com/docs/1.0/google-auth/

 

Related

Primary Sidebar

Найти статью

Лучшее DevOps обучение

Новые статьи

Основные команды Docker

Шпаргалка по командам Docker

Об авторе

Expert in virtualization and cloud computing
Facebook | LinkedIn | Twitter | GitHub

Мы в соц сетях

Tags

angular ansible aws azure backup big data bigdata bot cdn chef comandwire continuous integration coreos croc dcos deep learning development devops digitalocean dns docker ecs etcd flask github google cloud javascript jenkins kubernetes linux machine learning networks nginx packer php python security serverless storage tensorflow terraform windows server wordpress крок релокация в США

sponsored