Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Yandex Compute Cloud
  • Yandex Container Solution
    • Все руководства
    • Настройка синхронизации часов с помощью NTP
    • Автомасштабирование группы ВМ для обработки сообщений из очереди
    • Обновление группы ВМ под нагрузкой
    • Развертывание Remote Desktop Gateway
    • Начало работы с Packer
    • Передача логов с ВМ в Yandex Cloud Logging
    • Сборка образа ВМ с набором инфраструктурных инструментов с помощью Packer
    • Миграция в Yandex Cloud с помощью Хайстекс Акура
    • Защита от сбоев с помощью Хайстекс Акура
    • Резервное копирование ВМ с помощью Хайстекс Акура
    • Развертывание отказоустойчивой архитектуры с прерываемыми ВМ
    • Настройка отказоустойчивой архитектуры в Yandex Cloud
    • Создание триггера для бюджетов, который вызывает функцию для остановки ВМ
    • Создание триггеров, которые вызывают функции для остановки ВМ и отправки уведомлений в Telegram
    • Создание веб-приложения на Python с использованием фреймворка Flask
    • Создание SAP-программы в Yandex Cloud
    • Развертывание сервера Minecraft в Yandex Cloud
    • Автоматизация сборки образов с помощью Jenkins и Packer
    • Создание тестовых виртуальных машин через GitLab CI
    • Высокопроизводительные вычисления (HPC) на прерываемых ВМ
    • Настройка SFTP-сервера на Centos 7
    • Развертывание параллельной файловой системы GlusterFS в высокодоступном режиме
    • Развертывание параллельной файловой системы GlusterFS в высокопроизводительном режиме
    • Резервное копирование в Object Storage с помощью Bacula
    • Построение пайплайна CI/CD в GitLab с использованием serverless-продуктов
    • Реализация защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Check Point NGFW
    • Сегментация облачной инфраструктуры с помощью решения Check Point Next-Generation Firewall
    • Настройка защищенного туннеля GRE поверх IPsec
    • Создание бастионного хоста
    • Реализация отказоустойчивых сценариев для сетевых виртуальных машин
    • Создание туннеля между двумя подсетями при помощи OpenVPN Access Server
    • Создание внешней таблицы на базе таблицы из бакета Object Storage с помощью конфигурационного файла
    • Настройка сетевой связности между подсетями BareMetal и Virtual Private Cloud
    • Работа со снапшотами в Managed Service for Kubernetes
    • Запуск языковой модели DeepSeek-R1 в кластере GPU
    • Запуск библиотеки vLLM с языковой моделью Gemma 3 на ВМ с GPU
    • Доставка USB-устройств на виртуальную машину или сервер BareMetal
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

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

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

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

На основе заданной конфигурации Packer создает образы дисков виртуальной машины в сервисе Yandex Compute Cloud. Jenkins позволяет построить процесс непрерывной интеграции (Continuous integration, CI).

Образы можно использовать при создании облачной инфраструктуры, например, с помощью 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. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

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

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

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

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

  • Плата за постоянно запущенные ВМ (см. тарифы Compute Cloud).
  • Плата за хранение созданных образов (см. тарифы 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

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

Чтобы создать ВМ с Jenkins:

  1. В консоли управления выберите каталог, в котором будет создана ВМ.

  2. В списке сервисов выберите Compute Cloud.

  3. На панели слева выберите Виртуальные машины.

  4. Нажмите кнопку Создать виртуальную машину.

  5. В блоке Образ загрузочного диска перейдите на вкладку Marketplace, нажмите кнопку Показать все продукты Marketplace и выберите образ Jenkins.

    Примечание

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

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

  7. В блоке Диски и файловые хранилища задайте размер загрузочного диска 15 ГБ.

  8. В блоке Вычислительные ресурсы перейдите на вкладку Своя конфигурация и укажите параметры:

    • Платформа — Intel Ice Lake.
    • vCPU — 2.
    • Гарантированная доля vCPU — 20%.
    • RAM — 2 ГБ.
  9. В блоке Сетевые настройки:

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

      • У каждой сети должна быть как минимум одна подсеть. Если подсети нет, создайте ее, выбрав Создать подсеть.

      • Если сети нет, нажмите Создать сеть и создайте ее:

        • В открывшемся окне укажите имя сети и выберите каталог, в котором она будет создана.
        • (Опционально) Выберите опцию Создать подсети, чтобы автоматически создать подсети во всех зонах доступности.
        • Нажмите Создать сеть.
    • В поле Публичный IP-адрес выберите Автоматически, чтобы назначить виртуальной машине случайный внешний IP-адрес из пула Yandex Cloud, или выберите статический адрес из списка, если вы зарезервировали его заранее.

  10. В блоке Доступ выберите SSH-ключ и укажите данные для доступа к ВМ:

    • В поле Логин введите имя пользователя, который будет создан на виртуальной машине, например yc-user.

      Внимание

      Не используйте логин root или другие имена, зарезервированные операционной системой. Для выполнения операций, требующих прав суперпользователя, используйте команду sudo.

    • В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.

      Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:

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

      SSH-ключ будет добавлен в ваш профиль пользователя организации.

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

  11. В блоке Общая информация задайте имя ВМ: jenkins-tutorial.

  12. Нажмите кнопку Создать ВМ.

Установите PackerУстановите Packer

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

Примечание

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

  1. Скачайте дистрибутив Packer для Linux. Также вы можете скачать дистрибутив Packer для вашей платформы из зеркала.

  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. Настройте плагин Yandex Compute Builder:

    1. Создайте файл config.pkr.hcl в директории /opt/yandex-packer/ со следующим содержанием:

      packer {
        required_plugins {
          yandex = {
            version = ">= 1.1.2"
            source  = "github.com/hashicorp/yandex"
          }
        }
      }
      
    2. Установите плагин:

      packer init <путь_к_файлу_config.pkr.hcl>
      

      Результат:

      Installed plugin github.com/hashicorp/yandex v1.1.2 in ...
      
  6. Все действия системы Jenkins будут выполняться от имени пользователя jenkins. Дайте этому пользователю права на запуск Packer:

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

Настройте JenkinsНастройте 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

Чтобы 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 укажите Jenkinsfile.
  16. Оставьте остальные поля без изменений и нажмите Сохранить.

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

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

Включите WebhookВключите Webhook

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

Добавьте на GitHub SSH-ключДобавьте на 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

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

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

    git clone https://github.com/<логин_на_GitHub>/yc-marketplace-vm-image-packer.git
    
  2. Внесите изменения в шаблоны 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.

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

Предыдущая
Развертывание сервера Minecraft в Yandex Cloud
Следующая
Создание тестовых виртуальных машин через GitLab CI
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»