Partilhar via


Adicionar um repositório de artefacto para um laboratório

Este artigo explica como adicionar um repositório de artefatos ao seu laboratório no Azure DevTest Labs. Artefatos são ferramentas ou aplicativos para instalar em máquinas virtuais (VMs). Você define artefatos em um arquivo JSON que carrega de um repositório GitHub ou Azure Repos Git.

O repositório público de artefatos GitHub do DevTest Labs fornece muitos artefatos comuns para Windows e Linux. Os artefatos neste repositório público estão disponíveis por padrão no DevTest Labs. Para obter informações sobre como adicionar artefatos a VMs, consulte Adicionar artefatos a VMs do DevTest Labs.

Você também pode criar artefatos personalizados que não estão disponíveis no repositório público de artefatos. Para saber mais sobre como criar artefatos personalizados, consulte Criar artefatos personalizados. Você pode adicionar seus artefatos personalizados ao seu próprio repositório de artefatos e adicionar o repositório ao seu laboratório para que todos os usuários do laboratório possam usar os artefatos.

Este artigo mostra como adicionar um repositório de artefatos ao seu laboratório usando o portal do Azure, um modelo de Gerenciamento de Recursos do Azure (ARM) ou o Azure PowerShell. Você também pode usar um script do Azure PowerShell ou da CLI do Azure para automatizar a adição de um repositório de artefatos a um laboratório.

Nota

Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Adicionar um repositório de artefatos

Você pode adicionar um repositório de artefatos de um repositório do Azure Repos ou de um repositório do GitHub. Você pode optar por autenticar atribuindo permissões a uma identidade gerenciada, usando a autenticação do aplicativo GitHub ou usando um PAT. Para saber mais sobre identidades gerenciadas, consulte O que são identidades gerenciadas para recursos do Azure?

Selecione a guia para o tipo de repositório e autenticação que você deseja usar.

Para adicionar um repositório de artefatos, conclua as seguintes tarefas:

  • Atribua permissões no Azure Repos para a identidade gerenciada.
  • Adicione seu repositório de artefatos.

Atribuir permissões no Azure Repos para a identidade gerenciada

Você deve conceder as permissões de identidade gerenciada para o repositório no Azure Repos.

  1. Entre na sua organização do Azure DevOps.

    Nota

    Sua organização do Azure DevOps deve estar no mesmo diretório que a assinatura do Azure que contém seu laboratório.

  2. Selecione Definições da organização.

    Captura de ecrã a mostrar a página da organização do Azure DevOps, com as Definições da Organização realçadas.

  3. Na página Visão geral, selecione Usuários.

    Captura de tela mostrando a página Visão geral da organização, com Usuários realçados.

  4. Na página Usuários, selecione Adicionar usuários.

    Captura de ecrã a mostrar a página Utilizadores, com Adicionar utilizador realçado.

  5. Conclua Adicionar novos usuários inserindo ou selecionando as seguintes informações e selecione Adicionar:

    Nome Valor
    Usuários ou Entidades de Serviço Insira o nome do seu laboratório.
    Ao usar um MSI atribuído pelo sistema, especifique o nome do laboratório, não o ID do objeto da conta gerenciada. Quando você usa um MSI atribuído pelo usuário, use o nome da conta gerenciada.
    Nível de acesso Selecione Básico.
    Adicionar aos projetos Selecione o projeto que contém seu repositório.
    Grupos de DevOps do Azure Selecione Leitores de projeto.
    Enviar convites por e-mail (apenas para Utilizadores) Desmarque a caixa de seleção.

    Captura de ecrã a mostrar Adicionar utilizadores, com entradas de exemplo e Adicionar realçadas.

Adicionar um repositório de artefatos do Azure DevOps a um laboratório no portal do Azure

  1. Na página Visão geral do laboratório, selecione Configuração e políticas na navegação à esquerda.

  2. Na página Configuração e políticas, selecione Repositórios em Recursos externos na navegação à esquerda.

    Na página Repositórios, o repositório de artefatos públicos está automaticamente presente e se conecta ao repositório público do GitHub do DevTest Labs. Se esse repositório não estiver habilitado para seu laboratório, você poderá habilitá-lo marcando a caixa de seleção ao lado de Public Artifact Repo, e selecionando Enable na barra de menu superior.

  3. Para adicionar seu repositório de artefatos ao laboratório, selecione Adicionar na barra de menu superior.

    Captura de tela que mostra a tela de configuração dos repositórios.

  4. No painel Repositório, insira as seguintes informações:

    • Nome: Um nome de repositório para usar no laboratório.
    • URL de clone do Git: a URL de clone do Git HTTPS do Azure Repos.
    • Ramificação (opcional): a ramificação que tem suas definições de artefato.
    • Caminhos de pasta: a pasta para suas definições de modelo ARM, relativa à URL de clone do Git. Certifique-se de incluir a barra inicial no caminho da pasta.
    • Identidade gerenciada: use esta opção para aproveitar a identidade gerenciada para autenticação.
  5. Selecione Guardar.

    Captura de tela que mostra a adição de um novo repositório de artefatos a um laboratório.

