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

Este artigo informa-o sobre como adicionar um repositório de artefactos ao seu laboratório no Azure DevTest Labs. Os artefactos são ferramentas ou aplicações a instalar em máquinas virtuais (VMs). Define artefactos num ficheiro JSON que carrega a partir de um repositório git do GitHub ou do Repositório do Azure.

O repositório de artefactos do GitHub do DevTest Labs público fornece muitos artefactos comuns para Windows e Linux. Os artefactos neste repositório público estão disponíveis por predefinição no DevTest Labs. Para obter informações sobre como adicionar artefactos a VMs, veja Add artifacts to DevTest Labs VMs (Adicionar artefactos a VMs do DevTest Labs).

Também pode criar artefactos personalizados que não estão disponíveis no repositório de artefactos público. Para saber mais sobre a criação de artefactos personalizados, veja Criar artefactos personalizados. Pode adicionar os artefactos personalizados ao seu próprio repositório de artefactos e adicionar o repositório ao laboratório para que todos os utilizadores do laboratório possam utilizar os artefactos.

Este artigo mostra-lhe como adicionar um repositório de artefactos ao seu laboratório com o portal do Azure, um modelo do Azure Resource Management (ARM) ou Azure PowerShell. Também pode utilizar um script Azure PowerShell ou da CLI do Azure para automatizar a adição de um repositório de artefactos a um laboratório.

Nota

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

Pré-requisitos

Para adicionar um repositório de artefactos a um laboratório, tem de saber o URL de clone do Git HTTPS e o token de acesso pessoal do repositório do GitHub ou do Repositório do Azure que tem os ficheiros de artefacto.

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

  1. Na home page do repositório do GitHub que tem os artefactos, selecione Código e, em Clonar, copie o URL https.
  2. Selecione a sua imagem de perfil no canto superior direito do GitHub e, em seguida, selecione Definições.
  3. Na sua página de perfil, no menu à esquerda, selecione Definições do Programador e, em seguida, selecione Tokens de acesso pessoal.
  4. Selecione Gerar novo token.
  5. Na página Novo token de acesso pessoal , em Nota, introduza uma descrição opcional para o token. Aceite todas as predefinições e, em seguida, selecione Gerar token.
  6. Guarde o token gerado.

Obter o URL de clone e o token de acesso pessoal para repositórios do Azure

  1. Na página principal do repositório que tem os artefactos, selecione Clonar. Na página Clonar Repositório , copie o URL do clone.
  2. No canto superior direito da página do Azure DevOps, selecione Definições do utilizador Tokens> deacesso pessoal.
  3. Na página Tokens de Acesso Pessoal , selecione Novo Token.
  4. Preencha as informações do token, selecione Ler para os âmbitos e, em seguida, selecione Criar.
  5. Na página Êxito , certifique-se de que copia o token porque os Repositórios do Azure não armazenam o token ou mostram-no novamente.

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

  1. Na página Descriçã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 esquerdo.

    Na página Repositórios, o Repositório de Artefactos Públicos está automaticamente presente e liga-se ao repositório público do GitHub de DevTest Labs. Se este repositório não estiver ativado para o seu laboratório, pode ativá-lo ao selecionar a caixa de verificação junto a Repositório de Artefactos Públicos e, em seguida, selecionar Ativar na barra de menus superior.

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

    Captura de ecrã que mostra o ecrã de configuração repositórios.

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

    • Nome: um nome de repositório a utilizar no laboratório.
    • URL de clone do Git: o URL de clone de HTTPS do Git a partir do GitHub ou dos Repositórios do Azure.
    • Ramo (opcional): o ramo que tem as definições dos artefactos.
    • Token de acesso pessoal: o token de acesso pessoal do GitHub ou dos Repositórios do Azure.
    • Caminhos de pastas: a pasta para as definições de modelo do ARM, relativa ao URL do git clone. Certifique-se de que inclui a barra de reencaminhamento inicial no caminho da pasta.
  5. Selecione Guardar.

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

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

Adicionar um repositório de artefactos com um modelo do ARM

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

O seguinte modelo do ARM adiciona um repositório de artefactos a um laboratório. O modelo cria o laboratório se ainda não existir.

Rever o modelo do ARM

