Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Практические руководства
  • Веб-сервис
    • Все руководства
    • Cтатический сайт в Object Storage
    • Cайт на LAMP- или LEMP-стеке
    • Отказоустойчивый сайт с балансировкой нагрузки через Network Load Balancer
    • Отказоустойчивый сайт с балансировкой нагрузки через Application Load Balancer
    • Сайт на базе Joomla с БД PostgreSQL
    • Сайт на WordPress
    • Сайт на WordPress с БД MySQL
    • Перенос WordPress сайта с хостинга в Yandex Cloud
    • Веб-сайт на базе 1С-Битрикс
    • Интеграция L7-балансировщика с Cloud CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
  • Интернет-магазины
    • Все руководства
    • Интернет-магазин на 1С-Битрикс
    • Интернет-магазин на Opencart
  • Архив данных
    • Все руководства
    • Однонодовый файловый сервер
    • Настройка SFTP-сервера на Centos 7
    • Резервное копирование в Object Storage через Acronis
    • Резервное копирование в Object Storage через CloudBerry Desktop Backup
    • Резервное копирование в Object Storage через Duplicati
    • Резервное копирование в Object Storage через Bacula
    • Резервное копирование в Object Storage через Veritas Backup Exec
    • Оцифровка архива в Yandex Vision
  • Тестовая среда
    • Все руководства
    • Тестирование приложений с помощью GitLab
    • Создание тестовых ВМ через GitLab CI
    • Высокопроизводительные вычисления на прерываемых виртуальных машинах
    • Эмуляция множества IoT-устройств
    • Нагрузочное тестирование gRPC-сервиса
    • HTTPS-тест с постоянной нагрузкой с помощью Phantom
    • HTTPS-тест со ступенчатой нагрузкой с помощью Pandora
  • Управление инфраструктурой
    • Все руководства
    • Начало работы с Terraform
    • Загрузка состояний Terraform в Object Storage
    • Начало работы с Packer
    • Сборка образа ВМ с набором инфраструктурных инструментов с помощью Packer
    • Автоматизация сборки образов ВМ с помощью Jenkins
    • Непрерывное развертывание контейнеризованных приложений с помощью GitLab
    • Создание кластера Linux-серверов «1С:Предприятия» с кластером Managed Service for PostgreSQL
    • Создание кластера Windows-серверов «1С:Предприятия» с базой данных SQL Server
    • Миграция в Yandex Cloud с помощью Hystax Acura
    • Защита от сбоев с помощью Hystax Acura
    • Настройка отказоустойчивой архитектуры в Yandex Cloud
    • Создание SAP-программы в Yandex Cloud
  • Построение Data Platform
    • Все руководства
    • Синхронизация данных из MySQL с помощью Yandex Data Transfer
    • Миграция базы данных из Yandex Managed Service for MySQL в MySQL
    • Настройка управляемой базы данных в кластере ClickHouse для Graphite
    • Обмен данными между Yandex Managed Service for ClickHouse и Yandex Data Proc
    • Импорт базы данных в Yandex Data Proc с использованием Sqoop
    • Использование Confluent Schema Registry с Yandex Managed Service for Apache Kafka®
    • Поставка данных из Yandex Managed Service for PostgreSQL в Yandex Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Yandex Managed Service for PostgreSQL в Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • Миграция данных в Yandex Managed Service for Apache Kafka®
    • Перенос коллекций из MongoDB в Yandex Managed Service for MongoDB
    • Миграция базы данных в Yandex Managed Service for SQL Server
    • Перенос данных из PostgreSQL в ClickHouse с помощью Yandex Data Transfer
    • Настройка Kafka Connect для работы с кластером Yandex Managed Service for Apache Kafka®
    • Настройка Yandex Cloud DNS для доступа к кластерам управляемых баз данных из других облачных сетей
    • Миграция в Yandex Managed Service for Elasticsearch с помощью Reindex API
    • Использование скриптов инициализации для настройки GeeseFS в Yandex Data Proc
  • Windows в Yandex Cloud
    • Все руководства
    • Развертывание Active Directory
    • Развертывание Microsoft Exchange
    • Развертывание Remote Desktop Services
    • Развертывание группы доступности Always On
    • Развертывание группы доступности Always On с внутренним сетевым балансировщиком
    • Развертывание Remote Desktop Gateway
  • Сетевая маршрутизация
    • Все руководства
    • Маршрутизация с помощью NAT-инстанса
    • Создание VPN-туннеля
    • Установка виртуального роутера Cisco CSR1000v
    • Установка виртуального роутера Mikrotik CHR
    • Соединение с облачной сетью при помощи OpenVPN
    • Настройка сети для Yandex Data Proc
  • Визуализация и анализ данных
    • Все руководства
    • Визуализация данных из CSV-файла
    • Создание и публикация диаграммы с картой Москвы из CSV-файла
    • Анализ продаж сети магазинов из БД ClickHouse
    • Анализ открытых данных ДТП на дорогах России
    • Анализ продаж и локаций пиццерий на данных из БД ClickHouse и Marketplace
    • Веб-аналитика с подключением к Яндекс Метрике
    • Веб-аналитика с расчетом воронок и когорт на данных Яндекс Метрики
    • Аналитика мобильного приложения на данных AppMetrica
    • Анализ статистики подкастов Яндекс Музыки (для авторов подкастов)
    • Визуализация данных с помощью SQL-чарта
    • Анализ customer journey мобильного приложения на данных AppMetrica
    • Анализ логов Object Storage при помощи DataLens
  • Интернет вещей
    • Руководства по работе с интернетом вещей
    • Мониторинг состояния географически распределенных устройств
    • Мониторинг показаний датчиков и уведомления о событиях
  • Бессерверные технологии
    • Сокращатель ссылок
    • Ввод данных в системы хранения
    • Хранение журналов работы приложения
  1. Управление инфраструктурой
  2. Автоматизация сборки образов ВМ с помощью Jenkins