O repositório agora aparece na lista Repositórios do laboratório.

Adicionar um repositório de artefatos usando um modelo ARM

Os modelos ARM são arquivos JSON que descrevem os recursos do Azure a serem criados. Para obter mais informações sobre modelos ARM, consulte Compreender a estrutura e a sintaxe dos modelos ARM.

O modelo ARM a seguir adiciona um repositório de artefatos a um laboratório. O modelo cria o laboratório se ele ainda não existir.

Rever o modelo ARM

O modelo de exemplo reúne as seguintes informações em parâmetros. Alguns dos parâmetros têm padrões, mas o comando deployment deve especificar o nome do laboratório, o URI do repositório de artefatos, o tipo de repositório e o token de acesso pessoal do repositório.

  • Nome do laboratório.
  • Nome de exibição para o repositório de artefatos no DevTest Labs. O valor predefinido é Team Repository.
  • URI do repositório de artefatos, que você copiou anteriormente.
  • Ramificação do repositório que contém os artefatos. O valor predefinido é main.
  • Nome da pasta que contém os artefatos. O valor padrão é: /Artifacts.
  • Tipo de repositório. Os valores permitidos são VsoGit, para Azure Repos, ou GitHub.
  • Token de acesso pessoal para o repositório, que você copiou anteriormente.
{

    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "labName": {
            "type": "string"
        },
        "artifactRepositoryDisplayName": {
            "type": "string",
            "defaultValue": "Team Repository"
        },
        "artifactRepoUri": {
            "type": "string"
        },
        "artifactRepoBranch": {
            "type": "string",
            "defaultValue": "main"
        },
        "artifactRepoFolder": {
            "type": "string",
            "defaultValue": "/Artifacts"
        },
        "artifactRepoType": {
            "type": "string",
            "allowedValues": ["VsoGit", "GitHub"]
        },
        "artifactRepoSecurityToken": {
            "type": "securestring"
        }
    },
    "variables": {
        "artifactRepositoryName": "[concat('Repo-', uniqueString(subscription().subscriptionId))]"
    },
    "resources": [{
            "apiVersion": "2016-05-15",
            "type": "Microsoft.DevTestLab/labs",
            "name": "[parameters('labName')]",
            "location": "[resourceGroup().location]",
            "resources": [
                {
                    "apiVersion": "2016-05-15",
                    "name": "[variables('artifactRepositoryName')]",
                    "type": "artifactSources",
                    "dependsOn": [
                        "[resourceId('Microsoft.DevTestLab/labs', parameters('labName'))]"
                    ],
                    "properties": {
                        "uri": "[parameters('artifactRepoUri')]",
                        "folderPath": "[parameters('artifactRepoFolder')]",
                        "branchRef": "[parameters('artifactRepoBranch')]",
                        "displayName": "[parameters('artifactRepositoryDisplayName')]",
                        "securityToken": "[parameters('artifactRepoSecurityToken')]",
                        "sourceType": "[parameters('artifactRepoType')]",
                        "status": "Enabled"
                    }
                }
            ]
        }
    ]
}

Implementar o modelo

Há várias maneiras de implantar modelos ARM para criar ou atualizar recursos do Azure. Para obter informações e instruções, consulte os seguintes artigos:

Para este exemplo, implante o modelo usando o Azure PowerShell.

Nota

Os cmdlets que implantam o modelo são específicos do contexto, portanto, usam o locatário e a assinatura atuais. Se você precisar alterar o contexto, use Set-AzContext antes de implantar o modelo

  1. Crie um grupo de recursos usando New-AzResourceGroup. Se o grupo de recursos que você deseja usar já existir, ignore esta etapa.

    New-AzResourceGroup -Name MyLabResourceGroup1 -Location westus
    
  2. Crie uma implantação para o grupo de recursos usando New-AzResourceGroupDeployment. Você pode fazer várias implantações de recursos para o mesmo grupo de recursos. Se você estiver implantando várias vezes no mesmo grupo de recursos, verifique se cada nome de implantação é exclusivo.

    New-AzResourceGroupDeployment `
        -Name MyLabResourceGroup-Deployment1 `
        -ResourceGroupName MyLabResourceGroup1 `
        -TemplateFile azuredeploy.json `
        -TemplateParameterFile azuredeploy.parameters.json
    

