Dodawanie repozytorium artefaktów do laboratorium

W tym artykule opisano sposób dodawania repozytorium artefaktów do laboratorium w Azure DevTest Labs. Artefakty to narzędzia lub aplikacje do zainstalowania na maszynach wirtualnych. Artefakty są definiowane w pliku JSON ładowanym z repozytorium GitHub lub Azure Repos Git.

Publiczne repozytorium artefaktów Usługi GitHub w usłudze DevTest Labs udostępnia wiele typowych artefaktów dla systemów Windows i Linux. Artefakty w tym publicznym repozytorium są domyślnie dostępne w usłudze DevTest Labs. Aby uzyskać informacje na temat dodawania artefaktów do maszyn wirtualnych, zobacz Dodawanie artefaktów do maszyn wirtualnych usługi DevTest Labs.

Możesz również utworzyć niestandardowe artefakty, które nie są dostępne w publicznym repozytorium artefaktów. Aby dowiedzieć się więcej o tworzeniu artefaktów niestandardowych, zobacz Tworzenie niestandardowych artefaktów. Możesz dodać niestandardowe artefakty do własnego repozytorium artefaktów i dodać repozytorium do laboratorium, aby wszyscy użytkownicy laboratorium mogli używać artefaktów.

W tym artykule pokazano, jak dodać repozytorium artefaktów do laboratorium przy użyciu szablonu Azure Portal, szablonu usługi Azure Resource Management (ARM) lub Azure PowerShell. Możesz również użyć skryptu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure, aby zautomatyzować dodawanie repozytorium artefaktów do laboratorium.

Uwaga

Zalecamy korzystanie z modułu Azure Az programu PowerShell do interakcji z platformą Azure. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Wymagania wstępne

Aby dodać repozytorium artefaktów do laboratorium, musisz znać adres URL klonowania PROTOKOŁU HTTPS usługi Git oraz osobisty token dostępu dla repozytorium GitHub lub Azure Repos z plikami artefaktów.

Uzyskiwanie adresu URL klonowania i osobistego tokenu dostępu dla usługi GitHub

  1. Na stronie głównej repozytorium GitHub zawierającego artefakty wybierz pozycję Kod, a następnie w obszarze Klonuj skopiuj adres URL PROTOKOŁU HTTPS.
  2. Wybierz swój obraz profilu w prawym górnym rogu witryny GitHub, a następnie wybierz pozycję Ustawienia.
  3. Na stronie profilu w menu po lewej stronie wybierz pozycję Ustawienia dewelopera, a następnie wybierz pozycję Osobiste tokeny dostępu.
  4. Wybierz pozycję Generuj nowy token.
  5. Na stronie Nowy osobisty token dostępu w obszarze Uwaga wprowadź opcjonalny opis tokenu. Zaakceptuj wszystkie wartości domyślne, a następnie wybierz pozycję Generuj token.
  6. Zapisz wygenerowany token.

Uzyskiwanie adresu URL klonowania i osobistego tokenu dostępu dla Azure Repos

  1. Na stronie głównej repozytorium zawierającego artefakty wybierz pozycję Klonuj. Na stronie Klonowanie repozytorium skopiuj adres URL klonowania.
  2. W prawym górnym rogu strony usługi Azure DevOps wybierz pozycję Ustawienia> użytkownikaOsobiste tokeny dostępu.
  3. Na stronie Osobiste tokeny dostępu wybierz pozycję Nowy token.
  4. Wypełnij informacje dotyczące tokenu, wybierając pozycję Odczytaj dla zakresów, a następnie wybierz pozycję Utwórz.
  5. Na stronie Powodzenie skopiuj token, ponieważ Azure Repos nie przechowuje tokenu ani nie wyświetla go ponownie.

