Как я автоматизировал настройку своего ноутбука Windows для разработчиков?

В этой статье я рассказал о своем последнем проекте: как я создал сценарий для автоматизации настройки моей машины разработчика с помощью Boxstarter, Chocolatey, Winget и PowerShell… и как я узнал несколько вещей на этом пути.

Контекст

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

Дело даже не только в установке программного обеспечения, но и в настройке среды в соответствии с вашими привычками. И это важно, потому что правильно настроенная среда разработчика с нужными инструментами — это то, что делает вас продуктивным в вашей повседневной жизни разработчика.

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

Обратите внимание, что то, что я сделал для настройки своей машины разработчика, было вдохновлено скриптами настройки Windows Dev Box из репозитория GitHub и другими репозиториями, использующими boxstarter (например, посмотрите репозиторий Лорана Кемпе) для установки своей среды Windows.

Как это работает?

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

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

Из-за этих требований я решил использовать Boxstarter. У него есть несколько интересных функций (посмотрите на сайте), но больше всего мне нравится то, что вы можете запустить процесс установки, нажав на ссылку. Вам просто нужен URL-адрес, как здесь:

https://boxstarter.org/package/nr/url?{urlToYourInstallationScript}

Войти в полноэкранный режим Выйти из полноэкранного режима

Часть {urlToYourInstallationScript} — это URL, где хранится ваш скрипт установки. Я разместил свой в публичном репозитории GitHub под названием dotfiles.

💬 Boxstarter был приятным открытием, я едва поцарапал поверхность, но он может делать такие интересные вещи, как удаленная установка.

В этот репозиторий я также поместил различные скрипты (чтобы разделить различные шаги вместо одного большого файла скрипта установки), некоторые файлы конфигурации, которые я хотел использовать в своей установке (например, мой файл .gitconfig), и readme с некоторыми объяснениями и ссылкой для запуска установки. Я не стал изобретать колесо, поскольку это более или менее похоже на то, как работают сценарии установки Windows Dev Box.

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

# Install git and clone repository containing scripts and config files
choco install -y git --params "/GitOnlyOnPath /NoShellIntegration /WindowsTerminal"
RefreshEnv
git clone https://github.com/TechWatching/dotfiles.git "$env:USERPROFILEdotfiles"

Вход в полноэкранный режим Выход из полноэкранного режима

Сценарии написаны на языке PowerShell.

Установка программного обеспечения

Менеджеры пакетов

Самый простой способ автоматизировать установку, обновление и настройку программного обеспечения — использовать менеджеры пакетов. Для Windows доступно несколько, но я решил использовать Windows Package Manager и Chocolatey.

Windows Package Manager (он же winget) относительно новый, поэтому имеет меньше функций и пакетов, чем другие менеджеры пакетов, такие как Chocolatey. Однако он очень перспективен, он становится лучше с каждым днем, он встроен в Windows, и, прежде всего, он поддерживает установку приложений из Microsoft Store. Поэтому я решил использовать winget по умолчанию и возвращаться к Chocolatey, когда нужный мне пакет был недоступен или не обновлен в winget.

💬 Я узнал несколько вещей о winget, пока начинал его использовать. Если вам интересно, вы можете найти мои статьи о нем здесь.

Установка интегрированных сред разработки (IDE)

Visual Studio была моей основной IDE в течение некоторого времени, но в последнее время я начал использовать все больше и больше Rider. Обе эти среды хороши и имеют множество функций, особенно хорошо подходящих для разработки под .NET, чем я в основном и занимаюсь. Я также давно являюсь пользователем Visual Studio Code, в основном использую его в качестве текстового редактора или для фронтальной разработки. Я также использую vscode для работы с Azure, потому что он имеет хорошие расширения для многих служб Azure.

Вероятно, вы захотите настроить установку Visual Studio так, чтобы она включала только те рабочие нагрузки, компоненты и языковые пакеты, которые вы используете. Вы можете указать их в качестве параметров в команде установки winget или chocolatey, но это немного громоздко. Самый простой способ — экспортировать конфигурацию из программы установки Visual Studio.

Затем вы можете установить Visual Studio с помощью этой команды:

winget install -e -h --id Microsoft.VisualStudio.2022.Enterprise --silent --override "--wait --quiet --addProductLang En-us --config .vsconfig"

Войти в полноэкранный режим Выйти из полноэкранного режима

💬 До попытки автоматизировать установку Visual Studio я не знал, что можно указать параметры ее установщику в командной строке, но это очень полезно.

Я не экспортирую настройки и расширения Visual Studio, так как большинство из них можно синхронизировать через учётную запись персонализации (нужно просто войти в Visual Studio под той же учётной записью).

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

