Incorporación de un repositorio de artefactos a un laboratorio

En este artículo se explica cómo agregar un repositorio de artefactos al laboratorio en Azure DevTest Labs. Los artefactos son herramientas o aplicaciones que se instalan en las máquinas virtuales (VM). Se definen en un archivo JSON que se carga desde un repositorio de GitHub o un repositorio Git de Azure Repos.

El repositorio de artefactos de GitHub de DevTest Labs público proporciona muchos artefactos comunes para Windows y Linux. Los artefactos de este repositorio público están disponibles de forma predeterminada en DevTest Labs. Para obtener más información sobre cómo agregar artefactos a las máquinas virtuales, consulte el apartado Adición de artefactos a máquinas virtuales de DevTest Labs.

También puede crear artefactos personalizados que no estén disponibles en el repositorio de artefactos público. Para aprender a crear artefactos personalizados, consulte Creación de artefactos personalizados. Puede agregar artefactos personalizados a su repositorio de artefactos propio y agregar el repositorio a su laboratorio para que todos los usuarios de este puedan usar los artefactos.

En este artículo se muestra cómo agregar un repositorio de artefactos al laboratorio mediante Azure Portal, una plantilla de Azure Resource Management (ARM) o Azure PowerShell. También puede usar un script de la CLI de Azure o Azure PowerShell para automatizar la adición de un repositorio de artefactos a un laboratorio.

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Consulte Instalación de Azure PowerShell para empezar. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Requisitos previos

Para agregar un repositorio de artefactos a un laboratorio, debe conocer la dirección URL de clonación HTTPS de Git y el token de acceso personal del repositorio de GitHub o de Azure Repos que tiene los archivos de artefacto.

Obtención de la dirección URL de clonación y del token de acceso personal para GitHub

  1. En la página principal del repositorio de GitHub que tiene los artefactos, seleccione Código y copie la dirección URL HTTPS en Clonar.
  2. En la esquina superior derecha de GitHub, seleccione la imagen del perfil y, después, seleccione Configuración.
  3. En el menú de la izquierda de la página del perfil, seleccione Configuración de desarrollador y, a continuación, seleccione Tokens de acceso personal.
  4. Seleccione Generar nuevo token.
  5. En la página New personal access token (Nuevo token de acceso personal), en Nota, escriba una descripción opcional del token. Acepte todos los valores predeterminados y, a continuación, seleccione Generar token.
  6. Guarde el token generado.

Obtención de la dirección URL de clonación y del token de acceso personal para Azure Repos

  1. En la página principal del repositorio que tiene los artefactos, seleccione Clonar. En la página Clonar repositorio, copie la dirección URL de clonación.
  2. En la esquina superior derecha de la página de Azure DevOps, seleccione Configuración del usuario>Tokens de acceso personal.
  3. En la página Tokens de acceso personal, seleccione Nuevo token.
  4. Rellene la información del token, seleccione Leer para los ámbitos y, a continuación, seleccione Crear.
  5. En la página Correcto, asegúrese de copiar el token, ya Azure Repos no almacena el token ni lo vuelve a mostrar.

Adición de un repositorio de artefactos a un laboratorio en Azure Portal

  1. En la página Información general del laboratorio, seleccione Configuración y directivas en el panel de navegación izquierdo.

  2. En la página Configuración y directivas, seleccione Repositorios bajo Recursos externos en el panel de navegación izquierdo.

    En la página Repositorios, aparece automáticamente Public Artifact Repo (Repositorio de artefactos público) y se conecta con el repositorio de GitHub público de DevTest Labs. Si este repositorio no está habilitado para su laboratorio, seleccione la casilla situada junto a Public Artifact Repo (Repositorio de artefactos público) y, a continuación, seleccione Habilitar en la barra de menús superior para habilitarlo.

  3. Para agregar el repositorio de artefactos al laboratorio, seleccione Agregar en la barra de menús superior.

    Captura de pantalla que muestra la pantalla de configuración de repositorios.

  4. En el panel Repositorio, escriba la información siguiente:

    • Nombre: nombre del repositorio que se va a usar en el laboratorio.
    • URL de clonación de GIT: la dirección URL de clonación HTTPS Git de GitHub o Azure Repos.
    • Rama (opcional): la rama que tiene las definiciones de los artefactos.
    • Token de acceso personal: el token de acceso personal de GitHub o Azure Repos.
    • Rutas de acceso de carpeta: carpeta para las definiciones de plantilla de ARM, en relación con la dirección URL de clonación de Git. Asegúrese de incluir la barra diagonal inicial en la ruta de acceso de la carpeta.
  5. Seleccione Guardar.

    Captura de pantalla que muestra la adición de un nuevo repositorio de artefactos a un laboratorio.

El repositorio ahora aparece en la lista Repositorios del laboratorio.

Adición de un repositorio de artefactos mediante una plantilla de ARM

Las plantillas de ARM son archivos JSON que describen los recursos de Azure que se van a crear. Para obtener más información sobre las plantillas de ARM, consulte Nociones sobre la estructura y la sintaxis de las plantillas de Azure Resource Manager.