Depois New-AzResourceGroupDeployment de executada com êxito, a saída mostra informações importantes, como o estado de provisionamento, que deve ser succeeded, e quaisquer saídas para o modelo.

Adicionar um repositório de artefatos usando o Azure PowerShell

O seguinte exemplo de script do PowerShell, New-DevTestLabArtifactRepository.ps1, adiciona um repositório de artefatos a um laboratório. O script completo inclui algumas mensagens e comentários detalhados.


<#

.SYNOPSIS
This script creates a new custom repository and adds it to an existing DevTest Lab.

.PARAMETER LabName
The name of the lab.

.PARAMETER LabResourceGroupName
The name of the resource group that contains the lab.

.PARAMETER ArtifactRepositoryName
Name for the new artifact repository. The script creates a random name for the repository if not specified.

.PARAMETER ArtifactRepositoryDisplayName
Display name for the artifact repository.
This name appears in the list of artifact repositories for a lab.

.PARAMETER RepositoryUri
Uri to the artifact repository.

.PARAMETER RepositoryBranch
Branch that contains the artifact files. Defaults to 'main'.

.PARAMETER FolderPath
Folder that contains the artifact files. Defaults to '/Artifacts'

.PARAMETER PersonalAccessToken
Personal access token for the GitHub or Azure Repos repository.

.PARAMETER SourceType
Whether the artifact repository is a VSOGit (Azure Repos) or GitHub repository.

.EXAMPLE
Set-AzContext -SubscriptionId aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
.\New-DevTestLabArtifactRepository.ps1 -LabName "mydevtestlab" -LabResourceGroupName "mydtlrg" -ArtifactRepositoryName "MyTeam Repository" -RepositoryUri "https://github.com/<myteam>/<nameofrepo>.git" -PersonalAccessToken "1111...." -SourceType "GitHub"

.NOTES
The script uses the current Azure context. To set the context, use Set-AzContext.

#>


[CmdletBinding()]
Param(

    [Parameter(Mandatory=$true)]
    $LabName,

    [Parameter(Mandatory=$true)]
    $LabResourceGroupName,
    $ArtifactRepositoryName,
    $ArtifactRepositoryDisplayName  = 'Team Artifact Repository',

    [Parameter(Mandatory=$true)]
    $RepositoryUri,
    $RepositoryBranch = 'main',
    $FolderPath = '/Artifacts',

    [Parameter(Mandatory=$true)]
    $PersonalAccessToken ,

    [Parameter(Mandatory=$true)]
    [ValidateSet('VsoGit', 'GitHub')]
    $SourceType
)

# Set artifact repository internal name if not specified.

if ($ArtifactRepositoryName -eq $null){
    $ArtifactRepositoryName = "PrivateRepo" + (Get-Random -Maximum 999)
}

# Sign in to Azure.
Connect-AzAccount


#Get Lab Resource.
$LabResource = Get-AzResource -ResourceType 'Microsoft.DevTestLab/labs' -ResourceName $LabName -ResourceGroupName $LabResourceGroupName

Write-Verbose "Lab Name: $($LabResource.Name)"
Write-Verbose "Lab Resource Group Name: $($LabResource.ResourceGroupName)"
Write-Verbose "Lab Resource Location: $($LabResource.Location)"

Write-Verbose "Artifact Repository Internal Name: $ArtifactRepositoryName"

#Prepare properties object for the call to New-AzResource.
$propertiesObject = @{
    uri = $RepositoryUri;
    folderPath = $FolderPath;
    branchRef = $RepositoryBranch;
    displayName = $ArtifactRepositoryDisplayName;
    securityToken = $PersonalAccessToken;
    sourceType = $SourceType;
    status = 'Enabled'
}

Write-Verbose "Properties to be passed to New-AzResource:$($propertiesObject | Out-String)"

#Add resource to the current subscription.
$resourcetype = 'Microsoft.DevTestLab/labs/artifactSources'
$resourceName = $LabName + '/' + $ArtifactRepositoryName
Write-Verbose "Az ResourceType: $resourcetype"
Write-Verbose "Az ResourceName: $resourceName"