O modelo de exemplo recolhe as seguintes informações em parâmetros. Alguns dos parâmetros têm predefinições, mas o comando de implementação tem de especificar o nome do laboratório, o URI do repositório de artefactos, o tipo de repositório e o token de acesso pessoal do repositório.

  • Nome do laboratório.
  • Nome a apresentar para o repositório de artefactos no DevTest Labs. O valor predefinido é Team Repository.
  • URI do repositório de artefactos, que copiou anteriormente.
  • Ramo de repositório que contém os artefactos. O valor predefinido é main.
  • Nome da pasta que contém os artefactos. O valor predefinido é: /Artifacts.
  • Tipo de repositório. Os valores permitidos são VsoGit, para Repositórios do Azure ou GitHub.
  • Token de acesso pessoal para o repositório, que 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

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

Neste exemplo, implemente o modelo com Azure PowerShell.

Nota

Os cmdlets que implementam o modelo são específicos do contexto, pelo que utilizam o inquilino e a subscrição atuais. Se precisar de alterar o contexto, utilize Set-AzContext antes de implementar o modelo

  1. Crie um grupo de recursos com New-AzResourceGroup. Se o grupo de recursos que pretende utilizar já existir, ignore este passo.

    New-AzResourceGroup -Name MyLabResourceGroup1 -Location westus
    
  2. Crie uma implementação para o grupo de recursos com New-AzResourceGroupDeployment. Pode efetuar várias implementações de recursos no mesmo grupo de recursos. Se estiver a implementar várias vezes no mesmo grupo de recursos, certifique-se de que cada nome de implementação é exclusivo.

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

Após New-AzResourceGroupDeployment a execução com êxito, o resultado mostra informações importantes, como o estado de aprovisionamento, que deve ser succeeded, e quaisquer saídas para o modelo.

Adicionar um repositório de artefactos com Azure PowerShell

O seguinte script do PowerShell de exemplo, New-DevTestLabArtifactRepository.ps1, adiciona um repositório de artefactos a um laboratório. O script completo inclui algumas mensagens verbosas 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 utiliza os seguintes parâmetros:

Parâmetro Descrição
LabName O nome do laboratório.
ArtifactRepositoryName Nome do novo repositório de artefactos. O script cria um nome aleatório para o repositório, se não for especificado.
ArtifactRepositoryDisplayName Nome a apresentar que aparece na lista de repositórios de artefactos do laboratório.
RepositoryUri URI do repositório de artefactos, que copiou anteriormente.
RepositoryBranch Ramo de repositório que contém os artefactos. O valor predefinido é main.
FolderPath Pasta que contém os artefactos. O valor predefinido é: /Artifacts.
PersonalAccessToken Token de segurança para aceder ao repositório, que copiou anteriormente.
SourceType Se o repositório de artefactos é um VSOGit (Repositórios do Azure) ou um repositório do GitHub.

O repositório precisa de um nome interno para identificação, que é diferente do nome a apresentar no portal do Azure. Não vê o nome interno ao utilizar o portal do Azure, mas vê-o ao utilizar as APIs REST do Azure ou Azure PowerShell. O script cria um nome aleatório se o comando de implementaçã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 utiliza os seguintes comandos do PowerShell:

Comando Notas
Get-AzResource Obtém detalhes sobre o laboratório, como a localização. Pode criar a origem do repositório de artefactos na mesma localização e no mesmo grupo de recursos que o laboratório.
New-AzResource Adiciona o recurso do Azure. Não existe um comando específico para adicionar repositórios de artefactos. Este cmdlet precisa do ou do ResourceIdResourceName par e ResourceType para saber o tipo de recurso a criar. O script atual utiliza o ResourceName par e ResourceType .

Uma boa forma de descobrir o nome do recurso e as informações do tipo de recurso é utilizar o site do Browser da API REST do Azure . DevTest Labs Artifact Sources (Origens de Artefactos do DevTest Labs) mostra as APIs REST para criar e gerir origens de artefactos do DevTest Labs. O script atual utiliza o seguinte ID de recurso:

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

O tipo de recurso é tudo o que é listado depois providers no URI, exceto para itens entre parênteses retos. O nome do recurso está tudo entre parênteses retos. Se utilizar mais do que 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 os seus próprios valores pelos valores de exemplo em LabName, LabResourceGroupName, ArtifactRepositoryName, , RepositoryUrie PersonalAccessTokenSourceType:

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"

Passos seguintes