Автоматизация сборки образов с помощью Jenkins и Packer

Статья создана
Yandex Cloud
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Настройте окружение
  • Создайте сервисный аккаунт
  • Создайте виртуальную машину с Jenkins
  • Установите Packer
  • Настройте Jenkins
  • Настройте задачу для Jenkins
  • Настройте GitHub-репозиторий
    • Включите Webhook
    • Добавьте на GitHub SSH-ключ
  • Создайте образ с помощью Jenkins
  • Разверните образы
  • Как удалить созданные ресурсы

На основе заданной конфигурации Packer создает образы дисков ВМ в сервисе Compute Cloud. Jenkins позволяет построить процесс непрерывной доставки изменений.

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

Чтобы установить и настроить Jenkins, Packer, GitHub и Terraform для совместной работы:

  1. Подготовьте облако к работе.
  2. Настройте окружение.
  3. Создайте сервисный аккаунт.
  4. Создайте виртуальную машину с Jenkins.
  5. Установите Packer на ВМ.
  6. Настройте Jenkins.
  7. Настройте задачу для Jenkins.
  8. Настройте GitHub-репозиторий.
  9. Создайте образ с помощью Jenkins.
  10. Разверните образы с помощью Terraform.

Если созданные ВМ и образы больше не нужны, удалите их.

Подготовьте облако к работе

Перед работой нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
  2. На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсы

В стоимость поддержки инфраструктуры входят:

  • плата за постоянно запущенные виртуальные машины (см. тарифы Yandex Compute Cloud);
  • плата за хранение созданных образов (см. тарифы Yandex Compute Cloud);
  • плата за использование динамических публичных IP-адресов (см. тарифы Yandex Virtual Private Cloud).

Настройте окружение

Подготовьте программы для работы:

  • Установите интерфейс командной строки Yandex Cloud.
  • Установите Terraform. См. также раздел Начало работы с Terraform.
  • Загрузите утилиту jq.
  • Настройте Git. Если вы работаете под Windows, используйте Git Bash.
  • Создайте ответвление репозитория с примерами в своем аккаунте на GitHub.
  • Подготовьте SSH-ключ для доступа к виртуальным машинам.