Write-Verbose "Creating artifact repository '$ArtifactRepositoryDisplayName'..."
$result = New-AzResource -Location $LabResource.Location -ResourceGroupName $LabResource.ResourceGroupName -properties $propertiesObject -ResourceType $resourcetype -ResourceName $resourceName -ApiVersion 2016-05-15 -Force

#Alternate implementation:
# Use resourceId rather than resourcetype and resourcename parameters.
# Using resourceId lets you specify the $SubscriptionId rather than using the
# subscription id of Get-AzContext.
#$resourceId = "/subscriptions/$SubscriptionId/resourceGroups/$($LabResource.ResourceGroupName)/providers/Microsoft.DevTestLab/labs/$LabName/artifactSources/$ArtifactRepositoryName"
#$result = New-AzResource -properties $propertiesObject -ResourceId $resourceId -ApiVersion 2016-05-15 -Force


# Check the result.
if ($result.Properties.ProvisioningState -eq "Succeeded") {
    Write-Verbose ("Successfully added artifact repository source '$ArtifactRepositoryDisplayName'")
}
else {
    Write-Error ("Error adding artifact repository source '$ArtifactRepositoryDisplayName'")
}

#Return the newly created resource to use in later scripts.
return $result

Parâmetros

O script do PowerShell usa os seguintes parâmetros:

Parâmetro Description
LabName O nome do laboratório.
ArtifactRepositoryName Nome para o novo repositório de artefatos. O script cria um nome aleatório para o repositório se ele não for especificado.
ArtifactRepositoryDisplayName Nome de exibição que aparece na lista de repositórios de artefatos do laboratório.
RepositoryUri URI do repositório de artefatos, que você copiou anteriormente.
RepositoryBranch Ramificação do repositório que contém os artefatos. O valor predefinido é main.
FolderPath Pasta que contém os artefatos. O valor padrão é: /Artifacts.
PersonalAccessToken Token de segurança para acessar o repositório, que você copiou anteriormente.
SourceType Se o repositório de artefatos é um repositório VSOGit (Azure Repos) ou GitHub.

O repositório precisa de um nome interno para identificação, que é diferente do nome para exibição no portal do Azure. Você não vê o nome interno ao usar o portal do Azure, mas o vê ao usar APIs REST do Azure ou Azure PowerShell. O script cria um nome aleatório se o comando deployment não especificar um.

#Set artifact repository name, if not set by user
if ($ArtifactRepositoryName -eq $null){
    $ArtifactRepositoryName = "PrivateRepo" + (Get-Random -Maximum 999)
}

Comandos do PowerShell

O script usa os seguintes comandos do PowerShell:

Comando Notas
Get-AzResource Obtém detalhes sobre o laboratório, como sua localização. Você cria a origem do repositório de artefatos no mesmo local e sob o mesmo grupo de recursos que o laboratório.
New-AzResource Adiciona o recurso do Azure. Não há um comando específico para adicionar repositórios de artefatos. Este cmdlet precisa do ResourceId par ou do ResourceName e ResourceType para saber o tipo de recurso a ser criado. O script atual usa o ResourceName par e ResourceType .

Uma boa maneira de descobrir informações de nome e tipo de recurso é usar o site do Navegador da API REST do Azure. DevTest Labs Artifact Sources mostra APIs REST para criar e gerenciar fontes de artefatos do DevTest Labs. O script atual usa a seguinte ID de recurso:

https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/artifactsources/{name}

O tipo de recurso é tudo listado depois providers no URI, exceto itens entre colchetes. O nome do recurso é tudo entre parênteses. Se você usar mais de um item para o nome do recurso, separe cada item com uma barra:

$resourcetype = 'Microsoft.DevTestLab/labs/artifactSources'
$resourceName = $LabName + '/' + $ArtifactRepositoryName

Executar o script do PowerShell

Execute o script do PowerShell, substituindo seus próprios valores pelos valores de exemplo em LabName, LabResourceGroupName, ArtifactRepositoryName, RepositoryUri, PersonalAccessTokene SourceType:

Set-AzContext -SubscriptionId <Your Azure subscription ID>

.\New-DevTestLabArtifactRepository.ps1 -LabName "mydevtestlab" -LabResourceGroupName "mydtlrg" -ArtifactRepositoryName "myteamrepository" -RepositoryUri "https://github.com/myteam/myteamrepository.git" - "1111...." -SourceType "GitHub"

Próximos passos