Hinzufügen eines Artefaktrepositorys zu einem Lab

In diesem Artikel erfahren Sie, wie Sie Ihrem Lab in Azure DevTest Labs ein Artefaktrepository hinzufügen. Artsfakte sind Tools oder Anwendungen, die auf virtuellen Computern (VMs) installiert werden sollen. Sie definieren Artefakte in einer JSON-Datei, die Sie aus einem GitHub- oder Azure Repos-Git-Repository laden.

Das öffentliche DevTest Labs GitHub-Artefaktrepository bietet viele allgemeine Artefakte für Windows und Linux. Die Artefakte in diesem öffentlichen Repository sind standardmäßig in DevTest Labs verfügbar. Informationen zum Hinzufügen von Artefakten zu VMs finden Sie unter Hinzufügen von Artefakten zu DevTest Labs-VMs.

Sie können auch benutzerdefinierte Artefakte erstellen, die im öffentlichen Artefaktrepository nicht verfügbar sind. Informationen zum Erstellen benutzerdefinierter Artefakte finden Sie unter Erstellen benutzerdefinierter Artefakte. Sie können Ihre benutzerdefinierten Artefakte Ihrem eigenen Artefaktrepository und das Repository Ihrem Lab hinzufügen, damit alle Labbenutzer die Artefakte verwenden können.

In diesem Artikel erfahren Sie, wie Sie Ihrem Lab mit Azure-Portal, einer ARM-Vorlage (Azure Resource Manager) oder Azure PowerShell ein Artefaktrepository hinzufügen. Sie können auch ein Azure PowerShell- oder Azure CLI-Skript verwenden, um das Hinzufügen eines Artefaktrepositorys zu einem Lab zu automatisieren.

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren des Azure Az PowerShell-Moduls. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Voraussetzungen

Um einem Lab ein Artefaktrepository hinzuzufügen, müssen Sie die Git-HTTPS-Klon-URL und das persönliche Zugriffstoken für das GitHub- oder Azure Repos-Repository kennen, das die Artefaktdateien enthält.

Abrufen der Klon-URL und des persönlichen Zugriffstokens für GitHub

  1. Wählen Sie auf der Startseite des GitHub-Repositorys, das Ihre Artefakte enthält, Code aus, und kopieren Sie unter Klonen die HTTPS-URL.
  2. Wählen Sie Ihr Profilbild in der oberen rechten Ecke von GitHub und dann Einstellungen aus.
  3. Wählen Sie auf Ihrer Profilseite im linken Menü Entwicklereinstellungen und dann Persönliche Zugriffstoken aus.
  4. Wählen Sie Generate new token.
  5. Geben Sie auf der Seite Neues persönliches Zugriffstoken unter Hinweis eine optionale Tokenbeschreibung ein. Übernehmen Sie alle Standardwerte, und wählen Sie dann Token generieren aus.
  6. Speichern Sie das generierte Token.

Abrufen der Klon-URL und des persönlichen Zugriffstokens für Azure Repos

  1. Wählen Sie auf der Hauptseite des Repositorys, das Ihre Artefakte enthält, Klonen aus. Kopieren Sie auf der Seite Repository klonen die Klon-URL.
  2. Wählen Sie in der oberen rechten Ecke der Seite Azure DevOps Benutzereinstellungen>Persönliche Zugriffstoken aus.
  3. Wählen Sie auf der Seite Persönliche Zugriffstoken die Option Neues Token aus.
  4. Geben Sie die Informationen für das Token ein, und wählen Sie dabei Lesen für die Bereiche und dann Erstellen aus.
  5. Kopieren Sie auf der Seite Erfolg unbedingt das Token, da Azure Repos das Token nicht speichert oder erneut anzeigt.