La plantilla de ARM siguiente agrega un repositorio de artefactos a un laboratorio. La plantilla crea el laboratorio, en caso de que no exista.

Revisión de la plantilla de ARM

La plantilla de ejemplo recopila la información siguiente en parámetros. Algunos de los parámetros tienen valores predeterminados, pero el comando de implementación debe especificar el nombre del laboratorio, el URI del repositorio de artefactos, el tipo de repositorio y el token de acceso personal del repositorio.

  • Nombre de laboratorio.
  • Nombre para mostrar del repositorio de artefactos en DevTest Labs. El valor predeterminado es Team Repository.
  • Identificador URI del repositorio de artefactos, que copió anteriormente.
  • Rama del repositorio que contiene los artefactos. El valor predeterminado es main.
  • Nombre de la carpeta que contiene los artefactos. El valor predeterminado es: /Artifacts.
  • Tipo de repositorio. Los valores permitidos son VsoGit, para Azure Repos, o GitHub.
  • Token de acceso personal para el repositorio, que copió 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"
                    }
                }
            ]
        }
    ]
}

Implementación de la plantilla

Hay varias formas de implementar las plantillas de ARM para crear o actualizar recursos de Azure. Para obtener información e instrucciones, consulte los artículos siguientes:

Para este ejemplo, implemente la plantilla mediante Azure PowerShell.

Nota:

Los cmdlets que implementan la plantilla son específicos del contexto, por lo que usan el inquilino y la suscripción actuales. Si necesita cambiar el contexto, use Set-AzContext antes de implementar la plantilla.

  1. Cree un grupo de recursos con New-AzResourceGroup. Si el grupo de recursos que desea utilizar ya existe, omita este paso.

    New-AzResourceGroup -Name MyLabResourceGroup1 -Location westus
    
  2. Cree una implementación para el grupo de recursos mediante New AzResourceGroupDeployment. Puede realizar varias implementaciones de recursos en el mismo grupo de recursos. Si va a realizar la implementación varias veces en el mismo grupo de recursos, asegúrese de que el nombre de cada implementación sea único.

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

Después de que New-AzResourceGroupDeployment se ejecute correctamente, la salida muestra información importante, como el estado de aprovisionamiento, que debe ser succeeded, y cualquier salida de la plantilla.

Adición de un repositorio de artefactos mediante Azure PowerShell

El script de PowerShell de ejemplo siguiente, New-DevTestLabArtifactRepository.ps1, agrega un repositorio de artefactos a un laboratorio. El script completo incluye algunos comentarios y mensajes detallados.


<#

.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

El script de PowerShell toma los parámetros siguientes:

Parámetro Descripción
LabName El nombre del laboratorio.
ArtifactRepositoryName Nombre del nuevo repositorio de artefactos. Si no se especifica, el script crea un nombre aleatorio para el repositorio.
ArtifactRepositoryDisplayName Nombre para mostrar que aparece en la lista del repositorio de artefactos del laboratorio.
RepositoryUri Identificador URI del repositorio de artefactos, que copió anteriormente.
RepositoryBranch Rama del repositorio que contiene los artefactos. El valor predeterminado es main.
FolderPath Carpeta que contiene los artefactos. El valor predeterminado es: /Artifacts.
PersonalAccessToken Token de seguridad para acceder al repositorio, que copió anteriormente.
SourceType Indica si el repositorio de artefactos es un repositorio VSOGit (Azure Repos) o GitHub.

El repositorio necesita un nombre interno para su identificación, que es diferente del nombre para mostrar que aparece en Azure Portal. El nombre interno no se ve cuando se usa Azure Portal, pero sí al usar las API REST de Azure o Azure PowerShell. El script crea un nombre aleatorio si el comando de implementación no especifica ninguno.

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

Comandos de PowerShell

El script usa los comandos de PowerShell siguientes:

Get-Help Notas
Get-AzResource Obtiene detalles acerca del laboratorio, como su ubicación. Se crea el origen del repositorio de artefactos en la misma ubicación y en el mismo grupo de recursos que el laboratorio.
New-AzResource Agrega el recurso de Azure. No hay ningún comando específico para agregar repositorios de artefactos. Este cmdlet necesita el valor ResourceId o el par ResourceName y ResourceType para saber el tipo de recurso que se va a crear. El script actual usa el par ResourceName y ResourceType.

La mejor forma de descubrir la información de nombre y tipo de recurso es usar el sitio web Explorador de API de REST. En Orígenes de artefactos de DevTest Labs se muestran las API REST para crear y administrar los orígenes de los artefactos de DevTest Labs. El script actual usa el identificador de recurso siguiente:

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

El tipo de recurso es todo lo que aparece después de providers en el identificador URI, excepto los elementos que aparecen entre llaves. El nombre del recurso es todo lo que aparece entre llaves. Si usa más de un elemento para el nombre del recurso, separe cada elemento con una barra diagonal:

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

Ejecución del script de PowerShell

Ejecute el script de PowerShell y sustituya sus valores propios por los valores de ejemplo en LabName, LabResourceGroupName, ArtifactRepositoryName, RepositoryUri, PersonalAccessToken y 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"

Pasos siguientes