Использование веб-канала Azure Artifacts в качестве частного репозитория PowerShell
Azure DevOps Services
Azure Artifacts предоставляет простой способ совместного использования сценариев PowerShell между командами для повышения совместной работы и повышения эффективности. Сохраняя модули PowerShell в частном репозитории, вы можете предоставить участникам команды возможность быстро скачивать или обновлять эти скрипты с помощью командной строки.
Из этой статьи вы узнаете, как настроить веб-канал Azure Artifacts в качестве частного репозитория PowerShell для хранения модулей PowerShell и предоставления общего доступа к ним. Вы узнаете, как:
- Создание личного маркера доступа
- Создание нового веб-канала для хранения модулей PowerShell
- Создание, упаковка и публикация модулей PowerShell
- Подключение к веб-каналу с помощью PowerShell
- Использование частного репозитория PowerShell с Azure Pipelines
Предварительные требования
- NuGet.exe
- Поставщик учетных данных Azure Artifacts
- Организация Azure DevOps. Создайте организацию, если у вас ее еще нет.
- Веб-канал Azure Artifacts. Создайте новый веб-канал , если у вас его еще нет.
Создание личного маркера доступа
Использование личного маркера доступа (PAT) — отличный способ проверки подлинности в Azure DevOps без использования основных учетных данных. Дополнительные сведения см. в разделе Использование личных маркеров доступа .
Перейдите в организацию Azure DevOps.
https://dev.azure.com/<ORGANIZATION_NAME>/
Щелкните значок параметров пользователя, а затем выберите Личные маркеры доступа.
Выбор нового токена
Введите имя pat и выберите дату окончания срока действия .
Выберите Пользовательское определение, а затем выберите Упаковка>Чтение, управление записью&.
После завершения работы выберите Создать. Скопируйте и сохраните pat в безопасном месте.
Создание модуля
Создайте папку Get-Hello. Перейдите в папку и создайте новый файл Get-Hello.psm1.
|--- Get-Hello // Parent folder |--- Get-Hello.psm1 // This will become our PowerShell Module |--- Get-Hello.psd1 // This will become our module manifest
Вставьте следующий скрипт в файл Get-Hello.psm1 :
Function Get-Hello{ Write-Host "Hello from my Azure DevOps Services Package." }
Создайте манифест модуля, выполнив следующую команду в пути к каталогу Get-Hello .
New-ModuleManifest -Path .\Get-Hello.psd1
Откройте файл Get-Hello.psd1 и найдите переменную
RootModule
. Замените пустую строку путем к файлу Get-Hello.psm1 следующим образом:RootModule = 'Get-Hello.psm1'
Раздел
FunctionsToExport
предназначен для определения списка функций, которые будут экспортированы из этого модуля. Добавьте функцию Get-Hello следующим образом:FunctionsToExport = @('Get-Hello')
FileList
Найдите раздел и добавьте следующий список файлов, которые следует упаковать вместе с модулем.FileList = @('./Get-Hello.psm1')
Модуль упаковки и публикации
Создайте файл nuspec для модуля. Эта команда создаст файл Get-Hello.nuspec , содержащий метаданные, необходимые для упаковки модуля.
nuget spec Get-Hello
Выполните следующую команду, чтобы упаковать модуль.
nuget pack Get-Hello.nuspec
Выполните следующую команду, чтобы добавить URL-адрес источника веб-канала. NuGet версии 3 не поддерживается. Убедитесь, что вы используете версию 2 в URL-адресе источника веб-канала.
Веб-канал с областью организации:
nuget sources Add -Name "<FEED_NAME>" -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -username "<USER_NAME>" -password "<PERSONAL_ACCESS_TOKEN>"
Веб-канал с областью проекта:
nuget sources Add -Name "<FEED_NAME>" -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -username "<USER_NAME>" -password "<PERSONAL_ACCESS_TOKEN>"
Опубликуйте пакет в веб-канале.
nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
Важно!
Номер версии в манифесте модуля (PSD1) и NUSPEC-файле должны совпадать.
Подключение к веб-каналу в качестве репозитория PowerShell
Откройте окно командной строки PowerShell с повышенными привилегиями.
Настройте учетные данные для проверки подлинности с помощью Azure Artifacts. Замените заполнители соответствующими сведениями.
$patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
$credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
Зарегистрируйте репозиторий PowerShell. Ссылку
SourceLocation
можно найти, перейдя в раздел Artifacts>Connect to Feed>NuGet.exe в разделе URL-адрес источника установки проекта .Веб-канал с областью проекта:
Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
Веб-канал с областью организации:
Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
Если вы по-прежнему используете старые
visualstudio.com
URL-адреса, используйте следующую команду:Веб-канал с областью проекта:
Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
Веб-канал с областью организации:
Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
Совет
Для некоторых версий PowerShell требуется перезапуск нового сеанса после выполнения командлета
Register-PSRepository
, чтобы избежать предупреждения Не удается разрешить источник пакета .Зарегистрируйте источник пакета:
Веб-канал с областью проекта:
Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Веб-канал с областью организации:
Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Выполните следующую команду, чтобы убедиться, что репозиторий успешно зарегистрирован. Эта команда возвращает все зарегистрированные репозитории для текущего пользователя:
Get-PSRepository
Выполните следующую команду, чтобы найти все модули в репозитории.
Find-Module -Repository PowershellAzureDevopsServices
Выполните следующую команду, чтобы установить модуль Get-Hello .
Install-Module -Name Get-Hello -Repository PowershellAzureDevopsServices
Если команда Install-Module возвращает следующую ошибку: Не удается разрешить источник пакета, запустите Register-PackageSource
командлет еще раз с флагом Trusted
следующим образом:
Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Подключение к веб-каналу с помощью Azure Pipelines
В следующем примере показано, как проверить подлинность и установить модуль PowerShell с конвейером YAML.
variables:
PackageFeedEndpoint: https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2 # For Project-scoped feed use this endpoint url: https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2
# Construct a JSON object that contains the endpoint URL and the personal access token to pass them to Azure Artifacts credential provider.
PackageFeedEndpointCredential: '{"endpointCredentials": [{"endpoint":"$(PackageFeedEndpoint)", "username":"OPTIONAL", "password":"ACCESS TOKEN"}]}'
steps:
# To prevent possible 'Unable to resolve package source' errors when installing modules from your feed, call Install-Module in a separate PowerShell task.
- powershell: |
Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "$(PackageFeedEndpoint)" -PublishLocation "$(PackageFeedEndpoint)" -InstallationPolicy Trusted
displayName: 'Register Azure Artifacts Feed as PSRepository'
env:
# This environment variable passes the credentials to the credential provider.
VSS_NUGET_EXTERNAL_FEED_ENDPOINTS: $(PackageFeedEndpointCredential)
- powershell: |
Install-Module -Name Get-Hello -Repository PowershellAzureDevopsServices
displayName: 'Install Get-Hello PowerShell module'
env:
# The credentials must be set on every task that interacts with your private PowerShell repository.
VSS_NUGET_EXTERNAL_FEED_ENDPOINTS: $(PackageFeedEndpointCredential)
- powershell: |
Get-Hello
displayName: Execute Get-Hello