Usar um feed de Artefatos do Azure como um repositório privado do PowerShell
Serviços de DevOps do Azure
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 da sua equipe a capacidade de baixar ou atualizar esses scripts rapidamente usando a linha de comando.
Este artigo irá guiá-lo através da configuração do seu feed de Artefatos do Azure como um repositório privado do PowerShell para armazenar e compartilhar seus módulos do PowerShell. Saberá como:
- 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
- Azure Artifacts Credential Provider
- Uma organização Azure DevOps. Crie uma organização, se ainda não tiver uma.
- Um feed de Artefatos do Azure. Crie um novo feed se 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 primárias. 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 pessoal.
Selecione Novo Token
Introduza um nome para a sua PAT e, em seguida, escolha uma Data de validade .
Selecione Personalizado definido e, em seguida, selecione Empacotamento>Ler, escrever e gerenciar.
Selecione Criar quando terminar. Copie e guarde o seu PAT num 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
secçã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')
Encontre a
FileList
seção e adicione a 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 o seu módulo. Este 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 o módulo.
nuget pack Get-Hello.nuspec
Execute o seguinte comando para adicionar o URL de origem do feed. O NuGet v3 não é suportado, certifique-se de usar a v2 no URL de origem do feed.
Feed com escopo da organização:
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 com escopo do projeto:
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 o Azure Artifacts. 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 com escopo do projeto:
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 da organização:
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 com escopo do projeto:
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 da organização:
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
Gorjeta
Certas 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
Register-PSRepository
origem do pacote.Registe a origem do seu pacote:
Feed com escopo do projeto:
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 da organização:
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 seguinte comando 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 seguinte comando se quiser encontrar 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 Register-PackageSource
cmdlet novamente com o sinalizador da Trusted
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
Nota
Se a sua organização estiver a utilizar uma firewall ou um servidor proxy, certifique-se de que permite URLs de Domínio de Artefactos do Azure e endereços IP.
Registrar e instalar o 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 em sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines, selecione seu pipeline e, em seguida, selecione Edit 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 .
Certifique-se de marcar 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.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários