Delen via


Een opslagplaats voor artefacten toevoegen aan een lab

In dit artikel wordt uitgelegd hoe u een opslagplaats voor artefacten toevoegt aan uw lab in Azure DevTest Labs. Artefacten zijn hulpprogramma's of toepassingen die moeten worden geïnstalleerd op virtuele machines (VM's). U definieert artefacten in een JSON-bestand dat u laadt vanuit een GitHub- of Azure Repos Git-opslagplaats.

De opslagplaats voor openbare DevTest Labs GitHub-artefacten biedt veel algemene artefacten voor Windows en Linux. De artefacten in deze openbare opslagplaats zijn standaard beschikbaar in DevTest Labs. Zie Artefacten toevoegen aan DevTest Labs-VM's voor meer informatie over het toevoegen van artefacten aan VM's.

U kunt ook aangepaste artefacten maken die niet beschikbaar zijn in de opslagplaats voor openbare artefacten. Zie Aangepaste artefacten maken voor meer informatie over het maken van aangepaste artefacten. U kunt uw aangepaste artefacten toevoegen aan uw eigen artefactopslagplaats en de opslagplaats toevoegen aan uw lab, zodat alle labgebruikers de artefacten kunnen gebruiken.

In dit artikel leest u hoe u een opslagplaats voor artefacten toevoegt aan uw lab met behulp van Azure Portal, een ARM-sjabloon (Azure Resource Management) of Azure PowerShell. U kunt ook een Azure PowerShell- of Azure CLI-script gebruiken om het toevoegen van een artefactopslagplaats aan een lab te automatiseren.

Notitie

Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.

Vereisten

Als u een opslagplaats voor artefacten wilt toevoegen aan een lab, moet u de GIT HTTPS-kloon-URL en het persoonlijke toegangstoken voor de GitHub- of Azure-opslagplaats met de artefactbestanden kennen.

De kloon-URL en het persoonlijke toegangstoken voor GitHub ophalen

  1. Op de startpagina van de GitHub-opslagplaats met uw artefacten selecteert u Code en kopieert u de HTTPS-URL onder Klonen.
  2. Selecteer uw profielafbeelding in de rechterbovenhoek van GitHub en selecteer vervolgens Instellingen.
  3. Selecteer op uw profielpagina in het linkermenu Ontwikkelaars Instellingen en selecteer vervolgens Persoonlijke toegangstokens.
  4. Selecteer Nieuw token genereren.
  5. Voer op de pagina Nieuw persoonlijk toegangstoken onder Opmerking een optionele beschrijving in voor het token. Accepteer alle standaardwaarden en selecteer vervolgens Het token genereren.
  6. Sla het gegenereerde token op.

De kloon-URL en het persoonlijke toegangstoken voor Azure-opslagplaatsen ophalen

  1. Selecteer Klonen op de hoofdpagina van de opslagplaats met uw artefacten. Kopieer de kloon-URL op de pagina Opslagplaats klonen.
  2. Selecteer in de rechterbovenhoek van de pagina Azure DevOps de optie Persoonlijke toegangstokens voor gebruikersinstellingen>.
  3. Selecteer Nieuw token op de pagina Persoonlijke toegangstokens.
  4. Vul de gegevens voor het token in, selecteer Lezen voor de bereiken en selecteer vervolgens Maken.
  5. Zorg ervoor dat u het token kopieert op de pagina Geslaagd , omdat het token niet in Azure-opslagplaatsen wordt opgeslagen of opnieuw wordt weergegeven.

Een opslagplaats voor artefacten toevoegen aan een lab in Azure Portal

  1. Selecteer op de pagina Overzicht van het lab configuratie en beleid in de linkernavigatiebalk.

  2. Selecteer opslagplaatsen onder Externe resources in het linkernavigatievenster op de pagina Configuratie en beleid.

    Op de pagina Opslagplaatsen wordt de opslagplaats voor openbare artefacten automatisch weergegeven en wordt er verbinding gemaakt met de openbare GitHub-opslagplaats van DevTest Labs. Als deze opslagplaats niet is ingeschakeld voor uw lab, kunt u deze inschakelen door het selectievakje naast de opslagplaats voor openbare artefacten in te schakelen en vervolgens Inschakelen te selecteren op de bovenste menubalk.

  3. Als u uw opslagplaats voor artefacten wilt toevoegen aan het lab, selecteert u Toevoegen in de bovenste menubalk.

    Schermopname van het configuratiescherm opslagplaatsen.

  4. Voer in het deelvenster Opslagplaats de volgende gegevens in:

    • Naam: een opslagplaatsnaam die moet worden gebruikt in het lab.
    • Git-kloon-URL: de GIT HTTPS-kloon-URL van GitHub of Azure-opslagplaatsen.
    • Vertakking (optioneel): de vertakking met uw artefactdefinities.
    • Persoonlijk toegangstoken: het persoonlijke toegangstoken van GitHub of Azure-opslagplaatsen.
    • Mappaden: de map voor uw ARM-sjabloondefinities, ten opzichte van de Git-kloon-URL. Zorg ervoor dat u de eerste slash in het mappad opneemt.
  5. Selecteer Opslaan.

    Schermopname van het toevoegen van een nieuwe artefactopslagplaats aan een lab.

De opslagplaats wordt nu weergegeven in de lijst Met opslagplaatsen voor het lab.

Een artefactopslagplaats toevoegen met behulp van een ARM-sjabloon

ARM-sjablonen zijn JSON-bestanden die Azure-resources beschrijven die moeten worden gemaakt. Zie De structuur en syntaxis van ARM-sjablonen begrijpen voor meer informatie over ARM-sjablonen.