Создайте сервисный аккаунт

С помощью сервисного аккаунта Jenkins сможет выполнять действия в вашем облаке и каталоге. Чтобы создать сервисный аккаунт:

  1. Получите идентификаторы каталога и облака, выполнив команду yc config list.

  2. Создайте сервисный аккаунт и передайте его идентификатор в переменную окружения, выполнив команды:

    yc iam service-account create --name <имя пользователя>
    yc iam key create --service-account-name <имя пользователя> -o <имя пользователя.json>
    SERVICE_ACCOUNT_ID=$(yc iam service-account get --name <имя пользователя> --format json | jq -r .id)
    

    В текущем каталоге будет создан JSON-файл, содержащий авторизационные данные.

  3. Назначьте сервисному аккаунту роль admin на каталог, где будут выполняться операции:

    yc resource-manager folder add-access-binding <имя_каталога> --role admin --subject serviceAccount:$SERVICE_ACCOUNT_ID
    

Создайте виртуальную машину с Jenkins

Jenkins будет получать изменения в конфигурациях образов ВМ из GitHub, а затем с помощью Packer создавать образы в облаке.

Чтобы создать виртуальную машину с Jenkins:

  1. На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.

  2. В поле Имя введите имя виртуальной машины: jenkins-tutorial.

  3. Выберите зону доступности, в которой будет находиться виртуальная машина.

  4. В блоке Выбор образа/загрузочного диска перейдите на вкладку Cloud Marketplace и нажмите кнопку Посмотреть больше. В открывшемся окне выберите образ Jenkins.

    Примечание

    В случае самостоятельной настройки ВМ с Jenkins воспользуйтесь инструкцией.

  5. В блоке Диски укажите размер загрузочного диска 15 ГБ.

  6. В блоке Вычислительные ресурсы:

    • Выберите платформу: Intel Ice Lake.
    • Укажите необходимое количество vCPU и объем RAM:
      • vCPU — 2.
      • Гарантированная доля vCPU — 20%.
      • RAM — 2 ГБ.
  7. В блоке Сетевые настройки нажмите кнопку Добавить сеть и выберите, к какой подсети подключить виртуальную машину. В блоке Публичный адрес назначьте ВМ публичный адрес автоматически или выберите один из зарезервированных адресов.

  8. В блоке Доступ укажите данные для доступа на виртуальную машину:

    • В поле Логин введите имя пользователя.
    • В поле SSH-ключ вставьте содержимое файла открытого ключа.
      Пару ключей для подключения по SSH необходимо создать самостоятельно.
  9. Нажмите кнопку Создать ВМ.

Установите Packer

Packer позволяет создавать образы дисков виртуальных машин с заданными в конфигурационном файле параметрами.

Примечание

Для работы с Yandex Cloud требуется Packer версии не ниже 1.5.

  1. Скачайте дистрибутив Packer для Linux.

  2. Загрузите Packer на созданную ВМ:

    scp packer_<версия Packer>_linux_amd64.zip <Логин>@<Публичный IP-адрес ВМ>:~/
    
  3. Подключитесь к виртуальной машине по протоколу SSH. Для этого можно использовать утилиту ssh в Linux и macOS и программу PuTTY для Windows.

  4. Создайте новую директорию, переместите в нее исполняемые файлы Packer и распакуйте архив:

    sudo mkdir /opt/yandex-packer/
    sudo mv packer_<версия Packer>_linux_amd64.zip /opt/yandex-packer/
    unzip packer_<версия Packer>_linux_amd64.zip
    
  5. Все действия системы Jenkins будут выполняться от имени пользователя jenkins. Дайте этому пользователю права на запуск Packer:

    sudo chmod u+x /opt/yandex-packer/packer*
    sudo chown jenkins:jenkins /opt/yandex-packer/packer*
    

Настройте Jenkins

