Рекомендации и рекомендации по публикации PowerShellGallery
В этой статье описаны рекомендуемые шаги, используемые командами Майкрософт для обеспечения широкой реализации пакетов, опубликованных в коллекции PowerShell, и обеспечения высокой ценности для пользователей в зависимости от того, как коллекция PowerShell обрабатывает данные манифеста и отзыв от большого количества пользователей коллекции PowerShell. Пакеты, опубликованные в соответствии с этими рекомендациями, скорее всего, будут установлены, доверенны и привлекают больше пользователей.
Ниже приведены рекомендации по созданию хорошего пакета коллекции PowerShell, дополнительных параметров манифеста, улучшения кода с отзывом от первоначальных рецензентов и анализатора скриптов PowerShell, управления версиями модуля, документации, тестов и примеров использования общего доступа. Большая часть этой документации соответствует рекомендациям по публикации высококлассных модулей ресурсов DSC.
Механика публикации пакета в коллекции PowerShell см. в создании и публикации пакета.
Отзыв об этих рекомендациях приветствуется. Если у вас есть отзывы, откройте вопросы в нашем репозитории документации по GitHub.
Рекомендации по публикации пакетов
Ниже приведены рекомендации по тому, что говорят пользователи элементов коллекции PowerShell и указаны в номинальном порядке приоритета. Пакеты, следуйте этим рекомендациям, гораздо чаще загружаются и принимаются другими пользователями.
- Использование PSScriptAnalyzer
- Включение документации и примеров
- Реагирование на отзывы
- Предоставление модулей, а не скриптов
- Предоставление ссылок на сайт проекта
- Пометьте свой пакет совместимыми psEdition и платформами
- Включение тестов с модулями
- Включение и/или ссылка на условия лицензии
- Подписыв свой код
- Следуйте рекомендациям SemVer по управлению версиями
- Использование общих тегов, как описано в тегах общих коллекций PowerShell
- Тестирование публикации с помощью локального репозитория
- Публикация с помощью PowerShellGet
Каждый из них кратко рассматривается в разделах ниже.
Использование PSScriptAnalyzer
PSScriptAnalyzer — это бесплатное средство анализа статического кода, которое работает с кодом PowerShell. PSScriptAnalyzer определит наиболее распространенные проблемы, возникающие в коде PowerShell, и часто рекомендации по устранению проблемы. Средство легко использовать и классифицирует проблемы как ошибки (тяжелые, должны быть устранены), предупреждение (необходимо проверить и следует устранить) и информацию (стоит ознакомиться с рекомендациями). Все пакеты, опубликованные в коллекции PowerShell, будут сканированы с помощью PSScriptAnalyzer, и все ошибки будут возвращены владельцу и должны быть устранены.
Рекомендуется запускать Invoke-ScriptAnalyzer
с -Recurse
и предупреждением -Severity
.
Просмотрите результаты и убедитесь, что:
- Все ошибки исправлены или устранены в документации.
- Все предупреждения проверяются и рассматриваются, где это применимо.
Пользователям, скачивающим пакеты из коллекции PowerShell, настоятельно рекомендуется запускать PSScriptAnalyzer и оценивать все ошибки и предупреждения. Пользователи, скорее всего, обращаются к владельцам пакетов, если они видят ошибку, сообщаемую PSScriptAnalyzer. Если в пакете есть убедительные причины сохранения кода, помеченного как ошибка, добавьте эти сведения в документацию, чтобы избежать необходимости отвечать на один и тот же вопрос много раз.
Включение документации и примеров
Документация и примеры — лучший способ, чтобы пользователи могли использовать любой общий код.
Документация является наиболее полезной вещью для включения в пакеты, опубликованные в коллекции PowerShell. Как правило, пользователи обходят пакеты без документации, так как альтернативой является чтение кода, чтобы понять, что такое пакет и как его использовать. Существует несколько статей о том, как предоставить документацию пакетам PowerShell, в том числе:
- Рекомендации по предоставлению справки находятся в справки по командлетам.
- Создание справки по командлету, которая является лучшим подходом для любого скрипта, функции или командлета PowerShell. Сведения о том, как создать справку по командлету, начните с справки по командлетам. Сведения о добавлении справки в скрипт см. в справке на основе комментариев.
- Многие модули также включают документацию в текстовом формате, например файлы MarkDown. Это может быть особенно полезно, если в GitHub есть сайт проекта, где Markdown является широко используемым форматом. Рекомендуется использовать GitHub сMarkdown.
В примерах показано, как будет использоваться пакет. Многие разработчики говорят, что они смотрят на примеры перед документацией, чтобы понять, как использовать что-то. Лучшие типы примеров показывают базовое использование, а также имитацию реалистичного варианта использования, и код хорошо закомментирован. Примеры модулей, опубликованных в коллекции PowerShell, должны находиться в папке Examples в корневом каталоге модуля.
Примеры можно найти в мод уле PSDscResource
Управление зависимостями
Важно указать модули, от которые ваш модуль зависит в манифесте модуля. Это позволяет пользователю не беспокоиться об установке соответствующих версий модулей, от которых зависит ваша служба. Чтобы указать зависимые модули, необходимо использовать необходимое поле модуля в манифесте модуля. При этом все перечисленные модули загружаются в глобальную среду до импорта модуля, если они еще не загружены. Например, некоторые модули уже могут загружаться другим модулем. Кроме того, можно указать определенную версию для загрузки с помощью поля RequiredVersion вместо поля ModuleVersion. При использованииModuleVersion
Example: RequiredModules = @(@{ModuleName="myDependentModule"; ModuleVersion="2.0"; Guid="cfc45206-1e49-459d-a8ad-5b571ef94857"})
Example: RequiredModules = @(@{ModuleName="myDependentModule"; RequiredVersion="1.5"; Guid="cfc45206-1e49-459d-a8ad-5b571ef94857"})
Ответ на отзывы
Владельцы пакетов, которые правильно реагируют на отзывы, высоко ценятся сообществом. Пользователям, которые предоставляют конструктивные отзывы, важно реагировать на них, так как они заинтересованы достаточно в пакете, чтобы попытаться улучшить его.
В коллекции PowerShell доступен один метод обратной связи:
- Владелец контакта: это позволяет пользователю отправлять сообщение электронной почты владельцу пакета. Как владелец пакета важно отслеживать адрес электронной почты, используемый с пакетами коллекции PowerShell, и отвечать на возникающие проблемы. Одним из недостатков этого метода является то, что только пользователь и владелец когда-либо увидят связь, поэтому владельцу может потребоваться ответить на один и тот же вопрос много раз.
Владельцы, которые отвечают на отзывы конструктивно, ценятся сообществом. Используйте возможность в отчете, чтобы запросить дополнительные сведения. При необходимости укажите обходное решение или определите, исправляет ли обновление проблему.
Если в любом из этих каналов связи наблюдается неуместное поведение, используйте функцию "Злоупотребление отчетами" коллекции PowerShell, чтобы связаться с администраторами коллекции.
Модули и скрипты
Общий доступ к скрипту другим пользователям отлично подходит и предоставляет другим пользователям примеры решения проблем, которые у них могут быть. Проблема заключается в том, что сценарии в коллекции PowerShell являются отдельными файлами без отдельной документации, примеров и тестов.
Модули PowerShell имеют структуру папок, которая позволяет включать в пакет несколько папок и файлов. Структура модуля включает в себя другие пакеты, которые мы перечисляем в качестве рекомендаций: справку по командлетам, документацию, примеры и тесты. Самым большим недостатком является то, что скрипт внутри модуля должен быть предоставлен и использоваться в качестве функции. Сведения о создании модуля см. в записи модуля Windows PowerShell.
Существуют ситуации, когда скрипт обеспечивает более удобный интерфейс для пользователя, особенно с конфигурациями DSC. Рекомендуется опубликовать конфигурацию DSC в виде скрипта со сопутствующим модулем, содержащим документы, примеры и тесты. Скрипт перечисляет сопутствующий модуль с помощью RequiredModules = @(Name of the Module)
. Этот подход можно использовать с любым скриптом.
Автономные скрипты, которые следуют другим рекомендациям, обеспечивают реальную ценность для других пользователей. При публикации скрипта в коллекции PowerShell настоятельно рекомендуется предоставлять документацию на основе комментариев и ссылку на сайт проекта.
Укажите ссылку на сайт проекта
Сайт проекта — это место, где издатель может взаимодействовать напрямую с пользователями пакетов коллекции PowerShell. Пользователи предпочитают пакеты, которые предоставляют это, так как они позволяют им получать сведения о пакете проще. Многие пакеты в коллекции PowerShell разрабатываются в GitHub, другие предоставляются организациями с выделенным веб-присутствием. Каждый из них может считаться сайтом проекта.
Добавление ссылки выполняется путем включения ProjectURI в раздел PSData манифеста следующим образом:
# A URL to the main website for this project.
ProjectUri = 'https://github.com/powershell/powershell'
При указании ProjectURI коллекция PowerShell будет включать ссылку на сайт проекта слева от страницы пакета.
Пометьте свой пакет совместимыми psEdition и платформами
Используйте следующие теги, чтобы продемонстрировать пользователям, какие пакеты будут работать хорошо со своей средой:
- PSEdition_Desktop. Пакеты, совместимые с Windows PowerShell
- PSEdition_Core. Пакеты, совместимые с PowerShell 6 и выше
- Windows: пакеты, совместимые с операционной системой Windows
- Linux: пакеты, совместимые с операционными системами Linux
- MacOS: пакеты, совместимые с операционной системой Mac
Пометка пакета с совместимыми платформами будет включена в фильтры поиска коллекции в левой области результатов поиска. Если вы размещаете пакет на сайте GitHub, при теге пакета вы также можете воспользоваться преимуществами экранов совместимости коллекции PowerShell.
Включение тестов
Включение тестов с открытым исходным кодом важно для пользователей, так как оно дает им уверенность в том, что вы проверяете, и предоставляет сведения о том, как работает ваш код. Кроме того, пользователи могут гарантировать, что они не нарушают исходные функциональные возможности, если они изменяют код в соответствии с их средой.
Настоятельно рекомендуется записывать тесты, чтобы воспользоваться платформой тестирования Pester, которая была разработана специально для PowerShell. Pester доступен в GitHub, коллекции PowerShellи поставляется в Windows 10, Windows Server 2016, WMF 5.0 и WMF 5.1.
Сайт проекта Pester в GitHub включает в себя хорошую документацию по написанию тестов Пестера, начиная с начала работы с рекомендациями.
Целевые показатели для покрытия тестов вызываются в документации по модулю ресурсов высокого качества с рекомендуемой%% покрытие кода модульного теста.
Включение и/или ссылка на условия лицензии
Все пакеты, опубликованные в коллекции PowerShell, должны указывать условия лицензии или быть привязаны лицензией, включенной в условия использования в выставке A. Лучший подход к указанию другой лицензии — предоставить ссылку на лицензию с помощью LicenseURI в PSData. Дополнительные сведения см. в разделе Манифест пакетов ипользовательского интерфейса коллекции.
PrivateData = @{
PSData = @{
# Tags applied to this module. These help with module discovery in online galleries.
Tags = @('.net','acl','active-directory')
# A URL to the license for this module.
LicenseUri = 'http://www.apache.org/licenses/LICENSE-2.0'
Подписыв свой код
Подписывание кода предоставляет пользователям наивысший уровень уверенности в том, кто опубликовал пакет, и что копия получаемого кода является именно тем, что издатель выпустил. Дополнительные сведения о подписи кода, как правило, см. в статье Общие сведения о подписи кода. PowerShell поддерживает проверку подписывания кода с помощью двух основных подходов:
- Подписывание файлов скриптов
- Подписывание модуля каталога
Подписывание файлов PowerShell — это хорошо установленный подход к обеспечению того, чтобы исполняемый код был создан надежным источником и не был изменен. Сведения о том, как подписать файлы скриптов PowerShell, рассматриваются в статье о подписи. В обзоре подпись можно добавить в любой файл .PS1
, который PowerShell проверяет при загрузке скрипта. PowerShell можно ограничить с помощью командлетов политики выполнения, чтобы обеспечить использование подписанных скриптов.
Модули подписывания каталога — это функция, добавленная в PowerShell версии 5.1. Как подписать модуль, описанный в статье командлетов каталога. В обзоре подписывание каталога выполняется путем создания файла каталога, содержащего хэш-значение для каждого файла в модуле, а затем подписывая этот файл.
Командлеты PowerShellGetPublish-Module
, Install-Module
и Update-Module
проверят подпись, чтобы убедиться, что это допустимо, а затем убедитесь, что хэш-значение для каждого пакета соответствует тому, что находится в каталоге.
Save-Module
не проверяет подпись. Если предыдущая версия модуля установлена в системе, Install-Module
подтвердит, что центр подписи новой версии соответствует установленной ранее версии.
Install-Module
и Update-Module
будут использовать подпись в файле .PSD1
, если пакет не подписан каталогом. Подписывание каталога работает с файлами скриптов подписывания, но не заменяет файлы скриптов подписывания. PowerShell не проверяет подписи каталога во время загрузки модуля.
Следуйте рекомендациям SemVer по управлению версиями
SemVer — это общедоступная конвенция, описывающая структуру и изменение версии, чтобы упростить интерпретацию изменений. Версия пакета должна быть включена в данные манифеста.
- Версия должна быть структурирована как три числовых блока, разделенных точками, как в
0.1.1
или4.11.192
. - Версии, начиная с
0
, указывают на то, что пакет еще не готов, и первое число должно начинаться только с0
, если это единственное число, используемое. - Изменения в первом номере (
1.9.9999
на2.0.0
) указывают на основные и критические изменения между версиями. - Изменения второго номера (
1.1
на1.2
) указывают на изменения на уровне компонентов, например добавление новых командлетов в модуль. - Изменения третьего числа указывают на неразрывные изменения, такие как новые параметры, обновленные примеры или новые тесты.
- При перечислении версий PowerShell отсортирует версии как строки, поэтому
1.01.0
будет рассматриваться как больше1.001.0
.
PowerShell был создан до публикации SemVer, поэтому он обеспечивает поддержку большинства, но не всех элементов SemVer, в частности:
- Она не поддерживает строки предварительной версии в номерах версий. Это полезно, если издатель хочет предоставить предварительную версию новой основной версии после предоставления
1.0.0
версии. Это будет поддерживаться в будущем выпуске коллекции PowerShell и командлетов PowerShellGet. - PowerShell и коллекция PowerShell позволяют использовать строки версий с 1, 2 и 4 сегментами. Многие ранние модули не соответствовали рекомендациям, а выпуски продуктов от Майкрософт включают сведения о сборке в виде 4-го блока чисел (например,
5.1.14393.1066
). С точки зрения управления версиями эти различия игнорируются.
Тестирование с помощью локального репозитория
Коллекция PowerShell не предназначена для тестирования процесса публикации. Лучший способ проверить комплексный процесс публикации в коллекции PowerShell — настроить и использовать собственный локальный репозиторий. Это можно сделать несколькими способами, в том числе:
- Настройте локальный экземпляр коллекции PowerShell с помощью проекта частной коллекции PS в GitHub. Этот проект предварительной версии поможет настроить экземпляр коллекции PowerShell, который можно контролировать и использовать для тестов.
- Настройте внутренний репозиторий Nuget. Это потребует больше работы для настройки, но будет иметь преимущество проверки нескольких дополнительных требований, особенно проверки использования ключа API и наличия зависимостей в целевом объекте при публикации.
- Настройте общую папку в качестве тестового репозитория. Это легко настроить, но так как это общий файловый ресурс, проверки, указанные выше, не будут проходить. Одним из потенциальных преимуществ в этом случае является то, что общая папка не проверяет необходимый ключ API, поэтому вы можете использовать тот же ключ, который будет использоваться для публикации в коллекции PowerShell.
В любом из этих решений используйте
Еще одна точка о тестовой публикации: любой пакет, который вы публикуете в коллекции PowerShell, не может быть удален без помощи группы операций, которая подтвердит, что ничего не зависит от пакета, который вы хотите опубликовать. По этой причине мы не поддерживаем коллекцию PowerShell в качестве целевого объекта тестирования и будем обращаться к любому издателю, который делает это.
Публикация с помощью PowerShellGet
Настоятельно рекомендуется, чтобы издатели использовали командлеты Publish-Module
и Publish-Script
при работе с коллекцией PowerShell.
powerShellGet создан, чтобы избежать запоминания важных сведений об установке и публикации в коллекции PowerShell. Иногда издатели решили пропустить PowerShellGet и использовать клиент NuGet или командлеты PackageManagement вместо Publish-Module
. Существует ряд сведений, которые легко пропускаются, что приводит к различным запросам на поддержку.
Если есть причина, по которой вы не можете использовать Publish-Module
или Publish-Script
, сообщите нам об этом.
Отправьте проблему в репозитории GitHub
Рекомендуемый рабочий процесс
Самый успешный подход, который мы нашли для пакетов, опубликованных в коллекции PowerShell, заключается в следующем:
- Выполните начальную разработку на сайте проекта с открытым исходным кодом. Команда PowerShell использует GitHub.
- Используйте отзывы от рецензентов и анализатора скриптов PowerShell, чтобы получить код в стабильном состоянии.
- Включите документацию, чтобы другие знали, как использовать свою работу.
- Проверьте действие публикации с помощью локального репозитория.
- Опубликуйте стабильный или альфа-выпуск в коллекции PowerShell, обязательно включите документацию и ссылку на сайт проекта.
- Соберите отзывы и выполните итерацию кода на сайте проекта, а затем опубликуйте стабильные обновления в коллекции PowerShell.
- Добавьте примеры и тесты Pester в проект и модуль.
- Определите, нужно ли подписывать пакет кодом.
- Когда проект готов к использованию в рабочей среде, опубликуйте
1.0.0
версию в коллекции PowerShell. - Продолжайте собирать отзывы и итерировать код на основе ввода пользователем.
PowerShell Gallery