Собираем образ виртуальной машины с PostgreSQL и платформой 1С. Цикл "Многопоточный CI для 1С c Packer, Vagrant и Jenkins", часть 2

13.03.20

Разработка - DevOps и автоматизация разработки

Автоматизируем установку и конфигурирование Linux, PostgreSQL, 1C, Apache, Java с возможностью выбора версий дистрибутивов. Упаковываем результат в образ виртуальной машины.

 

Распределение задач между Packer и Vagrant

Как работать с Packer?

Раздел переменных

Раздел "сборщиков". Выделение ресурсов виртуальной машине.

Установка операционной системы

Принцип разделения команд в блоке provisioners

Разрешаем административные действия без ввода пароля

Графическое окружение

Настройка машины как узла CI

Инструменты для конфигурирования и разработки

Сетевые утилиты

Среды исполнения Java и OneScript

Дополнения VirtualBox

Расположение дистрибутивов 1С и PostgreSQL

Установка платформы 1С

Установка PostgreSQL

Установка Apache

Упаковка виртуальной машины в образ для Vagrant

Управляющие командные файлы

Если сборка завершилась аварийно

Проверка результата

Другие части цикла "Многопоточный CI-контур для 1С":

1.  Описание системы и обзор инструментария

3.  Разворачиваем узлы CI через Vagrant, строим сеть из виртуальных машин

4.  Jenkins: конфигурируем сервер и подключаем к нему виртуальные машины

5. Пайплайны Jenkins - программирование и настройка. Загружаемые модули

 

 

В прошлой части мы рассмотрели возможности Packer и Vagrant  для создания образов виртуальных машин, их запуска и конфигурирования, а также установили их на хостовой машине. Теперь мы перейдем к практике использования этих инструментов, создадим с помощью них образ виртуальной машины и проверим её запуск. При этом разработаем механизмы, позволяющие заменять версии платформы 1С и PostgreSQL в наших сборках, а также переключаться между двумя версиями операционной системы (в нашем случае это Ubuntu 19.04 и 19.10).

Данную публикацию можно использовать не только как руководство по сборке образов виртуальных машин для последующего их включения в состав CI-контура, но и как инструкцию по автоматической установке необходимого программного обеспечения для работы с 1С на последних релизах Linux Ubuntu. Более того, если Вы по какой-то причине не захотите применять Packer и Vagrant для автоматизации сборок, то развернуть CI по прежнему можно через ручную настройку набора физических или виртуальных машин, а приведённые здесь и в следующей теме скрипты позволят упростить и унифицировать этот процесс.

 

Распределение задач между Packer и Vagrant      

 

Packer и Vagrant являются во многом взаимозаменяемыми инструментами. Почти всё, что мы можем сделать на этапе сборки образа виртуальной машины, мы также можем сделать и во время её первого запуска. Таким образом вместо сборки образа можно было бы взять образ с чистой операционной системой из облака HashiCorp и настраивать всё необходимое в момент первого запуска виртуальной машины через Vagrant:

               

 

Точно также и наоборот, можно все необходимые настройки делать при сборке образа через Packer, а вместо Vagrant использовать несколько простых команд, предоставляемых интерфейсом командной строки гипервизора.

Вопрос лишь в оптимальности распределения процесса конфигурирования между этими двумя инструментами. Ведь если абсолютно все настройки делать с помощью Packer, то потребность в малейшем изменении конфигурации потребует длительной пересборки образа. Также при этом потребуется вносить изменения в конфигурационные файлы, отвечающие за сборку образа. А ведь они по хорошему должны отвечать за более фундаментальные вещи, чем установка имени хоста или запуск агента Jenkins, который мы вообще можем в один прекрасный момент захотеть заменить на Bamboo или Gitlab CI. С другой стороны если вынести все настройки на сторону Vagrant, то каждый запуск новой виртуальной машины, каждое пересоздание CI-узла будет занимать огромное количество времени.

