Usar um feed de Artefatos do Azure como um repositório privado do PowerShell
Azure DevOps Services
Os Artefatos do Azure fornecem uma maneira fácil de compartilhar scripts do PowerShell entre equipes para promover a colaboração e maximizar a eficácia. Ao armazenar módulos do PowerShell em um repositório privado, você pode dar aos membros de sua equipe a capacidade de baixar ou atualizar esses scripts rapidamente usando a linha de comando.
Este artigo irá guiá-lo durante a configuração do feed de Artefatos do Azure como um repositório privado do PowerShell para armazenar e compartilhar seus módulos do PowerShell. Você aprenderá a:
- Criar um token de acesso pessoal
- Criar um novo feed para armazenar módulos do PowerShell
- Criar, empacotar e publicar módulos do PowerShell
- Conectar-se a um feed com o PowerShell
- Usar o repositório privado do PowerShell com o Azure Pipelines
Pré-requisitos
- NuGet.exe
- Provedor de credenciais do Azure Artifacts
- Uma organização do Azure DevOps. Crie uma organização, se você ainda não tiver uma.
- Um feed do Azure Artifacts. Crie um feed se você ainda não tiver um.
Criar um token de acesso pessoal
Usar um token de acesso pessoal (PAT) é uma ótima maneira de autenticar com o Azure DevOps sem usar suas credenciais principais. Consulte Usar tokens de acesso pessoal para obter mais detalhes.
Navegue até sua organização do Azure DevOps
https://dev.azure.com/<ORGANIZATION_NAME>/
Selecione o ícone de configurações do usuário e, em seguida, selecione Tokens de acesso pessoais.
Selecionar Novo Token
Insira um nome para seu PAT e escolha uma Data de validade .
Selecione Personalizado definido e, em seguida, selecione Empacotando>Leitura, gravação e gerenciamento.
Selecione Criar quando terminar. Copie e armazene seu PAT em um local seguro.
Criar um módulo
Crie uma nova pasta Get-Hello. Navegue dentro de sua pasta e crie um novo arquivo 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
Cole o seguinte script no arquivo Get-Hello.psm1 :
Function Get-Hello{ Write-Host "Hello from my Azure DevOps Services Package." }
Crie o manifesto do módulo executando o seguinte comando no caminho do diretório Get-Hello.
New-ModuleManifest -Path .\Get-Hello.psd1
Abra o arquivo Get-Hello.psd1 e localize a
RootModule
variável. Substitua a cadeia de caracteres vazia pelo caminho para o arquivo Get-Hello.psm1 da seguinte maneira:RootModule = 'Get-Hello.psm1'
A
FunctionsToExport
seção destina-se a definir a lista de funções que serão exportadas deste módulo. Adicione sua função Get-Hello da seguinte maneira:FunctionsToExport = @('Get-Hello')
Localize a seção e adicione a
FileList
seguinte lista de arquivos que devem ser empacotados com seu módulo.FileList = @('./Get-Hello.psm1')
Módulo de empacotamento e publicação
Crie um arquivo nuspec para seu módulo. Esse comando criará um arquivo Get-Hello.nuspec que contém os metadados necessários para empacotar o módulo.
nuget spec Get-Hello
Execute o seguinte comando para empacotar seu módulo.
nuget pack Get-Hello.nuspec
Execute o seguinte comando para adicionar o URL de origem do feed. NuGet v3 não é suportado, certifique-se de usar v2 em seu URL de origem do feed.
Feed com escopo organizacional:
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>"
Feed do projeto com escopo:
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>"
Publique o pacote no seu feed.
nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
Importante
O número da versão no Manifesto do módulo (.psd1) e o arquivo .nuspec devem corresponder.
Conectar-se ao feed como um repositório do PowerShell
Abra uma janela de prompt do PowerShell com privilégios elevados.
Configure suas credenciais para autenticar com os Artefatos do Azure. Substitua os espaços reservados pelas informações apropriadas.
$patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
$credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
Registre seu repositório do PowerShell. O
SourceLocation
link pode ser encontrado navegando até Artifacts>Connect to Feed>NuGet.exe em URL de origem da configuração do projeto.Feed do projeto com escopo:
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
Feed com escopo organizacional:
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
Se você ainda estiver usando as URLs mais antigas
visualstudio.com
, use o seguinte comando:Feed do projeto com escopo:
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
Feed com escopo organizacional:
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
Dica
Determinadas versões do PowerShell exigem a reinicialização de uma nova sessão após a execução do cmdlet para evitar o aviso Não é possível resolver a origem do
Register-PSRepository
pacote.Registre a origem do pacote:
Feed do projeto com escopo:
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
Feed com escopo organizacional:
Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Execute o comando a seguir para confirmar se o repositório foi registrado com êxito. Este comando obtém todos os repositórios registrados para o usuário atual:
Get-PSRepository
Execute o comando a seguir se quiser localizar todos os módulos no repositório.
Find-Module -Repository PowershellAzureDevopsServices
Execute o seguinte comando se desejar instalar o módulo Get-Hello .
Install-Module -Name Get-Hello -Repository PowershellAzureDevopsServices
Se o comando Install-Module estiver retornando o seguinte erro: Não é possível resolver a origem do pacote, execute o cmdlet novamente com o Trusted
Register-PackageSource
sinalizador da seguinte maneira:
Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Observação
Se sua organização estiver usando um firewall ou um servidor proxy, confirme se permite URLs de domínio e endereços IP do Azure Artifacts.
Registrar e instalar módulo usando o Azure Pipelines
Este exemplo ilustra o processo de autenticação e instalação de um módulo do PowerShell usando um pipeline YAML. Para usar seu token de acesso pessoal dentro do pipeline, você deve incluí-lo como uma variável de pipeline, da seguinte maneira:
Entre na sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines, selecione seu pipeline e, em seguida, selecione Editar para editar seu pipeline.
Selecione Variáveis no canto superior direito e, em seguida, selecione o + sinal para criar uma nova variável.
Forneça um Nome para sua variável e cole seu token de acesso pessoal na caixa de texto Valor .
Marque a caixa de seleção Manter este valor secreto. Selecione Ok quando terminar. Agora você está pronto para usar sua variável em seu pipeline.
trigger:
- main
pool:
vmImage: 'Windows-latest'
variables:
PackageFeedEndpoint: 'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2' ## For project scoped feeds use: 'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2'
PackageFeedEndpointCredential: '{"endpointCredentials": [{"endpoint":"$(PackageFeedEndpoint)", "username":"Admin", "password":"$(AZURE_DEVOPS_PAT)"}]}'
steps:
- powershell: |
Register-PSRepository -Name "psRepoPipeline" -SourceLocation '$(PackageFeedEndpoint)' -InstallationPolicy Trusted
displayName: 'Register Azure Artifacts Feed as PSRepository'
env:
VSS_NUGET_EXTERNAL_FEED_ENDPOINTS: $(PackageFeedEndpointCredential)
- powershell: |
echo (Get-PSRepository)
displayName: 'Get all module repositories'
- powershell: |
Find-Module -Name "Get-Hello" | Install-Module -Confirm:$false -Force
displayName: 'Install the Get-Hello PowerShell module'
env:
VSS_NUGET_EXTERNAL_FEED_ENDPOINTS: $(PackageFeedEndpointCredential)
Artigos relacionados
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de