Hinzufügen eines Artefaktrepositorys zu einem Lab im Azure-Portal

  1. Wählen Sie auf der Labseite Übersicht im linken Navigationsbereich die Option Konfiguration und Richtlinien aus.

  2. Wählen Sie auf der Seite Konfiguration und Richtlinien im linken Navigationsbereich unter Externe Ressourcen die Option Repositorys aus.

    Auf der Seite Repositorys ist das Repository für öffentliche Artefakte automatisch vorhanden und wird mit dem Öffentlichen DevTest Labs-GitHub-Repository verbunden. Wenn dieses Repository nicht für Ihr Lab aktiviert ist, können Sie es aktivieren, indem Sie das Kontrollkästchen neben Repository für öffentliche Artefakte und dann in der oberen Menüleiste Aktivieren auswählen.

  3. Wählen Sie in der oberen Menüleiste die Option Hinzufügen aus, um Ihr Artefaktrepository dem Lab hinzuzufügen.

    Screenshot, der den Konfigurationsbildschirm „Repositorys“ zeigt.

  4. Geben Sie im Bereich Repository die folgenden Informationen ein:

    • Name: Ein Repositoryname, der im Lab verwendet werden soll.
    • Git-Klon-URL: Die Git-HTTPS-Klon-URL aus GitHub oder Azure Repos.
    • Branch (optional): Der Branch, der Ihre Artefaktdefinitionen enthält.
    • Persönliches Zugriffstoken: Das persönliche Zugriffstoken aus GitHub oder Azure Repos.
    • Ordnerpfade: Der Ordner für Ihre ARM-Vorlagendefinitionen relativ zum Git-Klon-URI. Achten Sie darauf, den anfänglichen Schrägstrich in den Ordnerpfad einzubeziehen.
  5. Wählen Sie Speichern aus.

    Screenshot, der das Hinzufügen eines neuen Artefaktrepositorys zu einem Lab zeigt.

Das Repository wird jetzt in der Liste Repositorys für das Lab angezeigt.

Hinzufügen eines Artefaktrepositorys mithilfe einer ARM-Vorlage

ARM-Vorlagen sind JSON-Dateien, die zu erstellende Azure-Ressourcen beschreiben. Weitere Informationen zu ARM-Vorlagen finden Sie unter Verstehen der Struktur und Syntax von ARM-Vorlagen.

Die folgende ARM-Vorlage fügt einem Lab ein Artefaktrepository hinzu. Die Vorlage erstellt das Lab, falls es noch nicht vorhanden ist.

Überprüfen der ARM-Vorlage

Die Beispielvorlage sammelt die folgenden Informationen in Parametern. Einige Parameter haben Standardwerte, aber der Bereitstellungsbefehl muss den Labnamen, den Artefaktrepository-URI, den Repositorytyp und das persönliche Zugriffstoken des Repositorys angeben.

  • Labname:
  • Der Anzeigename für das Artefaktrepository in DevTest Labs. Standardwert: Team Repository.
  • URI des Artefaktrepositorys, das Sie zuvor kopiert haben.
  • Repositorybranch, der die Artefakte enthält. Standardwert: main.
  • Name des Ordners mit den Artefakten. Standardwert: /Artifacts.
  • Repositorytyp. Die zulässigen Werte sind VsoGit für Azure Repos oder GitHub.
  • Persönliches Zugriffstoken für das Repository, das Sie zuvor kopiert haben.
{

    "$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"
                    }
                }
            ]
        }
    ]
}

Bereitstellen der Vorlage

Es gibt mehrere Möglichkeiten zum Bereitstellen von ARM-Vorlagen zum Erstellen oder Aktualisieren von Azure-Ressourcen. Informationen und Anweisungen finden Sie in den folgenden Artikeln:

Stellen Sie für dieses Beispiel die Vorlage mithilfe von Azure PowerShell bereit.

Hinweis

Die Cmdlets, die die Vorlage bereitstellen, sind kontextspezifisch, sodass sie den aktuellen Mandanten und das aktuelle Abonnement verwenden. Wenn Sie den Kontext ändern müssen, verwenden Sie Set-AzContext, bevor Sie die Vorlage bereitstellen.

  1. Erstellen Sie eine Ressourcengruppe mithilfe von New-AzResourceGroup. Ist die Ressourcengruppe, die Sie verwenden möchten, bereits vorhanden, überspringen Sie diesen Schritt.

    New-AzResourceGroup -Name MyLabResourceGroup1 -Location westus
    
  2. Erstellen Sie mit New-AzResourceGroupDeployment eine Bereitstellung für die Ressourcengruppe. Sie können mehrere Ressourcenbereitstellungen für dieselbe Ressourcengruppe durchführen. Falls Sie mehrere Bereitstellungen für dieselbe Ressourcengruppe durchführen, achten Sie darauf, dass der Name jeder Bereitstellung eindeutig ist.

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