Таким образом, конфигурирование и установку программ стоит вынести в Packer если установка или конфигурация удовлетворяет следующим условиям:

  • выполняется долго и необходима во всех виртуальных машинах
  • необходима в большинстве машин и при этом программу легко отключить (или конфигурацию легко изменить) на тех машинах, на которых она не нужна, либо такое отключение программы (или изменение конфигурации) вообще не обязательно.

Конфигурирование стоит вынести в Vagrant при выполнении одного из следующих условий:

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

Рассмотрим необходимые нам этапы конфигурирования узлов CI-сервера и будем сразу же распределять их по зонам ответственности между Packer и Vagrant исходя из критериев, приведенных выше.

Через Packer будем выполнять установку и конфигурирование:

1)  Операционной системы и ее графического окружения.

2)  Инструментов, упрощающих разработку, отладку и редактирование файлов. В нашем случае это будет эмулятор консоли Terminator, редактор Visual Studio Code и OneScript  (эти инструменты Вы можете заменить по своему вкусу).

3)  JVM или JDK, которые необходимы для работы узлов Jenkins.

4)  Системных утилит, позволяющих нашим узлам нормально работать в сети совместно с Windows и при необходимости найти проблему, если что-то пойдет не так. Это будут сервисы Avahi , Samba и утилита traceroute.

5) Гостевые дополнения гипервизора - Virtual Box Guest Additions. Их обновления требуются очень редко, поэтому можно сразу упаковать их в образ машины.

6) Запретить гашение экрана и отключить энергосбережение. Это необходимо, чтобы машина не "засыпала" в периоды простоя, становясь недоступной для управления с мастер-узла на хостовой машине.

7) Настроить автологон. Мы будем использовать систему для CI, а не для пользовательских нужд и после запуска машин логиниться в них будет некому. При нужно, чтобы машина становилась доступной для эмуляции пользовательских действий сразу после запуска. Также через автологон впоследствии будет решаться задача автозапуска агентов CI-сервера.

8) Установить PostgreSQL сконфигурировать его для работы с 1С. В описании этого процесса обратите внимание на особенности неинтерактивной установки и настройки логов.

9) Установить саму платформу 1С. В автоматической установке 1С для целей CI тоже будет ряд тонкостей, обратите на них внимание.

10) Установить Apache и при необхо димости выполнить минимальную конфигурацию (в нашем случае для работы с SSL).

 

Любые изменение, связанные с этими этапами, потребуют пересборки виртуальной машины. Сборка хоть и будет выполняться автоматически, но процесс может занять длительное время - от 40 до 60 минут.

 

Остальные действия будут выполняться через Vagrant.

Только при первом запуске машины потребуется выполнять:

1)  Настройку сети и имени хоста. Наши машины в момент развертывания будут "клонами" исходного образа. Но для обеспечения возможности работать с ними индивидуально и возможности их взаимодействия друг с другом необходимо добавить им индивидуальности. Делать это будем за счет назначения им разных IP адресов и имен хостов.

2) Адаптацию настроек сервера 1С под новое имя хоста и копирование файла nethasp.ini с хостовой машины.

3) Настройку автозапуска агента Jenkins, чтобы наша машина фу нкционировала как узел CI-сервера.

При каждом запуске машины через Vagrant нужно выполнить:

1)  Выделение системных ресурсов виртуальной машине.

2)  Настройку общих каталогов

3)  Установку приемлемого разрешения экрана для работы с GUI и снятия скриншотов.

4)  Запуск агента Jenkins

 

Таким образом первый запуск через Vagrant будет происходить несколько дольше (5-10 минут) чем последующие (1 - 2 минуты).

На рисунке ниже этот же процесс отображен схематично. При этом сделано небольшое допущение. Выделение системных ресурсов для виртуальной машины отнесено к этапу её создания, хотя на самом деле ресурсами при необходимости можно управлять при каждом её запуске.

 