На chocolatey есть пакет Rider, но он не всегда обновляется, и я предпочитаю использовать приложение JetBrains ToolBox для управления установкой и обновлением моих инструментов JetBrains. К сожалению, у JetBrains ToolBox в настоящее время нет CLI для автоматизации установки Rider и других полезных инструментов .NET (хотя вопрос открыт, если вы хотите проголосовать), поэтому я автоматизировал только установку JetBrains ToolBox и должен буду установить Rider вручную из него.

Инструменты, которые мне нужны

Конечно, git — это обязательный инструмент. Я использую NVM для windows для управления несколькими установками node.js на моем ноутбуке, а pnpm — мой любимый менеджер пакетов для Node.js.

Есть две оболочки, которые я люблю использовать (обе они кроссплатформенные): PowerShell и Nushell. Я использую Oh My Posh для настройки расширенного приглашения для обеих оболочек. Windows Terminal — это мой основной терминал.

Поскольку я работаю в основном над облачными проектами, есть несколько инструментов Azure, которые мне нужны на моем ноутбуке:

winget install -e -h --id Microsoft.AzureCLI
winget install -e -h --id Microsoft.AzureCosmosEmulator
winget install -e -h --id Microsoft.AzureDataStudio
winget install -e -h --id Microsoft.azure-iot-explorer
winget install -e -h --id Microsoft.AzureStorageExplorer
winget install -e -h --id Pulumi.Pulumi
winget install -e -h --id Microsoft.AzureFunctionsCoreTools
# Azurite can be installed through vscode extension or as a global npm package
# pnpm add -g azurite

Войти в полноэкранный режим Выход из полноэкранного режима

Мой сценарий также автоматизирует установку других инструментов, не связанных с разработкой программного обеспечения, но которые я часто использую (например, 7zip, Microsoft Power Toys или просто браузеры).

Обычно, когда приложения, которые я хочу установить, доступны в Microsoft Store, я указываю winget, чтобы установить их оттуда.

winget install -e -h --id Microsoft.WindowsTerminal -s msstore

Вход в полноэкранный режим Выход из полноэкранного режима

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

Инструменты, которые мне не нужны

Ненужные приложения, которые поставляются с Windows из коробки, удаляются с помощью этой функции:

function removeApp {
    Param ([string]$appName)
    Write-Output "Trying to remove $appName"
    Get-AppxPackage $appName -AllUsers | Remove-AppxPackage
    Get-AppXProvisionedPackage -Online | Where DisplayName -like $appName | Remove-AppxProvisionedPackage -Online

Войти в полноэкранный режим Выйти из полноэкранного режима

Это позволяет мне избавиться от предустановленных приложений, таких как Facebook или Bing News.

Настройка программного обеспечения

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

Вот несколько примеров настроек, которые я хотел установить на новом ноутбуке:

  • мой файл .gitconfig
  • мои настройки терминала Windows
  • мой профиль PowerShell
  • моя пользовательская конфигурация подсказок, выполненная с помощью oh my posh.

Чтобы создать символическую ссылку на файл настроек терминала Windows, указывающую на файл настроек в моем клонированном репозитории dotfiles, я могу выполнить следующую команду:

New-Item -ItemType SymbolicLink -Path "$env:USERPROFILEAppDataLocalPackagesMicrosoft.WindowsTerminal_8wekyb3d8bbweLocalStatesettings.json" -Target "$env:USERPROFILEdotfilesconfigwindowsTerminalsettings.json""

Войти в полноэкранный режим Выйти из полноэкранного режима

Поскольку я использую символические ссылки, когда я изменяю конфигурацию терминала Windows (событие через UI), файл настроек в моем git-репозитории является тем, который изменяется, поэтому я могу зафиксировать его и распространить, чтобы на других машинах была последняя версия. И то же самое для всех моих файлов настроек.

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

Что я не автоматизировал… пока!

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

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

Большинство программ, которые мне нужны, устанавливаются моим установочным скриптом. Исключение составляют продукты JetBrains, но я надеюсь, что скоро это станет возможным. В моем сценарии установки есть несколько закомментированных строк об автоматизации установки WSL2 и docker (точнее, установки Rancher Desktop в качестве замены Docker Desktop из-за его новой модели лицензирования), которые требуют установки некоторых функций windows. Я думаю, что эти строки должны работать с некоторыми изменениями, просто в прошлый раз я делал это вручную и не нашел времени, чтобы проверить соответствующие команды должным образом.

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

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

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

В заключение

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

Автоматизировать установку машины было не так уж весело, но я узнал много нового о менеджерах пакетов, окнах, символических ссылках, PowerShell… И в конце концов, это очень приятно, когда все начинает устанавливаться автоматически, и вы обнаруживаете знакомую среду на новом ноутбуке.

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

Эта статья является частью конкурса «4 статьи за 4 недели» от Hashnode.

Счастливого обучения.

Оцените статью
devanswers.ru
Добавить комментарий