Nachdem New-AzResourceGroupDeployment erfolgreich ausgeführt wurde, zeigt die Ausgabe wichtige Informationen wie den Bereitstellungsstatus an, der succeeded sein sollte, und alle Ausgaben für die Vorlage.

Hinzufügen eines Artefaktrepositorys mit Azure PowerShell

Das folgende PowerShell-Beispielskript, New-DevTestLabArtifactRepository.ps1, fügt einem Lab ein Artefaktrepository hinzu. Das vollständige Skript enthält einige ausführliche Meldungen und Kommentare.


<#

.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

Parameter

Dem PowerShell-Skript werden die folgenden Parameter übergeben:

Parameter Beschreibung
LabName Der Name des Labs.
ArtifactRepositoryName Der Name für das neue Artefaktrepository. Ohne Angabe eines Namens erstellt das Skript einen Zufallsnamen für das Repository.
ArtifactRepositoryDisplayName Anzeigename, der in der Artefaktrepositoryliste des Labs angezeigt wird.
RepositoryUri URI des Artefaktrepositorys, das Sie zuvor kopiert haben.
RepositoryBranch Repositorybranch, der die Artefakte enthält. Standardwert: main.
FolderPath Ordner mit den Artefakten. Standardwert: /Artifacts.
PersonalAccessToken Sicherheitstoken für den Zugriff auf das Repository, das Sie zuvor kopiert haben.
SourceType Gibt an, ob das Artefaktrepository ein VSOGit-Repository (Azure Repos) oder ein GitHub-Repository ist.

Das Repository benötigt zur Identifizierung einen internen Namen, der sich von dem Namen unterscheidet, der im Azure-Portal angezeigt wird. Der interne Name wird bei Verwendung von Azure-REST-APIs oder Azure PowerShell angezeigt, nicht aber im Azure-Portal. Das Skript erstellt einen zufälligen Namen, wenn der Bereitstellungsbefehl keinen angibt.

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

PowerShell-Befehle

Das Skript verwendet die folgenden PowerShell-Cmdlets:

Get-Help Notizen
Get-AzResource Ruft Details zum Lab ab, z. B. seinen Speicherort. Sie erstellen die Quelle des Artefaktrepositorys am selben Speicherort und unter derselben Ressourcengruppe wie das Lab.
New-AzResource Fügt die Azure-Ressource hinzu. Für das Hinzufügen von Artefaktrepositorys gibt es keinen speziellen Befehl. Für dieses Cmdlet muss entweder die ResourceId oder die Kombination aus ResourceName und ResourceType angegeben werden, damit klar ist, welche Art von Ressource erstellt werden soll. Das aktuelle Skript verwendet die Kombination aus ResourceName und ResourceType.

Name und Typ der Ressource ermitteln Sie am besten über die Azure-REST-API-Browser-Website. DevTest Labs-Artefaktquellen zeigt REST-APIs zum Erstellen und Verwalten von DevTest Labs-Artefaktquellen an. Das aktuelle Skript verwendet die folgende Ressourcen-ID:

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

Der Ressourcentyp ist alles, was im URI nach providers angegeben ist (mit Ausnahme der Elemente in geschweiften Klammern). Der Ressourcenname ist alles, was in den geschweiften Klammern angegeben ist. Wenn Sie mehrere Elemente für den Ressourcennamen verwenden, trennen Sie die Element durch einen Schrägstrich:

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

Ausführen des PowerShell-Skripts

Führen Sie das PowerShell-Skript aus, und ersetzen Sie dabei Ihre eigenen Werte durch die Beispielwerte in LabName, LabResourceGroupName, ArtifactRepositoryName, RepositoryUri, PersonalAccessToken und 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"

Nächste Schritte