Udostępnij za pośrednictwem


Dodawanie repozytorium artefaktów do laboratorium

W tym artykule opisano sposób dodawania repozytorium artefaktów do laboratorium w usłudze 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 DevTest Labs w usłudze GitHub zawiera 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 artefaktów niestandardowych. 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 witryny Azure Portal, szablonu usługi Azure Resource Management (ARM) lub programu Azure PowerShell. Możesz również użyć skryptu programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure, aby zautomatyzować dodawanie repozytorium artefaktów do laboratorium.

Uwaga

Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Aby rozpocząć, zobacz Instalowanie programu Azure PowerShell. 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 GIT HTTPS i osobisty token dostępu dla repozytorium GitHub lub Azure Repos, które zawiera pliki 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 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ę Deweloper Ustawienia, 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 usługi 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żytkownika Osobiste tokeny dostępu.
  3. Na stronie Osobiste tokeny dostępu wybierz pozycję Nowy token.
  4. Wypełnij informacje dotyczące tokenu, wybierając pozycję Odczyt dla zakresów, a następnie wybierz pozycję Utwórz.
  5. Na stronie Powodzenie pamiętaj o skopiowaniu tokenu, ponieważ usługa Azure Repos nie przechowuje tokenu ani nie wyświetla go ponownie.

Dodawanie repozytorium artefaktów do laboratorium w witrynie 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 Nawigacja po lewej stronie.

    Na stronie Repozytoria repozytorium publiczne repozytorium artefaktów jest automatycznie obecne i nawiązuje połączenie 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 repozytoriów.

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

    • Nazwa: nazwa repozytorium do użycia w laboratorium.
    • Adres URL klonowania usługi Git: adres URL klonowania protokołu GIT HTTPS z repozytorium 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 usługi 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. Domyślna wartość to Team Repository.
  • Identyfikator URI repozytorium artefaktów, który został skopiowany wcześniej.
  • Gałąź repozytorium zawierająca artefakty. Domyślna wartość to main.
  • Nazwa folderu zawierającego artefakty. Wartość domyślna to: /Artifacts.
  • Typ repozytorium. Dozwolone wartości to VsoGit, dla usługi 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"
                    }
                }
            ]
        }
    ]
}

Wdrażanie 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 programu 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 programu 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 repozytorium artefaktów laboratorium.
RepositoryUri Identyfikator URI repozytorium artefaktów, który został skopiowany wcześniej.
RepositoryBranch Gałąź repozytorium zawierająca artefakty. Domyślna wartość to main.
FolderPath Folder zawierający artefakty. Wartość domyślna to: /Artifacts.
PersonalAccessToken Token zabezpieczający umożliwiający uzyskiwanie dostępu do skopiowanego wcześniej repozytorium.
SourceType Niezależnie od tego, czy repozytorium artefaktów jest repozytorium VSOGit (Azure Repos) czy GitHub.

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

#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 można utworzyć 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 LabName, , LabResourceGroupName, ArtifactRepositoryNameRepositoryUri, 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