Met de volgende ARM-sjabloon wordt een artefactopslagplaats toegevoegd aan een lab. De sjabloon maakt het lab als deze nog niet bestaat.

De ARM-sjabloon controleren

De voorbeeldsjabloon verzamelt de volgende informatie in parameters. Sommige parameters hebben standaardwaarden, maar de implementatieopdracht moet de labnaam, de URI van de artefactopslagplaats, het type opslagplaats en het persoonlijke toegangstoken voor de opslagplaats opgeven.

  • Labnaam.
  • Weergavenaam voor de opslagplaats voor artefacten in DevTest Labs. De standaardwaarde is Team Repository.
  • URI van de artefactopslagplaats die u eerder hebt gekopieerd.
  • Opslagplaatsbranch die de artefacten bevat. De standaardwaarde is main.
  • Naam van de map die de artefacten bevat. De standaardwaarde is: /Artifacts.
  • Type opslagplaats. De toegestane waarden zijn VsoGit, voor Azure-opslagplaatsen of GitHub.
  • Persoonlijk toegangstoken voor de opslagplaats, die u eerder hebt gekopieerd.
{

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

De sjabloon implementeren

Er zijn verschillende manieren om ARM-sjablonen te implementeren om Azure-resources te maken of bij te werken. Zie de volgende artikelen voor meer informatie en instructies:

In dit voorbeeld implementeert u de sjabloon met behulp van Azure PowerShell.

Notitie

De cmdlets die de sjabloon implementeren, zijn contextspecifiek, zodat ze de huidige tenant en het huidige abonnement gebruiken. Als u de context wilt wijzigen, gebruikt u Set-AzContext voordat u de sjabloon implementeert

  1. Maak een resourcegroep met behulp van New-AzResourceGroup. Als de resourcegroep die u wilt gebruiken al bestaat, slaat u deze stap over.

    New-AzResourceGroup -Name MyLabResourceGroup1 -Location westus
    
  2. Maak een implementatie voor de resourcegroep met behulp van New-AzResourceGroupDeployment. U kunt verschillende resource-implementaties naar dezelfde resourcegroep maken. Als u meerdere keren in dezelfde resourcegroep implementeert, moet u ervoor zorgen dat elke implementatienaam uniek is.

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

Nadat New-AzResourceGroupDeployment de uitvoering is voltooid, toont de uitvoer belangrijke informatie, zoals de inrichtingsstatus, die moet zijn succeeded, en eventuele uitvoer voor de sjabloon.

Een opslagplaats voor artefacten toevoegen met behulp van Azure PowerShell

Het volgende PowerShell-voorbeeldscript, New-DevTestLabArtifactRepository.ps1, voegt een artefactopslagplaats toe aan een lab. Het volledige script bevat uitgebreide berichten en opmerkingen.


<#

.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

Parameters

Het PowerShell-script gebruikt de volgende parameters:

Parameter Description
LabName De naam van het lab.
ArtifactRepositoryName Naam voor de nieuwe artefactopslagplaats. Het script maakt een willekeurige naam voor de opslagplaats als dit niet is opgegeven.
ArtifactRepositoryDisplayName Weergavenaam die wordt weergegeven in de lijst met artefactopslagplaats van het lab.
RepositoryUri URI van de artefactopslagplaats die u eerder hebt gekopieerd.
RepositoryBranch Opslagplaatsbranch die de artefacten bevat. De standaardwaarde is main.
FolderPath Map met de artefacten. De standaardwaarde is: /Artifacts.
PersonalAccessToken Beveiligingstoken voor toegang tot de opslagplaats, die u eerder hebt gekopieerd.
SourceType Of de artefactopslagplaats nu een VSOGit -opslagplaats (Azure-opslagplaatsen) of GitHub-opslagplaats is.

De opslagplaats heeft een interne naam nodig voor identificatie, die verschilt van de weergavenaam in Azure Portal. U ziet de interne naam niet wanneer u Azure Portal gebruikt, maar u ziet deze wanneer u Azure REST API's of Azure PowerShell gebruikt. Het script maakt een willekeurige naam als de implementatieopdracht er geen opgeeft.

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

PowerShell-opdrachten

Het script maakt gebruik van de volgende PowerShell-opdrachten:

Opdracht Opmerkingen
Get-AzResource Hiermee haalt u details over het lab op, zoals de locatie. U maakt de bron van de artefactopslagplaats op dezelfde locatie en onder dezelfde resourcegroep als het lab.
New-AzResource Voegt de Azure-resource toe. Er is geen specifieke opdracht voor het toevoegen van artefactopslagplaatsen. Deze cmdlet heeft het ResourceId of het ResourceName paar ResourceType nodig om het type resource te weten dat moet worden gemaakt. Het huidige script maakt gebruik van het ResourceName en ResourceType paar.

Een goede manier om informatie over resourcenamen en resourcetypen te ontdekken, is door de azure REST API Browser-website te gebruiken. DevTest Labs Artifact Sources toont REST API's voor het maken en beheren van DevTest Labs-artefactbronnen. Het huidige script gebruikt de volgende resource-id:

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

Het resourcetype wordt na providers in de URI weergegeven, met uitzondering van items in accolades. De resourcenaam is alles tussen de accolades. Als u meer dan één item voor de resourcenaam gebruikt, scheidt u elk item met een slash:

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

Het PowerShell-script uitvoeren

Voer het PowerShell-script uit, waarbij u uw eigen waarden vervangt door de voorbeeldwaarden in LabName, LabResourceGroupNameArtifactRepositoryName, , RepositoryUri, en 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"

Volgende stappen