Рубрики
Uncategorized

Многоразовый Windows VMS с бродяги

Нам нужно проверить наше программное обеспечение с различными версиями Windows: 7, 10, 10 LTSB («IoT Enterprise») …. Tagged с DevOps, Vagrant.

Нам нужно проверить наше программное обеспечение на различных версиях Windows: 7, 10, 10 LTSB («IoT Enterprise»). До сих пор мы использовали вручную, настроенные физические машины, выявленные через Дженкинс Узел/агент метка Анкет Первоначально это было легко работать, но было проблематичным:

  • Масштабируемость: статический набор машин, которые могут быть узким местом перед выпусками
  • Неудачный/отладка: нужно ждать, пока PR пройдет через конвейер, чтобы выяснить, что что-то не работает, а затем взять узел в автономном режиме отладки.
  • Воспроизводительность: ручная конфигурация подвержена ошибкам, люди вносят изменения в окружающую среду и т. Д.

Наш недавний успех с Приложение и Трэвис CI вдохновил нас на поиск чего -то более динамичного. Это часть начальной работы, которую мы проделали, перемещаясь на виртуальные машины Windows с Бродяга .

Windows VM

Документация Vagrant для Windows Guest VMS довольно хорошо.

Мы находимся в процессе оценки Windows 10 Enterprise LTSC (ОС, ранее известной как Windows 10 «IoT Enterprise»/LTSB), которая сопоставимо с Windows 10 Enterprise версией 1809/RS5. Мы установили его на Виртуальная коробка VM по имени win10_ltsc_2019 Анкет

Уинрм

Vagrant использует Окна Удаленное управление Управлять Windows VMS.

Внутри виртуальной машины убедитесь, что текущее сетевое соединение является «частным», иначе конфигурация WinRM не удастся:

Get-NetConnectionProfile
# Get "Name" value from output
Set-NetConnectionProfile -Name "NAME FROM ABOVE" -NetworkCategory Private

Проблемы с конфигурацией WINRM будут проявляться позже как команды, такие как Vagrant Resume висит с:

default: WinRM transport: negotiate

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

RDP/SSH

Включить удаленный рабочий стол для Vagrant RDP работать.

Для Vagrant SSH Для работы должен установить OpenSsh Server:

В любом случае вам также нужно:

Заниматься боксом

В этот момент гуру PowerShell, вероятно, направится прямо к обеспечению. С приложением Мы получили немного пробега из Шоколад , но наша Shell-Fu крайне неадекватна для полной автоматизации Windows.

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

Возможно, наиболее распространенным компонентом Windows является Visual Studio, которая имеет множество вариантов установки:

Как только ваше программное обеспечение будет установлено, работа с виртуальной машиной в качестве бродяги «коробка» является прямой. В случае Виртуальная коробка , мы упаковка виртуальная машина Для последующего повторного использования:

# Save the base image somewhere
vagrant package --base win10_ltsc_2019 --output /shared_folder/win10_ltsc_2019.box

# Elsewhere...
# Remove the box if it already exists
vagrant box remove win10_ltsc_2019
# Add the saved base image to list of available "boxes"
vagrant box add --name win10_ltsc_2019 /shared_folder/win10_ltsc_2019.box

Имейте в виду, что ничто из этого не является быстрым, поскольку он включает в себя изображения VM 5-15 ГБ (в зависимости от версии Windows и сколько вы устанавливаете). Это следует использовать для относительно «статической» конфигурации; Я не хотел бы связываться с этим каждый день или даже каждую неделю. Для вещей, которые часто меняются (например, ваше программное обеспечение), есть «общие папки».

Vagrantfile

С готовым изображением виртуальной машины, нам нужен Vagrantfile Чтобы все делало:

Vagrant.configure("2") do |config|
    config.vm.box = "win10_ltsc_2019"
    config.vm.guest = :windows
    config.vm.communicator = "winrm"
    # 3389 RDP
    config.vm.network "forwarded_port", guest: 3389, host: 3389
end

Запустить бродяга вверх :

==> default: Forwarding ports...
    default: 3389 (guest) => 3389 (host) (adapter 1)
    default: 5985 (guest) => 55985 (host) (adapter 1)
    default: 5986 (guest) => 55986 (host) (adapter 1)
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Mounting shared folders...
    default: /vagrant => /Users/XXX/nng.NETCore

Обратите внимание на последнюю строку. Каталог проектов на хосте ( /users/xxx/nng. Netcore ) доступен для виртуальной машины как «общая папка».

Порт 3389 RDP SO Vagrant RDP работает. Я добавил (очень запоздалый) Ответ на переполнение стека об этом:

$ vagrant rdp
==> default: Detecting RDP info...
    default: Address: 127.0.0.1:3389
    default: Username: vagrant

Точно так же Vagrant SSH :

Следующий

Это дает нам хорошее начало, которое достигает нескольких наших целей:

  • По требованию среда Windows
  • Воспроизводимый как на рабочих станциях разработчика, так и для строительства/тестирования

Но нам все еще нужно несколько улучшений, прежде чем мы сможем полностью мигрировать:

  • Общая автоматизация
    • Предыдущий проект имели сценарии PowerShell для установки/запуска нашего программного обеспечения, которое мы должны отслеживать или переписать
  • Интеграция в трубопровод Jenkins
  • Обеспечение
    • По правде говоря, окружающая среда довольно статична, поэтому поддержание изображений только для чтения виртуальных машин должно быть достаточно на данный момент
    • Это репо Имеет аккуратные сценарии и Vagrantfiles для работы с Windows и Docker

Оригинал: «https://dev.to/jeikabu/reusable-windows-vms-with-vagrant-2h5c»