Здесь мы разделяем установку операционной системы и графического интерфейса , так как за основу мы будем брать легковесный Ubuntu Server, который не имеет GUI и множества программ, ориентированных на десктопы. Уже затем мы будем устанавливать пакеты для работы с графикой. Это позволит значительно сократить занимаемое операционной системой место на дисках и не устанавливать лишние пакеты программ. А значит можно будет создавать больше виртуальных машин на одном сервере или оставить дисковое пространство для выполнения других задач.

Порядок исполнения этапов сборки виртуальной машины, отображенных на схеме, можно менять. Но рекомендую устанавливать программы, упрощающие администрирование и работу с кодом, как можно раньше. В нашем случае это эмулятор консоли Terminator и Visual Studio Code (вы можете выбрать для себя другие инструменты). Дело в том, что сразу после старта виртуальной машины мы можем с ней взаимодействовать - эту возможность даёт нам гипервизор через свой графический интерфейс. В то же время на любом из следующих шагов конфигурирования могут возникнуть ошибки. Если в системе будет установлен редактор кода и эмулятор терминала, к которому Вы привыкли, то поиск и исправление причин ошибок будет происходить быстрее.

По той же причине сразу после этого имеет смысл установить дополнения гипервизора (в нашем случае это VirtualBox Guest Additions). Поставить их всё равно потребуется, но будет проще работать с системой, если она будет более отзывчивой и способной к удобному взаимодействию с хостовой машиной.

 

Включите виртуализацию на хостовой машине  

На хостовой машине, в которой работает гипервизор, должен быть доступен функционал виртуализации. На физических машинах это делается в BIOS или UEFI. В большинстве случаев в этом нет необходимости, так как обычно это уже сделано производителем.

Если же в качестве хоста у вас выступает виртуальная машина работающая под управлением гипервизора первого типа, то в этом гипервизоре должна быть включена вложенная виртуализация. Если этого не сделать, то любой гипервизор второго типа, будь то VMWare, Hyper-V или VirtualBox при попытке запустить виртуальную машину будет выдавать ошибку следующего вида:

 

Как работать с Packer?      

 

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

Конфигурация Packer задается в виде JSON-файла и содержит следующие базовые блоки:

  • Установка значений переменных, определенных пользователем.  Их значения можно задать либо константами, либо загрузить из переменных окружения (environment variables).

 

  • Указание параметров сборщиков : определение выделяемых хостовой машиной системных ресурсов, других основных настроек виртуальной машины,  указание потока символов, ввод которых с клавиатуры необходимо сэмулировать при запуске машины.

 

  • Блок provisioners (поставщиков). Провизионеры - это общее понятие, объединяющее в себе множество инструментов, с которыми может взаимодействовать Packer и Vagrant. В данном блоке определяется последовательность действий, которая будет выполняться в гостевой машине, и за счет какого программного обеспечения будут выполняться эти действия. Можно подключать к процессу настройки Ansible, Chef, PowerShell и т.д. В простейшем случае здесь могут быть обычные shell-команды. Именно такой простейший случай мы и будем рассматривать.

 

  • Пост-обработчики. Здесь указывается с помощью какого приложения будет производиться постобработка виртуальной машины и дается инструкция этому приложению, что именно нужно сделать. В нашем случае на этом этапе может происходить упаковка настроенной виртуальной машины в так называемые "боксы" (boxes). Результатом будет образ виртуальной машины, из которого затем можно будет разворачивать любое количество машин-клонов.

 

В сети можно встретить множество примеров конфигурационных файлов для Packer. Можно найти даже очень универсальные, рассчитанные на переключение между разными гипервизорами (Hyper-V, VirtualBox, VMWare), и расчитанные на применение Chef или Ansible. Хотел бы поделиться с Вами ссылкой на богатый репозиторий, с которого я начинал изучение этой темы. Он позволяет разворачивать системы, аналогичные тем, которые мы рассматриваем, но на базе Windows-машин: https://github.com/joefitzgerald/packer-windows. Для новых версий ОС - Windows Server 2016 и Windows Server 2019 код этого репозитория нуждается в небольшой адаптации.

