Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Serviços do Azure DevOps
O Azure Artifacts fornece uma solução prática para compartilhar scripts do PowerShell. Usando feeds do Azure Artifacts, você pode publicar perfeitamente seus módulos do PowerShell na linha de comando e controlar o acesso a eles por meio das configurações do feed. Este artigo orienta você na configuração do feed do Azure Artifacts como um repositório privado do PowerShell para armazenar e compartilhar seus módulos do PowerShell.
Neste artigo, você aprenderá a:
- Criar um token de acesso pessoal
- Criar um módulo do PowerShell
- Criar um cofre do SecretStore e registrar um repositório
- Publicar e consumir pacotes de um feed
Pré-requisitos
Crie no Azure DevOps uma organização e um projeto, caso ainda não tenha feito isso.
Crie um novo feed se você ainda não tiver um.
Instale o PowerShell 6.0 ou posterior para garantir que você tenha a versão necessária do PowerShellGet necessária para instalar o PSResourceGet.
Instale o PSResourceGet.
Instale os módulos SecretManagement e SecretStore.
Observação
Não há suporte para o Provedor de Credenciais do Azure Artifacts com PSResourceGet.
Criar um token de acesso pessoal
Um token de acesso pessoal atua como sua identidade digital e serve como uma senha alternativa para autenticação com o Azure DevOps.
Navegue até sua organização do Azure DevOps
https://dev.azure.com/<ORGANIZATION_NAME>/Selecione o ícone de configurações do usuário, selecione Tokens de acesso pessoal e, em seguida, selecione Novo Token.
Insira um nome para o seu PAT, defina uma data de Validade, selecione Definido pelo usuário e, em seguida, selecione Pacotes>Ler, gravar & gerenciar.
Selecione Criar quando terminar e copie e armazene seu PAT em um local seguro.
Criar um módulo do PowerShell
Se você não tiver seu próprio módulo, siga as instruções nesta seção para criar um módulo do PowerShell de exemplo. Caso contrário, vá para a próxima etapa:
Crie uma nova pasta PowerShell-Demo. Navegue até sua pasta e crie um novo arquivo PowerShell-Demo.psm1.
Cole o seguinte script no arquivo PowerShell-Demo.psm1:
Function PowerShell-Demo{ Write-Host "Hello World!" }Gere o manifesto do módulo executando o seguinte comando no diretório PowerShell-Demo:
New-ModuleManifest -Path .\PowerShell-Demo.psd1Abra o arquivo PowerShell-Demo.psd1 e localize a variável
RootModule. Essa configuração especifica o arquivo de script principal que o PowerShell carrega quando o módulo é importado. Substitua a cadeia de caracteres vazia pelo caminho para o arquivo PowerShell-Demo.psm1:RootModule = 'PowerShell-Demo.psm1'A seção
FunctionsToExportespecifica quais funções podem ser acessadas pelos usuários quando eles importam seu módulo. Inclua sua função PowerShell-Demo:FunctionsToExport = @('PowerShell-Demo')Localize a seção
FileList, que lista os arquivos incluídos ao empacotar o módulo. Adicione o arquivo que deseja empacotar com seu módulo:FileList = @('./PowerShell-Demo.psm1')
Registrar um repositório
Execute o comando a seguir para criar um objeto de credencial. Substitua os espaços reservados pelas informações corretas.
$username = "<USER_NAME>" $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force $credentials = New-Object System.Management.Automation.PSCredential($username, $patToken)Certifique-se de que SecretManagement e SecretStore estejam instalados e execute o seguinte comando para criar um cofre e adicionar um segredo:
Register-SecretVault -Name "MySecretVault" -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault Set-Secret -Name "MyCredential" -Secret $credentials -Vault "MySecretVault" $CredentialInfo = [Microsoft.PowerShell.PSResourceGet.UtilClasses.PSCredentialInfo]::new('MySecretVault', 'MyCredential')Para verificar se o cofre e o segredo foram criados com êxito, execute o seguinte comando para listar todos os seus segredos:
PS > Get-SecretInfo Name Type VaultName ---- ---- --------- MyCredential PSCredential MySecretVaultExecute o comando a seguir para registrar seu repositório do PowerShell. Você pode encontrar o link
SourceLocationnavegando até Artefatos>Conectar ao Feed>NuGet.exe, na seção Configuração do projeto e > URL de origem.Feed do projeto com escopo:
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfoFeed da organização com escopo:
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfo
Dica
Algumas versões do PowerShell podem exigir o início de uma nova sessão após a execução do cmdlet
Register-PSResourceRepositorypara evitar encontrar o aviso Não é possível resolver a origem do pacote.Para verificar se o repositório foi registrado, execute o seguinte comando para recuperar todos os repositórios registrados para o usuário atual:
Get-PSResourceRepository
Observação
Se você encontrar o erro: O código de status da resposta não indica êxito: 404 (Não encontrado)., verifique se o URL de origem aponta para nuget/v3/index.json em vez de nuget/v2.
Publicar um pacote
Execute o comando a seguir para publicar o pacote no feed. Substitua os espaços reservados pelo caminho do pacote, pelo nome do repositório, pelo objeto de credencial criado anteriormente e forneça qualquer cadeia de caracteres para a ApiKey.
Publish-PSResource -Path <PACKAGE_PATH> -Repository <REPOSITORY_NAME> -Credential $credentials -ApiKey <ANY_STRING>
Exemplo:
PS C:\AzureDevOps\Demos\PowerShellDemo> Publish-PSResource -Path .\scripts\ -Repository FabrikamFiberFeed -Credential $credentials -ApiKey az -verbose
VERBOSE: Performing the operation "Publish-PSResource" on target "Publish resource
'C:\AzureDevOps\Demos\PowerShellDemo\scripts\' from the machine".
VERBOSE: The newly created nuspec is:
C:\Users\xxxx\AppData\Local\Temp\xxxxxxxxx\PowerShell-Demo.nuspec
VERBOSE: credential successfully read from vault and set for repository: FabrikamFiberFeed
VERBOSE: Successfully packed the resource into a .nupkg
VERBOSE: Successfully published the resource to
'https://pkgs.dev.azure.com/ramiMSFTDevOps/DemoProject/_packaging/FabrikamFiberFeed/nuget/v3/index.json'
VERBOSE: Deleting temporary directory 'C:\Users\xxxx\AppData\Local\Temp\xxxxxxx'
Instalar um pacote
Para confirmar se o módulo está disponível em seu repositório, use o seguinte comando para procurá-lo:
Find-PSResource -Name <RESOURCE_NAME> -Repository <REPOSITORY_NAME> -verboseExecute o seguinte comando para instalar a versão estável mais recente do seu módulo:
Install-PSResource <MODULE_NAME>
Dica
Se você encontrar o erro: Exceção chamando "WriteObject"., inicie uma nova janela do PowerShell e execute Get-SecretInfo. Insira a senha do cofre antes de executar Find-PSResource e Install-PSResource, pois o período de tempo limite do SecretStore pode expirar. O PasswordTimeout padrão é de 900 segundos, mas você pode modificar esse valor conforme necessário. Consulte Usar o SecretStore na automação para obter mais detalhes.
Neste artigo, você aprenderá a:
- Criar um token de acesso pessoal
- Criar, empacotar e publicar um módulo do PowerShell
- Conectar-se a um feed como um repositório do PowerShell
- Registrar e instalar um módulo do PowerShell usando o Azure Pipelines
Pré-requisitos
Crie no Azure DevOps uma organização e um projeto, caso ainda não tenha feito isso.
Crie um novo feed se você ainda não tiver um.
Instale o provedor de credenciais do Azure Artifacts.
Instale o WINDOWS MSBuild usando uma das seguintes opções:
Instale o NuGet(.exe) versão 4.8.0.5385 ou posterior.
Instale o dotnet Runtime versão 8.0.x ou posterior.
Instale o PowerShell 6.0 ou posterior para garantir que você tenha as versões apropriadas do PowerShellGet e packageManagement .
Criar um token de acesso pessoal
Um token de acesso pessoal atua como sua identidade digital e serve como uma senha alternativa para autenticação com o Azure DevOps.
Navegue até sua organização do Azure DevOps
https://dev.azure.com/<ORGANIZATION_NAME>/Selecione o ícone de configurações do usuário, selecione Tokens de acesso pessoal e, em seguida, selecione Novo Token.
Insira um nome para o seu PAT, defina uma data de Validade, selecione Definido pelo usuário e, em seguida, selecione Pacotes>Ler, gravar & gerenciar.
Selecione Criar quando terminar e copie e armazene seu PAT em um local seguro.
Criar um módulo do PowerShell
Se você não tiver seu próprio módulo, siga as instruções nesta seção para criar um módulo do PowerShell de exemplo. Caso contrário, vá para a próxima etapa:
Crie uma nova pasta Get-Hello. Navegue até sua pasta e crie um novo arquivo Get-Hello.psm1.
Cole o seguinte script no arquivo Get-Hello.psm1:
Function Get-Hello{ Write-Host "Hello Azure DevOps!" }Gere o manifesto do módulo executando o seguinte comando no diretório Get-Hello:
New-ModuleManifest -Path .\Get-Hello.psd1Abra o arquivo Get-Hello.psd1 e localize a variável
RootModule. Essa configuração especifica o arquivo de script principal que o PowerShell carrega quando o módulo é importado. Substitua a cadeia de caracteres vazia pelo caminho para o arquivo Get-Hello.psm1:RootModule = 'Get-Hello.psm1'A seção
FunctionsToExportespecifica quais funções podem ser acessadas pelos usuários quando eles importam seu módulo. Inclua sua função Get-Hello:FunctionsToExport = @('Get-Hello')Localize a seção
FileList, que especifica os arquivos incluídos ao empacotar o módulo. Adicione o arquivo que deseja empacotar com seu módulo:FileList = @('./Get-Hello.psm1')
Empacotar e publicar um módulo
Gere um arquivo nuspec para seu módulo. Esse comando cria um arquivo Get-Hello.nuspec contendo os metadados necessários para empacotar o módulo:
nuget spec Get-HelloExecute o seguinte comando para empacotar seu módulo:
nuget pack Get-Hello.nuspecExecute o comando a seguir para adicionar o URL de origem do feed. Use V2 no URL de origem do feed, pois não há suporte para o NuGet V3.
Feed da organização com escopo:
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 em seu feed:
nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
Importante
O número de versão no Manifesto do Módulo (.psd1) deve ser idêntico ao número de versão no arquivo .nuspec.
Conectar-se a um feed como um repositório do PowerShell
Esta seção orienta você na autenticação com um feed como um repositório do PowerShell e no consumo de um módulo hospedado em seu feed:
Em uma janela de prompt do PowerShell, execute o comando a seguir para configurar suas credenciais. Substitua os espaços reservados pelas informações adequadas.
$patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)Registre seu repositório do PowerShell. Você pode encontrar o link
SourceLocationnavegando até Artefatos>Conectar ao Feed>NuGet.exe, na seção Configuração do projeto e > URL de origem.Feed do projeto com escopo:
Register-PSRepository -Name <REPOSITORY_NAME> -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 $credsAzureDevopsServicesFeed da organização com escopo:
Register-PSRepository -Name <REPOSITORY_NAME> -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
Dica
Algumas versões do PowerShell podem exigir o início de uma nova sessão após a execução do cmdlet
Register-PSRepositorypara evitar encontrar o aviso Não é possível resolver a origem do pacote.Registre a origem do pacote:
Feed do projeto com escopo:
Register-PackageSource -Name <REPOSITORY_NAME> -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServicesFeed da organização com escopo:
Register-PackageSource -Name <REPOSITORY_NAME> -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Observação
- Register-PSRepository: usado para registrar um repositório do PowerShell para localizar e instalar módulos.
- Register-PackageSource: usado para registrar uma origem de pacote para localizar e publicar pacotes.
Para verificar se o repositório foi registrado, execute o seguinte comando para recuperar todos os repositórios registrados para o usuário atual:
Get-PSRepositoryExecute o seguinte comando para instalar o módulo Get-Hello.
Install-Module -Name <PACKAGE_NAME> -Repository <REPOSITORY_NAME>
Observação
Se sua organização estiver usando um firewall ou um servidor proxy, certifique-se de permitir o acesso a URLs de domínio e endereços IP do Azure Artifacts.
Instalar um pacote do seu pipeline
Este exemplo orienta você na autenticação com um feed do Azure Artifacts e na instalação de um módulo do PowerShell do pipeline. Para usar seu token de acesso pessoal, adicione-o como uma variável de pipeline, conforme mostrado abaixo:
Entre na sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines,selecione a definição do pipeline e, em seguida, selecione Editar para modificá-lo.
Selecione Variáveis no canto superior direito e, em seguida, selecione Nova variável.
Insira 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 em segredo. Quando terminar, selecione OK.
Adicione uma segunda variável para seu userName. Insira um Nome para sua variável e insira seu userName na caixa de texto Valor.
Selecione Salvar ao terminar.
trigger:
- main
pool:
vmImage: 'Windows-latest'
variables:
PackageFeedEndpoint: 'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2' ## For organization scoped feeds use'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2'
steps:
- powershell: |
$pat = ConvertTo-SecureString ${env:pat_token} -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential("${env:userName}", $pat)
Register-PSRepository -Name <REPOSITORY_NAME> -SourceLocation "$(PackageFeedEndpoint)" -InstallationPolicy Trusted -Credential $credential
displayName: 'Register PSRepository'
env:
pat_token: $patToken
userName: $userName
- powershell: |
nuget install <PACKAGE_NAME> -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json"
displayName: 'Install module'