Нам нужно проверить наше программное обеспечение на различных версиях 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:
- Windows 10 RS3/1709, а затем — это необязательный компонент
- Для версий Ealier, включая Windows 10 LTSB 2016 (RS1), https://github.com/powershell/win32-openssh/releases
В любом случае вам также нужно:
- Добавить бродячий открытый ключ к
~/.ssh/adured_keys(См. это так ) - Начните автоматически: SSHD начинать:
SC Config SSHD
Заниматься боксом
В этот момент гуру PowerShell, вероятно, направится прямо к обеспечению. С приложением Мы получили немного пробега из Шоколад , но наша Shell-Fu крайне неадекватна для полной автоматизации Windows.
Для этого упражнения мы собираемся вручную установить программное обеспечение. Как только мы создали среду по своему вкусу, мы хотим сохранить ее для последующего повторного использования в качестве среды развития, строительства узлов и т. Д.
Возможно, наиболее распространенным компонентом Windows является Visual Studio, которая имеет множество вариантов установки:
- Полная визуальная студия
- «BuildTools» (оптимизированная версия VS)
- Visual Studio Container
Как только ваше программное обеспечение будет установлено, работа с виртуальной машиной в качестве бродяги «коробка» является прямой. В случае Виртуальная коробка , мы упаковка виртуальная машина Для последующего повторного использования:
# 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»