Чтобы собирать образы по конфигурациям из GitHub, нужно настроить Jenkins:

  1. Подключитесь к виртуальной машине по протоколу SSH. Для этого можно использовать утилиту ssh в Linux и macOS и программу PuTTY для Windows.

  2. Откройте файл пароля для запуска настройки и скопируйте пароль:

    sudo cat /var/lib/jenkins/secrets/initialAdminPassword
    
  3. Перейдите в браузере по адресу http://<публичный IP-адрес ВМ с Jenkins>. Откроется консоль управления Jenkins.

  4. Введите в поле Administrator password скопированный пароль и нажмите кнопку Continue.

  5. Выберите Select plugins to install.

    Вам потребуются следующие плагины:

    • Pipeline — плагин для получения исходного кода из системы контроля версий, его сборки, тестирования и развертывания.
    • Git — плагин для работы с Git-репозиториями.
    • Credentials Binding — плагин для создания переменных окружения, содержащих авторизационные данные.
  6. Нажмите кнопку Install. Начнется установка выбранных компонентов.

  7. После завершения установки вам будет предложено создать учетную запись администратора. Заполните поля формы и нажмите кнопку Save and Continue.

  8. Вам будет предложено создать URL для Jenkins. Оставьте URL вида http://<публичный IP-адрес ВМ>/. Нажмите кнопку Save and finish.

  9. Нажмите кнопку Start using Jenkins, чтобы завершить установку и перейти на административную панель Jenkins.

Настройте задачу для Jenkins

Чтобы Jenkins мог выполнять сборки образов, следует указать авторизационные данные для Yandex Cloud и создать задачу на получение изменений из репозитория GitHub. Авторизационные данные будут использоваться в переменных, находящихся в конфигурационных файлах Packer.

  1. Откройте административную панель Jenkins.

  2. В правом верхнем углу нажмите на имя пользователя.

  3. Выберите пункт Credentials.

  4. В блоке Stores scoped to Jenkins нажмите на ссылку Global.

  5. Получите идентификатор подсети, в которой будут собираться образы, выполнив команду yc vpc subnet list.

  6. Нажмите кнопку Add credentials. Укажите следующие параметры:

    1. В списке Kind выберите пункт Secret text.
    2. В списке Scope оставьте Global.
    3. В поле Secret укажите идентификатор вашего каталога.
    4. В поле Id укажите YC_FOLDER_ID. Нажмите кнопку OK.
  7. Создайте еще один секрет со следующими параметрами:

    1. Kind: Secret text.
    2. Scope: Global.
    3. Secret: идентификатор подсети, в которой находится ВМ с Jenkins.
    4. ID: YC_SUBNET_ID.
  8. Создайте еще один секрет со следующими параметрами:

    1. Kind: Secret file.
    2. Scope: Global.
    3. File: файл <имя пользователя>.json из шага 1.
    4. ID: YC_ACCOUNT_KEY_FILE.
  9. Вернитесь на главную страницу административной панели и выберите пункт New item.

  10. Введите название для задачи: jenkins-tutorial и выберите тип задачи Pipeline. Нажмите кнопку OK.

  11. В открывшемся окне поставьте флаг GitHub hook trigger for GITScm polling. Эта опция позволяет запускать сборку по каждому выполнению команды push в ветку master Git-репозитория.

  12. В блоке Pipeline в списке Definition выберите Pipeline script from SCM.

  13. В списке SCM выберите Git.

  14. В поле Repository URL укажите URL вашего ответвления из GitHub.

  15. В поле Script path укажите jenkins-packer/Jenkinsfile.

  16. Оставьте остальные поля без изменений и нажмите Сохранить.

Настройте GitHub-репозиторий

В настройках репозитория GitHub включите webhook для запуска сборки в Jenkins и добавьте публичный SSH-ключ для авторизации.

Включите Webhook

  1. Откройте ответвление репозитория на GitHub в браузере.
  2. Выберите вкладку Settings.
  3. Выберите пункт Webhooks и нажмите кнопку Add webhook.
  4. В поле Payload URL введите http://<публичный IP-адрес ВМ>/github-webhook/.
  5. Нажмите кнопку Add webhook.