Конфигурационный файл, который мы создадим, будет очень простым. Он "заточен" под VirtualBox и выполнение shell-команд. Обратной стороной этой простоты будет необходимость немного его адаптировать при желании использовать другой гипервизор или заменить обычные shell-команды на Ansible или его аналог.

И последнее замечание, перед тем как перейти непосредственно к созданию файла для Packer. При сборке обязательно должен быть доступен интернет и связь должна быть стабильной. Далеко не везде в используемых скриптах учитывается возможность возникновения сбоя установки из-за разрыва интернет-соединения. Как правило в случае ошибок в загрузке пакетов вся сборка остановится, но в ряде случаев этого может не произойти. Поэтому убедитесь в стабильности канала.

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

Раздел переменных              

 

Переменные в JSON-файле Packer служат для удобства и гибкости конфигурирования. Находятся они в блоке variables.

 

"variables": {

   

    "имя_переменной_1": "{{env `имя_переменной_окружения_1`}}",

    "имя_переменной_2": "константное_значение_переменной_2",

   

  },

 

 

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

В конфигурационном файле Packer также можно использовать переменные окружения (переменные среды). Но делать это можно только в разделе пользовательских переменных. Это ограничение введено специально. Оно позволяет точно знать, где задаются используемые в файле переменные и из чего они формируются. Таким образом, чтобы использовать в файле переменную окружения её предварительно необходимо записать в пользовательскую переменную.

По началу кажется, что это только лишний раз раздувает файл. Но правильность такого подхода чувствуется, когда приходится отлаживать процесс сборки или когда спустя месяц-два приходится вносить правки в конфигурационный файл. Благодаря такому подходу при отладке можно сосредоточиться только на самом конфигурационном файле, а не вносить изменения в разные внешние файлы и искать "где же установлена та самая переменная окружения".

Обращаться к значениям пользовательских переменных в дальнейшем производится через такое выражение:

  {{user `имя_переменной`}}

Везде, где Packer встретит подобное выражение, он заменит его на значение переменной с соответствующим именем.

Все пользовательские переменные мы будем устанавливать из переменных окружения.  Использование переменных окружения, передаваемых в пользовательские переменные Packer, позволит нам сохраняя неизменным сам конфигурационный файл создавать с его помощью образы машин содержащие разные версии операционной системы, платформы 1С и СУБД.  Хотя, как уже было упомянуто выше, во время отладки имеет смысл задавать значения переменных прямо в JSON-файле. Обратиться к переменной окружения можно используя выражение :

 {{env `имя_переменной`}}

Общий список переменных можно увидеть в файле, ссылка на который дана выше. Но рассматривать их вне контекста пожалуй не имеет смысла. Поэтому сразу перейдем к следующему разделу, где будет множество выражений вида {{user `имя_переменной`}}.

 

Раздел "сборщиков". Выделение ресурсов виртуальной машине.  

 

В блоке "builders" зададим настройки только для одного типа сборщиков. Это тип virtualbox-iso который обеспечивает установку гостевой машины через VirtualBox из iso-файла с дистрибутивом операционной системы.

"builders": [

   {

     "type": "virtualbox-iso",

     "iso_url": "./iso/ubuntu-{{user `version_of_vm_os_with_dot`}}-live-server-amd64.iso",

     "iso_checksum_type": "{{user `iso_checksum_type`}}",

     "iso_checksum": "{{user `iso_checksum`}}",

     "headless": false,

     "communicator": "ssh",

     "ssh_username": "{{user `ssh_username`}}",

     "ssh_password": "{{user `ssh_password`}}",

     "ssh_pty" : "true",

     "ssh_timeout": "15m",

     "shutdown_command": "{{user `shutdown_command`}}",

     "shutdown_timeout": "360m",

     "guest_os_type": "Ubuntu_64",

     "vm_name": "{{user `vm_name`}}",

     "disk_size": "{{user `disk_size_mb`}}",

     "http_directory": "http_distr",

     "floppy_files": [],

     "boot_wait": "1m",

     "boot_command": ["{{user `boot_command`}}"],

     "guest_additions_mode": "upload",

     "guest_additions_path": "~/VBoxGuestAdditions.iso",

     "vboxmanage": [

       [ "modifyvm", "{{.Name}}", "--memory", "2048" ],

       [ "modifyvm", "{{.Name}}", "--vram", "128" ],

       [ "modifyvm", "{{.Name}}", "--cpus", "2" ],

       [ "modifyvm", "{{.Name}}", "--nic1", "nat" ],

       [ "modifyvm", "{{.Name}}", "--clipboard", "bidirectional" ],

       [ "modifyvm", "{{.Name}}", "--draganddrop", "bidirectional" ],

       [ "modifyvm", "{{.Name}}", "--accelerate3d", "on" ],

       [ "modifyvm", "{{.Name}}", "--graphicscontroller", "vboxsvga" ]

Вступайте в нашу телеграмм-группу Инфостарт

Packer Vagrant CI Ubuntu Linux PostgreSQL

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

DevOps и автоматизация разработки Программист 1С 8.3 1С:Управление торговлей 11 Россия Бесплатно (free)

Полный цикл разработки расширения 1С в пакетном режиме DESIGNER: выгрузка, правка, гейт компиляции, применение к базе и контроль результата — без единого клика в конфигураторе. Разбираю семь мин, на которых подорвался лично: почему LoadConfigFromFiles возвращает нулевой код на битом модуле, зачем нужен Xvfb, как pgrep находит сам себя, кто держит базу и как отличить работающий сеанс от забытого, и почему после рестарта сервера база остаётся закрытой. Платформа 8.3.27, УТ 11.5, сервер на Linux.

вчера в 10:30    601    YA_2159986692    3    

6

Интеграция Нейросети DevOps и автоматизация разработки Распознавание документов и образов 1C:ERP 1С:КА 1С:УНФ Химическая промышленность Горнодобывающая промышленность Металлургическая промышленность Россия Платные (руб)

От чертежа до себестоимости — за минуты, а не дни. ИИ-Технолог автоматически распознаёт чертежи и техническую документацию (включая фото, сканы, PDF, Excel), рассчитывает нормы времени, формирует технологические маршруты, оценивает возможность изготовления и точную себестоимость. Интеграция с 1С (ERP, MES, КА, УНФ) и отраслевыми нормативами (ГОСТы).

366000 руб.

18.06.2026    1279    0    2    

0

DevOps и автоматизация разработки Программист 1С:Предприятие 8 Бесплатно (free)

Технический разбор нашего конвейера разработки на 1С: песочницы, Gitea, сборка, проверки и CLI backend'ы. Основной CLI - cursor; также поддерживаются codex, claude и экспериментальный mimo.

16.06.2026    5198    Aleksandr    5    

8

DevOps и автоматизация разработки Программист Бесплатно (free)

Использование современных DevOps-практик в разработке и сопровождении активно внедряется в стек 1С. Мы в MagnitTech активно используем Docker, в том числе и для контейнеризации 1С-приложений, что позволяет ускорить развертывание, улучшить отказоустойчивость и упростить масштабирование. Рассмотрим лучшие практики создания Dockerfile и нюансы работы в контейнере для сервера приложений и сервера взаимодействия 1С – с какими сложностями мы столкнулись и как их преодолели.

26.05.2026    2999    daniloffartur    1    

5

DevOps и автоматизация разработки Программист Бесплатно (free)

Хватит ограничивать себя родным и уютным стеком 1С. Пора расширять кругозор и осваивать смежные стеки! Разберемся, как Docker может упростить жизнь одинэснику: от сборки и тестирования 1С до запуска инфраструктуры и автоматизации CI/CD, причем быстро, воспроизводимо и без лишнего мусора в системе.

08.05.2026    6047    sleemp    81    

37

DevOps и автоматизация разработки Программист Бесплатно (free)

Статья о том, как команда 1С смогла перейти от ручного управления к полноценной автоматизации, внедрив практики DevOps в среде 1С. Разбираем проблемы, которые мешали развиваться: медленный процесс командной разработки, отсутствие тестирования, длительные релизы, хаос с хотфиксами и ручные действия на каждом этапе. Объясняем, как внедренные решения – GitLab, Jenkins, автоматизированные пайплайны, тестовое окружение, стандарты разработки и тестирования – позволили масштабировать команду и повысить стабильность поставок.

14.04.2026    2579    Sicuro    4    

3

DevOps и автоматизация разработки Мониторинг Системный администратор Программист Бесплатно (free)

Практический гайд по применению DevOps-практик в 1С-инфраструктуре: контейнеризация СУБД, инфраструктура как код, мониторинг с алертами, автоматические бэкапы. Разбираю подводные камни и делюсь готовыми конфигами. Для 1С-разработчиков, которые хотят автоматизировать рутину и приблизиться к продакшен-среде.

06.04.2026    14449    vladimir-89    12    

33
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 28.02.20 08:13
(0) материал как всегда на высоте!
2. Vladimir Litvinenko 2944 28.02.20 09:31 Сейчас в теме
(1) Юрий, спасибо за оценку!

Если будете применять и возникнут сложности - напишите. Сейчас все эти механизмы отработаны только на трёх физических машинах. Могут быть какие-то специфические проблемы. Хотя это скорее к развёртыванию через Vagrant относится и настройке сети, в плане Packer главное через boot_command пробраться ;))
YPermitin; +1 Ответить
3. пользователь 28.02.20 10:07
(2) думаю, что поле экспериментов очень большое. Нало время, чтобы в это " вкурить" и набить шишек. Но обратная связь будет :)
4. check2 411 28.02.20 10:16 Сейчас в теме
Владимир, какой у Вас стаж работы с Linux? Просто интересно. У меня маленький - год с небольшим. Начал плотно заниматься ubunto'й где то с конца 2018 года. Думал, что много уже умею, но беглое прочтение показалось для меня тяжёлым, некоторые фрагменты на уровне китайской грамоты :). Понимаю, что опыт, который получен мною более чем за год работы с этой осью более чем недостаточен для лёгкого понимания материала, в качестве которого не сомневаюсь ни разу. Но для неподготовленных будет совсем тяжело... Ну ладно, это лирика.
У меня вопрос почему именно Ubuntu Server, а потом к ней + Гном? На сайте убунты есть три варианта дистрибутива: сервер, деск-лайт и деск-фулл. Почему не взяли второй вариант? Я вот его например его, в основном и использую. И даже вариант деск-фулл может установить минимум к графической оболочке (он после установки просто сносит ненужные пакеты)
И ещё вопрос У Вас в статье акцентировано внимание на блокировки отключения дисплея. Что будет если пропустить этот шаг? Почему спрашиваю, сам неделю назад, развернул на Убунте сервер тестирования на базе VA. Скрины делаются, тесты гоняются, не работает лишь Sikullix, но вроде как и не должен был. Причём всё это работает успешно при включенной заставке, и погашенном экране. НО я поднимал на убунте xRDP. Т.е. я просто один раз логинюсь и отключаю RDP… Вы так не пробовали?
ЗЫ некоторые картинки не видны в статье... см. снимок ниже
Прикрепленные файлы:
5. Vladimir Litvinenko 2944 28.02.20 11:03 Сейчас в теме
(4)
какой у Вас стаж работы с Linux? Просто интересно. У меня маленький - год с небольшим.

