Partilhar via


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

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.

  1. Navegue até sua organização do Azure DevOps https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Selecione o ícone de configurações do usuário e, em seguida, selecione Tokens de acesso pessoal.

    Uma captura de tela mostrando como criar um token de acesso pessoal.

  3. Selecione Novo Token

  4. Introduza um nome para a sua PAT e, em seguida, escolha uma Data de validade .

  5. Selecione Personalizado definido e, em seguida, selecione Empacotamento>Ler, escrever e gerenciar.

  6. Selecione Criar quando terminar. Copie e guarde o seu PAT num local seguro.

    Uma captura de tela mostrando como configurar um novo token de acesso pessoal.

Criar um módulo

  1. 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
    
  2. Cole o seguinte script no arquivo Get-Hello.psm1 :

    Function Get-Hello{
        Write-Host "Hello from my Azure DevOps Services Package."
    }
    
  3. Crie o manifesto do módulo executando o seguinte comando no caminho do diretório Get-Hello .

    New-ModuleManifest -Path .\Get-Hello.psd1
    
  4. 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'
    
  5. 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')
    
  6. 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

  1. 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
    
  2. Execute o seguinte comando para empacotar o módulo.

    nuget pack Get-Hello.nuspec
    
  3. 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>"
      
  4. Publique o pacote no seu feed.

    nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
    

    Uma captura de tela mostrando o pacote publicado.

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

  1. Abra uma janela de prompt do PowerShell com privilégios elevados.

  2. 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)
    
  3. 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.

  4. 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 
      
  5. 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
    
  6. Execute o seguinte comando se quiser encontrar todos os módulos no repositório.

    Find-Module -Repository PowershellAzureDevopsServices
    
  7. 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:

  1. Entre em sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Pipelines, selecione seu pipeline e, em seguida, selecione Edit para editar seu pipeline.

  3. Selecione Variáveis no canto superior direito e, em seguida, selecione o + sinal para criar uma nova variável.

  4. Forneça um Nome para sua variável e cole seu token de acesso pessoal na caixa de texto Valor .

  5. 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)