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. Para comenzar, consulte Instalación de Azure PowerShell. 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.
Adición de un repositorio de artefactos
Los repositorios de artefactos se pueden agregar desde un repositorio de Azure Repos o un repositorio de GitHub. Puede optar por autenticarse mediante la asignación de permisos a una identidad administrada, mediante la autenticación de aplicaciones de GitHub o mediante un.token de acceso personal. Para más información sobre las identidades administradas, consulte ¿Qué son las identidades administradas para los recursos de Azure?
Seleccione la pestaña del tipo de repositorio y la autenticación que desea usar.
- Repositorio de Azure Repos con MSI
- Repositorio de Azure Repos con PAT
- Aplicación del Centro de desarrollo del repositorio de GitHub
- Repositorio de GitHub con PAT
Para agregar un repositorio de artefactos, realice las tareas que se indican a continuación:
- Asigne permisos en Azure Repos para la identidad administrada.
- Añadir un repositorio de artefactos.
Asigne permisos en Azure Repos para la identidad administrada
Debe conceder permisos de identidad administrada al repositorio en Azure Repos.
Inicie sesión en su organización de Azure DevOps.
Nota:
La organización de Azure DevOps debe estar en el mismo directorio que la suscripción de Azure que contiene el laboratorio.
Seleccione Configuración de la organización.
En la página Información general, seleccione Usuarios.
En la página Usuarios, seleccione Agregar usuarios.
Complete Agregar nuevos usuarios escribiendo o seleccionando la siguiente información y, a continuación, seleccione Agregar:
NOMBRE Valor Usuarios o entidades de servicio Escriba el nombre del laboratorio.
Si usa una MSI asignada por el sistema, especifique el nombre del laboratorio, no el identificador de objeto de la cuenta administrada. Cuando use una MSI asignada por el usuario, use el nombre de la cuenta administrada.Nivel de acceso Seleccione Básica. Agregar a proyectos Seleccione el proyecto que contenga el repositorio. Grupos de Azure DevOps Seleccione Lectores del proyecto. Enviar invitaciones por correo electrónico (solo a usuarios) Desactive la casilla.
Adición de un repositorio de artefactos de Azure DevOps a un laboratorio en el portal de Azure
En la página Información general del laboratorio, seleccione Configuración y directivas en el panel de navegación izquierdo.
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.
Para agregar el repositorio de artefactos al laboratorio, seleccione Agregar en la barra de menús superior.
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 Azure Repos.
- Rama (opcional): la rama que tiene las definiciones de los artefactos.
- 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.
- Identidad administrada: use esta opción para aprovechar la identidad administrada para la autenticación.
Seleccione Guardar.
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, oGitHub
. - 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:
- Implementación de recursos con las plantillas de ARM y Azure PowerShell
- Implementación de recursos con plantillas de ARM y la CLI de Azure
- Implementación de recursos con plantillas de ARM en Azure Portal
- Implementación de recursos con las plantillas de ARM y la API REST de Resource Manager
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.
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
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 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
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"