Примерно полгода использую для построения CI. Год назад ещё писал, что побаиваюсь его )) Но "жизнь заставила" )) Точнее отсутствие выделенных виртуальных серверов достаточной мощности, которые ранее позволяли через сеансы RDP запуск узлов Jenkins делать. Плюс хотелось добиться независимости от "облаков", где бы они не находились, переносимости всех механизмов между маломощными машинами и сделать описание инфраструктуры для CI именно через код.

Также очень помогли материалы Кирилла Семаева, замечательный преподаватель, посмотрите, пожалуйста, его видео, они всё делают проще )) https://www.youtube.com/user/itsemaev

почему именно Ubuntu Server, а потом к ней + Гном?

Причины выбора таких инструментов рассматривались в первой части: https://infostart.ru/public/1198035/
Главная причина - доступность более широкому кругу специалистов. По той же причине например батники используются - они большинству понятны. И мне тоже их проще править и понимать.

сервер, деск-лайт и деск-фулл. Почему не взяли второй вариант?

Да просто не рассматривал его. Взял самый легкий вариант и поставил всё по минимуму. Рассматриваемые механизмы не идеальны и есть много способов их улучшения. В статье даже есть рекомендация LXDE использовать. Надеялся даже вообще без GUI обойтись для операций с хранилищем, но оказалось, что Конфигуратор требует GUI даже при работе через CLI.

