Adicionar um repositório de artefatos a um laboratório

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

O repositório de artefatos público do 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 de artefatos público. Para saber mais sobre a criação de artefatos personalizados, consulte Criar artefatos personalizados. É possível adicionar seus artefatos personalizados ao seu próprio repositório de artefatos e adicionar o repositório ao 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 laboratório usando o portal do Azure, um modelo do ARM (Gerenciamento de Recursos do Azure) ou Azure PowerShell. Você também pode usar um script do Azure PowerShell ou CLI do Azure para automatizar a adição de um repositório de artefatos a um laboratório.

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Pré-requisitos

Para adicionar um repositório de artefatos a um laboratório, você precisa saber a URL de clone HTTPS do Git e o token de acesso pessoal para o repositório GitHub ou Azure Repos que tem os arquivos de artefato.

Obter a URL de clone e o token de acesso pessoal para o GitHub

  1. Na página inicial do repositório GitHub que tem seus artefatos, selecione Código e, em Clonar, copie a URL HTTPS.
  2. Selecione a imagem de perfil no canto superior direito do GitHub e, em seguida, selecione Configurações.
  3. Na página de perfil, no menu à esquerda, selecione Configurações do desenvolvedore, em seguida, selecione Tokens de acesso pessoal.
  4. Selecione Gerar novo token.
  5. Na página Novo token de acesso pessoal, em Observação insira uma descrição opcional para o token. Aceitar todos os padrões e, em seguida, selecioneGerar token.
  6. Salve o token gerado.

Obter a URL de clone e o token de acesso pessoal para Azure Repos

  1. Na página principal do repositório que tem seus artefatos, selecione Clonar. Na página Clonar Repositório, copie a URL do clone.
  2. No canto superior direito da página Azure DevOps, selecione Configurações do usuário>Tokens de acesso pessoal.
  3. Na página Tokens de acesso pessoal, selecione Novo token.
  4. Preencha as informações do token, selecionando Ler para os escopos e, em seguida, selecione Criar.
  5. Na página Êxito, não se esqueça de copiar o token, porque Azure Repos não armazena o token ou o mostra novamente.

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

  1. Na página Visão geral do laboratório, selecione Configuração e políticas no painel de navegação esquerdo.

  2. Na página Configuração e políticas, selecione Repositórios em Recursos externos no painel de 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á habilita-lo selecionando a caixa de seleção ao lado de Repositório público de artefatos e, em seguida, selecionando Habilitar na barra de menus superior.

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

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

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

    • Nome: um nome de repositório a ser usado no laboratório.
    • URL de clone do Git: a URL de clone HTTPS do Git por meio do GitHub ou do Azure Repos.
    • Branch (opcional): o branch que possui suas definições de artefato.
    • Token de acesso pessoal: o token de acesso pessoal GitHub ou Azure Repos.
    • Caminhos de pasta: a pasta para suas definições de modelo do ARM, em relação à URL de clone do Git. Certifique-se de incluir a barra inicial no caminho da pasta.
  5. Clique em Salvar.

    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 do ARM

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

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

Revisar um modelo do 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 de implantação 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 do repositório de artefatos no DevTest Labs. O valor padrão é Team Repository.
  • O URI do repositório de artefatos copiado anteriormente.
  • A Branch do repositório que contém os artefatos. O valor padrão é main.
  • Nome da pasta que contém os artefatos. O valor padrão será "/Artifacts".
  • Tipo de repositório. Os valores permitidos são VsoGit, para Azure Repos ou GitHub.
  • Token de acesso pessoal para o repositório copiado 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"
                    }
                }
            ]
        }
    ]
}

Implantar o modelo

Há várias maneiras de implantar modelos do 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.

Observação

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. Criar 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 no mesmo grupo de recursos. Se você estiver implantando várias vezes no mesmo grupo de recursos, certifique-se de que cada nome de implantação seja exclusivo.

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

Depois de New-AzResourceGroupDeployment executado 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 exemplo de script do PowerShell a seguir,New-DevTestLabArtifactRepository.ps1, adiciona um repositório de artefatos a um laboratório. O script completo inclui algumas mensagens detalhadas e comentários.


<#

.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 11111111-1111-1111-1111-111111111111
.\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 Descrição
LabName O nome do lab.
ArtifactRepositoryName Nome do novo repositório de artefatos. O script criará 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 O URI do repositório de artefatos copiado anteriormente.
RepositoryBranch A Branch do repositório que contém os artefatos. O valor padrão é main.
FolderPath Pasta que contém os artefatos. O valor padrão será "/Artifacts".
PersonalAccessToken Token de segurança para acessar o repositório copiado anteriormente.
SourceType Se o repositório de artefatos é um vsoGit (Azure Repos) ou GitHub repositório.

O próprio repositório precisa de um nome interno para identificação, que é diferente do nome de exibição no portal do Azure. Você não vê o nome interno quando usar o portal do Azure, mas o vê ao usar APIs REST do Azure ou Azure PowerShell. O script criará um nome aleatório se o comando de implantação 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 Observações
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 no mesmo grupo de recursos que o laboratório.
New-AzResource Adiciona o recurso do Azure. Não há nenhum comando específico para adicionar repositórios de artefatos. Esse cmdlet precisa do par ResourceId ou de ResourceName e ResourceType para saber o tipo de recurso a ser criado. O script atual usa o par ResourceName e ResourceType.

Uma boa maneira de descobrir o nome do recurso e as informações do tipo de recurso é usar o site do Navegador da API REST do Azure. As Fontes de artefatos do DevTest Labs mostra APIs REST para criar e gerenciar fontes de artefato 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 que está listado após providers no URI, exceto os itens entre colchetes. O nome do recurso é tudo entre colchetes. 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, PersonalAccessToken, e 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óximas etapas