Dodawanie repozytorium artefaktów do laboratorium w Azure Portal

  1. Na stronie Przegląd laboratorium wybierz pozycję Konfiguracja i zasady w obszarze nawigacji po lewej stronie.

  2. Na stronie Konfiguracja i zasady wybierz pozycję Repozytoria w obszarze Zasoby zewnętrzne w obszarze Nawigacji po lewej stronie.

    Na stronie Repozytoriarepozytorium publicznego artefaktu jest automatycznie obecne i łączy się z publicznym repozytorium GitHub usługi DevTest Labs. Jeśli to repozytorium nie jest włączone dla laboratorium, możesz je włączyć, zaznaczając pole wyboru obok pozycji Repozytorium artefaktów publicznych, a następnie wybierając pozycję Włącz na górnym pasku menu.

  3. Aby dodać repozytorium artefaktów do laboratorium, wybierz pozycję Dodaj na górnym pasku menu.

    Zrzut ekranu przedstawiający ekran konfiguracji Repozytoria.

  4. W okienku Repozytorium wprowadź następujące informacje:

    • Nazwa: nazwa repozytorium do użycia w laboratorium.
    • Adres URL klonowania Git: adres URL klonowania HTTPS usługi Git z usługi GitHub lub Azure Repos.
    • Gałąź (opcjonalnie): gałąź zawierająca definicje artefaktów.
    • Osobisty token dostępu: osobisty token dostępu z usługi GitHub lub Azure Repos.
    • Ścieżki folderów: folder definicji szablonu usługi ARM względem adresu URL klonowania Git. Pamiętaj, aby dołączyć początkowy ukośnik do przodu w ścieżce folderu.
  5. Wybierz pozycję Zapisz.

    Zrzut ekranu przedstawiający dodawanie nowego repozytorium artefaktów do laboratorium.

Repozytorium jest teraz wyświetlane na liście Repozytoria dla laboratorium.

Dodawanie repozytorium artefaktów przy użyciu szablonu usługi ARM

Szablony usługi ARM to pliki JSON opisujące zasoby platformy Azure do utworzenia. Aby uzyskać więcej informacji na temat szablonów usługi ARM, zobacz Omówienie struktury i składni szablonów usługi ARM.

Poniższy szablon usługi ARM dodaje repozytorium artefaktów do laboratorium. Szablon tworzy laboratorium, jeśli jeszcze nie istnieje.

Przeglądanie szablonu usługi ARM