Вас в статье акцентировано внимание на блокировки отключения дисплея. Что будет если пропустить этот шаг? Почему спрашиваю, сам неделю назад, развернул на Убунте сервер тестирования на базе VA. Скрины делаются, тесты гоняются, не работает лишь Sikullix, но вроде как и не должен был. Причём всё это работает успешно при включенной заставке, и погашенном экране. НО я поднимал на убунте xRDP.

Думаю здесь ключевой момент - именно RDP. Почему вместо RDP в этот раз используется набор отдельных машин тоже в первой части постарался рассмотреть. Но ничто не мешает его использовать и даже с большими плюсами для скорости выполнения сценариев. С очисткой ресурсов при многопоточном тестировании и заменой ПО по желанию - уже будет сложнее. По крайней мере мне так показалось, когда пробовал.

некоторые картинки не видны в статье...

Проверьте пожалуйста с другого устройства. Если это так, то напишу в поддержку. У меня просматривается с телефона и двух машин. Картинка, которая у Вас не подгрузилась - это гифка, может быть по этому? Вот прямая ссылка: https://infostart.ru/upload/iblock/35c/35c3018cbd864a6348432666a63ff5c4.gif
Gif-анимации не запрещены в браузере?
6. check2 411 28.02.20 12:59 Сейчас в теме
(5)
но оказалось, что Конфигуратор требует GUI даже при работе через CLI.

Неожиданно, что саппорт говорит на этот счёт?

(5)
Почему вместо RDP в этот раз используется набор отдельных машин тоже в первой части постарался рассмотреть.
Наверное вы не поняли, я имел ввиду, что у меня в сеансе так же висит runner, как я понял у Jenkins он свой, но так же как и GL-runner позволяет запускать под пользователем, либо как службу. Вот первый вариант я и использую...

(5)
С очисткой ресурсов при многопоточном тестировании и заменой ПО по желанию - уже будет сложнее.

Я не знаю, фича это самого gitlab'a, либо runner'a но многопоточность с одним раннером у меня получилась только если разные проекты... Т.е. один runner несколько проектов одновременно может обслуживать, а вот сборки (в данном случае речь о тестировании VA) в пределах одного проекта не получается. Коммиты на обработку выстраиваются в очередь. Однако, если для одной убунты запустить 2 RDP под разными УЗ, то можно запустить 2 раннера, и тогда 2 комита последовательных будут обрабатываться на одной машине... Главное, чтобы ресурсов хватило, мы когда виртуалку размещали специально не выбирали мощную, чтобы тестирование проходило в условиях приближенных к реальным пользователям.

(5)
Проверьте пожалуйста с другого устройства.

Гифку к ответу - вижу без проблем, и другие виду в статье. Пробовал другой браузер IE тоже самое
Вот пример с другого компа Linux FF
Прикрепленные файлы:
Vladimir Litvinenko; +1 Ответить
8. Vladimir Litvinenko 2944 28.02.20 17:27 Сейчас в теме
(6)
некоторые картинки не видны в статье...
Пробовал другой браузер IE тоже самое