Добавьте на GitHub SSH-ключ

  1. Нажмите на ваш аватар на GitHub. В открывшемся меню выберите пункт Settings.
  2. Выберите пункт SSH and GPG keys.
  3. Нажмите кнопку New SSH key.
  4. В поле Title введите любое имя ключа.
  5. Скопируйте в поле Key ваш SSH-ключ.
  6. Нажмите кнопку Add SSH key.

Создайте образ с помощью Jenkins

Сборка образа в Jenkins запускается автоматически после выполнения команды push в ветке master GitHub-репозитория.

  1. Склонируйте на ваш компьютер ответвление репозитория examples, которое вы создали во время подготовки к работе:

    git clone git@github.com:<логин на GitHub>/examples.git
    
  2. Внесите изменения в шаблоны Packer, находящиеся в директории jenkins-packer/packer/. Документацию шаблонов Packer можно найти на сайте разработчика. В параметрах image_family и source_image_family указываются семейства образов, которые будет собирать Jenkins. Подробнее о семействах см. Семейства образов.

  3. Внесите изменения в файл описания Pipeline для Jenkins Jenkinsfile, расположенный в корневой директории репозитория. Документацию Pipeline см. на сайте разработчика.

  4. Загрузите изменения на GitHub:

    git add -A
    git commit -m "Build update"
    git push
    
  5. Откройте административную панель Jenkins и проверьте состояние задачи.

  6. Если все настройки выполнены верно, то запустится сборка образов. Результат выполнения можно увидеть в логах сборки.

Примечание

При настройке задачи Jenkins в разделе GitHub Hook log возможно появление ошибки Polling has not run yet. В этом случае следует первый раз запустить сборку вручную.

После этого в разделе Образы сервиса Compute Cloud появятся три новых образа:

  • Debian — базовый образ с последними обновлениями.
  • Nginx — образ с веб-сервером nginx, базирующийся на образе Debian.
  • Django — образ с фреймворком Django, базирующийся на образе Debian.

Разверните образы

После того, как образы будут созданы, их можно использовать для создания виртуальных машин. Создайте тестовую инфраструктуру с помощью Terraform:

  1. В директории с ответвлением перейдите в директорию с файлами Terraform:

    cd examples/jenkins-packer/terraform
    
  2. Переименуйте файл terraform.tfvars_example:

    mv terraform.tfvars_example terraform.tfvars
    
  3. Заполните поля файла требуемыми значениями. См. также документацию Terraform и провайдера Yandex Cloud.

  4. Инициализируйте провайдера Terraform командой terraform init.

  5. Выполните команду terraform plan -var-file="terraform.tfvars". Проверьте созданную конфигурацию.

  6. Выполните команду terraform apply и подтвердите создание инфраструктуры, введя yes в терминале.

После этого будут созданы:

  1. Облачная сеть.
  2. Подсети во всех зонах доступности.
  3. Виртуальные машины из образов, созданных с помощью Packer. Виртуальные машины с nginx получат публичные IP-адреса. Все виртуальные машины будут подключены к подсетям.

Как удалить созданные ресурсы

Чтобы освободить ресурсы в каталоге:

  • Удалите созданные ВМ.
  • Удалите созданные образы.
  • Удалите сервисный аккаунт и файл <имя пользователя.json>.
  • Удалите сеть и подсеть.

Для удаления созданных с помощью Terraform используйте команду terraform destroy.

Была ли статья полезна?

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Настройте окружение
  • Создайте сервисный аккаунт
  • Создайте виртуальную машину с Jenkins
  • Установите Packer
  • Настройте Jenkins
  • Настройте задачу для Jenkins
  • Настройте GitHub-репозиторий
  • Включите Webhook
  • Добавьте на GitHub SSH-ключ
  • Создайте образ с помощью Jenkins
  • Разверните образы
  • Как удалить созданные ресурсы