Przykładowy szablon zbiera następujące informacje w parametrach. Niektóre parametry mają wartości domyślne, ale polecenie wdrożenia musi określać nazwę laboratorium, identyfikator URI repozytorium artefaktów, typ repozytorium i osobisty token dostępu repozytorium.

  • Nazwa laboratorium.
  • Nazwa wyświetlana repozytorium artefaktów w usłudze DevTest Labs. Wartość domyślna to Team Repository.
  • Identyfikator URI repozytorium artefaktów skopiowany wcześniej.
  • Gałąź repozytorium zawierająca artefakty. Wartość domyślna to main.
  • Nazwa folderu zawierającego artefakty. Wartość domyślna to: /Artifacts.
  • Typ repozytorium. Dozwolone wartości to VsoGit, dla Azure Repos lub GitHub.
  • Osobisty token dostępu do repozytorium, który został skopiowany wcześniej.
{

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

Wdrożenie szablonu

Istnieje kilka sposobów wdrażania szablonów usługi ARM w celu tworzenia lub aktualizowania zasobów platformy Azure. Aby uzyskać informacje i instrukcje, zobacz następujące artykuły:

W tym przykładzie wdróż szablon przy użyciu Azure PowerShell.

Uwaga

Polecenia cmdlet, które wdrażają szablon, są specyficzne dla kontekstu, więc używają bieżącej dzierżawy i subskrypcji. Jeśli musisz zmienić kontekst, przed wdrożeniem szablonu użyj polecenia Set-AzContext

  1. Utwórz grupę zasobów przy użyciu polecenia New-AzResourceGroup. Jeśli grupa zasobów, której chcesz użyć, już istnieje, pomiń ten krok.

    New-AzResourceGroup -Name MyLabResourceGroup1 -Location westus
    
  2. Utwórz wdrożenie w grupie zasobów przy użyciu polecenia New-AzResourceGroupDeployment. Możesz wykonać kilka wdrożeń zasobów w tej samej grupie zasobów. Jeśli wdrażasz kilka razy w tej samej grupie zasobów, upewnij się, że każda nazwa wdrożenia jest unikatowa.

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

Po New-AzResourceGroupDeployment pomyślnym uruchomieniu dane wyjściowe zawierają ważne informacje, takie jak stan aprowizacji, który powinien mieć succeededwartość , i wszystkie dane wyjściowe szablonu.

Dodawanie repozytorium artefaktów przy użyciu Azure PowerShell

Poniższy przykładowy skrypt programu PowerShell ,New-DevTestLabArtifactRepository.ps1, dodaje repozytorium artefaktów do laboratorium. Pełny skrypt zawiera pełne komunikaty i komentarze.


<#

.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

Parametry

Skrypt programu PowerShell przyjmuje następujące parametry:

Parametr Opis
LabName Nazwa laboratorium.
ArtifactRepositoryName Nazwa nowego repozytorium artefaktów. Skrypt tworzy losową nazwę repozytorium, jeśli nie zostanie określona.
ArtifactRepositoryDisplayName Nazwa wyświetlana wyświetlana na liście repozytoriów artefaktów laboratorium.
RepositoryUri Identyfikator URI repozytorium artefaktów skopiowany wcześniej.
RepositoryBranch Gałąź repozytorium zawierająca artefakty. Wartość domyślna to main.
FolderPath Folder zawierający artefakty. Wartość domyślna to: /Artifacts.
PersonalAccessToken Token zabezpieczający na potrzeby uzyskiwania dostępu do skopiowanego wcześniej repozytorium.
SourceType Niezależnie od tego, czy repozytorium artefaktów jest repozytorium VSOGit (Azure Repos), czy GitHub.

Repozytorium potrzebuje wewnętrznej nazwy do identyfikacji, która różni się od nazwy wyświetlanej w Azure Portal. Nie widzisz nazwy wewnętrznej podczas korzystania z Azure Portal, ale widzisz ją podczas korzystania z interfejsów API REST platformy Azure lub Azure PowerShell. Skrypt tworzy losową nazwę, jeśli polecenie wdrożenia go nie określi.

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

Polecenia programu PowerShell

Skrypt używa następujących poleceń programu PowerShell:

Polecenie Uwagi
Get-AzResource Pobiera szczegółowe informacje o laboratorium, takie jak jego lokalizacja. Źródło repozytorium artefaktów jest tworzone w tej samej lokalizacji i w tej samej grupie zasobów co laboratorium.
New-AzResource Dodaje zasób platformy Azure. Nie ma określonego polecenia do dodawania repozytoriów artefaktów. To polecenie cmdlet wymaga ResourceId pary lub lub ResourceName , ResourceType aby znać typ zasobu do utworzenia. Bieżący skrypt używa ResourceName pary i ResourceType .

Dobrym sposobem odnajdywania informacji o nazwie zasobu i typie zasobu jest użycie witryny internetowej przeglądarki interfejsu API REST platformy Azure . Źródła artefaktów usługi DevTest Labs pokazują interfejsy API REST służące do tworzenia źródeł artefaktów usługi DevTest Labs i zarządzania nimi. Bieżący skrypt używa następującego identyfikatora zasobu:

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

Typ zasobu to wszystko wymienione po providers w identyfikatorze URI, z wyjątkiem elementów w nawiasach klamrowych. Nazwa zasobu to wszystko w nawiasach klamrowych. Jeśli używasz więcej niż jednego elementu dla nazwy zasobu, oddziel każdy element ukośnikiem:

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

Uruchamianie skryptu programu PowerShell

Uruchom skrypt programu PowerShell, podstawiając własne wartości dla przykładowych wartości w LabNamepliku , , LabResourceGroupNameArtifactRepositoryName, RepositoryUri, PersonalAccessTokeni 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"

Następne kroki