Спасибо большое за найденную ошибку с картинками! Удалось воспроизвести на Firefox. Это рудименты, оставшиеся от переноса из Google Docs - ссылки на несуществующие картинки в тегах <img>. Очистил от них публикацию.

Я не знаю, фича это самого gitlab'a, либо runner'a но многопоточность с одним раннером у меня получилась только если разные проекты... Т.е. один runner несколько проектов одновременно может обслуживать, а вот сборки (в данном случае речь о тестировании VA) в пределах одного проекта не получается.

К сожалению не могу подсказать по функциональности Gitlab CI, пока только думаю над тем, чтобы начать его изучать (уж очень популярен и по отзывам хорош).

С Jenkins единственные проблемы - это конкуренция за GUI и активное окно (при работе в одном сеансе) и нарушение стабильности связи между тест-менеджером и тест-клиентом (при работе на одной машине).

При наличии нескольких сеансов RDP конкуренции за GUI не возникает. Раньше, когда разворачивал механизмы на Windows получалось настраивать работу в двух сеансах одновременно и ошибки возникали редко. Да и в телеграм канале https://t.me/testspro1c читал, что у коллег получалось с RDP так же делать и с большим количеством сеансов. Сеансы RDP конечно при этом должны быть разными и должен быть настроен интерактивный запуск агента Jenkins при логоне, чтобы взаимодействие с рабочим столом было и экран не гасился.

Один узел Jenkins (процесс) с несколькими сборщиками (потоками) также вполне хорошо справлялся с несколькими задачами (может быть их можно назвать и разными проектами). При условии что только одна из этих задач приводит к открытию окон. То есть на одном узле (одним процессом) можно одновременно выполнять сценарное тестирование и выгружать конфигурацию в git. Но для каждой задачи будет создан свой поток (сборщик).

но так же как и GL-runner позволяет запускать под пользователем, либо как службу. Вот первый вариант я и использую..

Да, Jenkins аналогично должен работать. Запуск должен выполняться под подльзователем - через автологон или другой аналогичный способ запуска. Здесь можно спокойно применить как несколько сеансов RDP, в каждом из которых запускается агент (c Jenkins это получается), так и разные виртуальные машины.


Просто если я в виртуальных машинах не запрещаю блокирование экрана, то либо тесты отваливаются, либо в случае ошибок скриншот делается с экраном блокировки, а не с окнами, в которых возникла ошибка тестирования. Поэтому много внимания в статье уделил настройки постоянной доступности рабочего стола - чтобы экран не гас и не блокировался.

PS: Надеюсь не запутал и говорю о том, о чём Вы спросили )) Просто при работе с другим сервером CI действительно есть риск не понять в чём сложность заключается.
11. check2 411 29.02.20 20:45 Сейчас в теме
(8)
нарушение стабильности связи между тест-менеджером и тест-клиентом (при работе на одной машине).

Наверное никто от такого не застрахован.

(8)
Надеюсь не запутал и говорю о том, о чём Вы спросили ))

Нет не запутали :)

Спасибо за ответы!
7. Pr-Mex 187 28.02.20 14:47 Сейчас в теме
Как обычно очень подробно и понятно. Спасибо!
Vladimir Litvinenko; YPermitin; +2 Ответить
9. pumbaE 28.02.20 18:01 Сейчас в теме
Давно пользуюсь готовыми шаблонами от мастеров https://github.com/chef/bento/tree/master/packer_templates
10. Vladimir Litvinenko 2944 28.02.20 18:16 Сейчас в теме
(9) Буду рад внести изменения в репозиторий со следующим коммитом, если есть идеи как улучшить текущий шаблон для Packer. У меня вообще получилось так, что сначала для Windows Server 2019 всё написал. А потом, когда увидел сколько ресурсов на это надо и что лишился переносимости CI, переписал на основе этих шаблонов механизмы под Ubuntu Server. Указанный репозиторий тоже изучу, в нём есть пример для Ubuntu 19.10.
Для отправки сообщения требуется регистрация/авторизация