Zadanie DevOps usługi Azure VM Image Builder (wersja zapoznawcza)

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️

Z tego artykułu dowiesz się, jak za pomocą zadania usługi Azure DevOps wstrzyknąć artefakty kompilacji do obrazu maszyny wirtualnej, aby można było zainstalować i skonfigurować aplikację i system operacyjny.

Ważne

Zadanie usługi Azure DevOps dla konstruktora obrazów maszyny wirtualnej jest obecnie dostępne w wersji zapoznawczej. Zobacz Dodatkowe warunki użytkowania wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta lub wersji zapoznawczej albo w inny sposób nie zostały jeszcze wydane jako ogólnie dostępne.

Wersje zadań DevOps

Obecnie istnieją dwa zadania devOps konstruktora obrazów maszyny wirtualnej platformy Azure:

  • Stabilne zadanie konstruktora obrazów maszyny wirtualnej: najnowsza stabilna kompilacja, która została przetestowana, i nie zgłasza problemów z ogólnym rozporządzeniem o ochronie danych (RODO).

  • Niestabilne zadanie konstruktora obrazów maszyny wirtualnej: oferujemy tak zwane niestabilne zadanie, dzięki czemu można przetestować najnowsze aktualizacje i funkcje przed wydaniem kodu zadania jako stabilnego. Po około tygodniu, jeśli nie ma problemów z danymi telemetrycznymi zgłaszanych przez klientów, podwyższamy poziom kodu zadania do stabilnego.

Wymagania wstępne

Uwaga

Zadanie konstruktora obrazów maszyny wirtualnej nie obsługuje obecnie ponownego uruchamiania systemu Windows ani uruchamiania poleceń z podwyższonym poziomem uprawnień jako Administracja istrator. Oznacza to, że zadanie nie jest odpowiednie dla scenariuszy usługi Azure Virtual Desktop ani dostosowań systemu Windows, które wymagają tych funkcji. Aby użyć metodyki DevOps z konstruktorem obrazów maszyny wirtualnej, zagnieżdż szablon w zadaniu usługi Azure Resource Manager i użyj interfejsu wiersza polecenia platformy Azure lub zadań programu PowerShell.

Przed rozpoczęciem należy wykonać następujące czynności:

  • Zainstaluj zadanie Stable DevOps z witryny Visual Studio Marketplace.

  • Masz konto usługi Azure DevOps Services (dawniej Visual Studio Team Services lub VSTS) oraz utworzony potok kompilacji.

  • Zarejestruj i włącz wymagania funkcji konstruktora obrazów maszyny wirtualnej w subskrypcji używanej przez potoki:

  • Utwórz standardowe konto usługi Azure Storage w źródłowej grupie zasobów obrazu. Możesz użyć innych grup zasobów lub kont magazynu. Konto magazynu jest używane do transferu artefaktów kompilacji z zadania DevOps do obrazu.

    # Azure PowerShell
    $timeInt=$(get-date -UFormat "%s")
    $storageAccName="aibstorage"+$timeInt
    $location=westus
    # Create a storage account and blob in the resource group
    New-AzStorageAccount -ResourceGroupName $strResourceGroup -Name $storageAccName -Location $location -SkuName Standard_LRS
    
    # The Azure CLI
    location=westus
    scriptStorageAcc=aibstordot$(date +'%s')
    # Create a storage account and blob in the resource group
    az storage account create -n $scriptStorageAcc -g $strResourceGroup -l $location --sku Standard_LRS
    

Dodawanie zadania do potoku wydania

  1. Wybierz pozycję Edytuj potok>wydania.

  2. Na agencie użytkownika wybierz znak plus (+), aby dodać i wyszukać konstruktora obrazów.

  3. Wybierz Dodaj.

W poniższych sekcjach ustaw właściwości zadania.

Subskrypcja platformy Azure

Z listy rozwijanej wybierz subskrypcję, którą chcesz uruchomić konstruktora obrazów maszyny wirtualnej. Użyj subskrypcji, w której przechowywane są obrazy źródłowe, a obrazy mają być dystrybuowane. Musisz udzielić współautorowi narzędzia Image Builder maszyny wirtualnej dostępu do subskrypcji lub grupy zasobów.

Grupa zasobów

Użyj grupy zasobów, w której będzie przechowywany tymczasowy artefakt szablonu obrazu. Podczas tworzenia artefaktu szablonu zostanie utworzona inna tymczasowa grupa zasobów narzędzia Image Builder maszyny wirtualnej. IT_<DestinationResourceGroup>_<TemplateName>_guid Tymczasowa grupa zasobów przechowuje metadane obrazu, takie jak skrypty. Na końcu zadania artefakt szablonu obrazu i tymczasowa grupa zasobów narzędzia Image Builder maszyny wirtualnej zostanie usunięta.

Lokalizacja

Lokalizacja to region, w którym zostanie uruchomiony konstruktor obrazów maszyny wirtualnej. Obsługiwana jest tylko liczba określonych regionów. Obrazy źródłowe muszą znajdować się w tej lokalizacji. Jeśli na przykład używasz galerii zasobów obliczeniowych platformy Azure (wcześniej udostępnionej galerii obrazów), replika musi istnieć w tym regionie.

Tożsamość zarządzana (wymagana)

Narzędzie VM Image Builder wymaga tożsamości zarządzanej, która jest używana do odczytywania źródłowych obrazów niestandardowych, nawiązywania połączenia z usługą Azure Storage i tworzenia obrazów niestandardowych. Aby uzyskać więcej informacji, zobacz Learn about VM Image Builder (Dowiedz się więcej o konstruktorze obrazów maszyn wirtualnych).

Obsługa sieci wirtualnej

Utworzoną maszynę wirtualną można skonfigurować tak, aby znajdowała się w określonej sieci wirtualnej. Podczas konfigurowania zadania podaj identyfikator zasobu istniejącej podsieci w polu wejściowym Konfiguracja sieci wirtualnej (opcjonalnie). Pomiń identyfikator zasobu, jeśli nie trzeba używać określonej sieci wirtualnej. Aby uzyskać więcej informacji, zobacz Opcje sieciowe usługi Image Builder maszyny wirtualnej platformy Azure.

Źródło

Obrazy źródłowe muszą być obsługiwanymi systemami operacyjnymi programu Image Builder maszyny wirtualnej. Możesz wybrać istniejące obrazy niestandardowe w tym samym regionie, z którego działa konstruktor obrazów maszyny wirtualnej:

  • Obraz zarządzany: przekaż identyfikator zasobu. Na przykład:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/images/<imageName>
    
  • Galeria obliczeniowa: przekaż identyfikator zasobu wersji obrazu. Na przykład:

    /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/<versionNumber>
    

    Jeśli potrzebujesz najnowszej wersji galerii obliczeniowej, użyj programu Azure PowerShell lub zadania interfejsu wiersza polecenia platformy Azure, aby go pobrać i ustawić zmienną DevOps. Użyj zmiennej w zadaniu DevOps konstruktora obrazów maszyny wirtualnej. Aby uzyskać więcej informacji, zobacz przykłady w temacie Pobieranie identyfikatora zasobu najnowszej wersji obrazu.

  • (Marketplace) Obraz podstawowy: użyj listy rozwijanej popularnych obrazów, które zawsze używają najnowszej wersji obsługiwanych systemów operacyjnych.

    Jeśli obraz podstawowy nie znajduje się na liście, możesz określić dokładny obraz przy użyciu polecenia Publisher:Offer:Sku.

    (Opcjonalnie) Wersja obrazu podstawowego: możesz podać wersję obrazu, którego chcesz użyć. Domyślną wersją jest latest.

Dostosuj

W poniższych sekcjach omówiono różne sposoby dostosowywania zadań.

Inicjowanie obsługi administracyjnej

Początkowo obsługiwane są dwa konfiguratory: Shell i PowerShell. Obsługiwane są tylko wbudowane funkcje. Jeśli chcesz pobrać skrypty, możesz przekazać polecenia wbudowane, aby to zrobić.

W przypadku systemu operacyjnego wybierz pozycję PowerShell lub Shell.

Zadanie usługi Windows Update

Tylko w przypadku systemu Windows zadanie uruchamia usługę Windows Update na końcu dostosowań. Obsługuje również wymagane ponowne uruchomienie.

Zadanie uruchamia następującą konfigurację usługi Windows Update:

    "type": "WindowsUpdate",
    "searchCriteria": "IsInstalled=0",
    "filters": [
        "exclude:$_.Title -like '*Preview*'",
        "include:$true"

Zadanie instaluje ważne i zalecane Aktualizacje systemu Windows, które nie są wersjami zapoznawcza.

Obsługa ponownych uruchomień

Zadanie DevOps nie obsługuje obecnie ponownego uruchamiania kompilacji systemu Windows. Jeśli spróbujesz ponownie uruchomić kod programu PowerShell, kompilacja zakończy się niepowodzeniem. Można jednak użyć kodu do ponownego uruchomienia kompilacji systemu Linux.

Ścieżka kompilacji

Zadanie zostało zaprojektowane tak, aby umożliwić wstrzykiwanie artefaktów wydania kompilacji metodyki DevOps do obrazu. Aby wykonać tę pracę, należy skonfigurować potok kompilacji. W konfiguracji potoku wydania dodaj repozytorium artefaktów kompilacji.

Screenshot showing how to add an artifact in the release pipeline.

Wybierz przycisk Ścieżka kompilacji, aby wybrać folder kompilacji, który chcesz umieścić na obrazie. Zadanie konstruktora obrazów maszyny wirtualnej kopiuje wszystkie pliki i katalogi w nim. Po utworzeniu obrazu program VM Image Builder wdraża pliki i katalogi w różnych ścieżkach w zależności od systemu operacyjnego.

Ważne

Podczas dodawania artefaktu repozytorium może się okazać, że nazwa katalogu jest poprzedzona znakiem podkreślenia (_). Podkreślenie może powodować problemy z wbudowanymi poleceniami. Pamiętaj, aby użyć odpowiednich cudzysłowów w poleceniach.

W poniższym przykładzie wyjaśniono, jak to działa:

Screenshot of a directory structure showing hierarchy.

  • W przypadku systemu Windows: pliki istnieją na dysku C: . Zostanie utworzony katalog o nazwie buildArtifacts , który zawiera katalog aplikacji internetowej.

  • W przypadku systemu Linux: pliki istnieją w /tmp katalogu . Zostanie webapp utworzony katalog zawierający wszystkie pliki i katalogi. Ponieważ jest to katalog tymczasowy, należy przenieść pliki z niego. W przeciwnym razie zostaną usunięte.

Wbudowany skrypt dostosowywania

  • W przypadku systemu Windows: możesz wprowadzić wbudowane polecenia programu PowerShell oddzielone przecinkami. Jeśli chcesz uruchomić skrypt w katalogu kompilacji, możesz użyć:

    & 'c:\buildArtifacts\webapp\webconfig.ps1'
    

    Możesz odwoływać się do wielu skryptów lub dodawać więcej poleceń. Na przykład:

    & 'c:\buildArtifacts\webapp\webconfig.ps1'
    & 'c:\buildArtifacts\webapp\installAgent.ps1'
    
  • W przypadku systemu Linux: artefakty kompilacji są umieszczane w katalogu /tmp . Jednak w wielu systemach operacyjnych Linux po ponownym uruchomieniu zawartość katalogu /tmp jest usuwana. Jeśli chcesz, aby artefakty istniały na obrazie, musisz utworzyć inny katalog i skopiować je. Na przykład:

    sudo mkdir /lib/buildArtifacts
    sudo cp -r "/tmp/_ImageBuilding/webapp" /lib/buildArtifacts/.
    

    Jeśli używasz katalogu /tmp, możesz uruchomić skrypt przy użyciu następującego kodu:

    # Grant execute permissions to run scripts
    sudo chmod +x "/tmp/_ImageBuilding/webapp/coreConfig.sh"
    echo "running script"
    sudo . "/tmp/AppsAndImageBuilderLinux/_WebApp/coreConfig.sh"
    

Co się stanie z artefaktami kompilacji po kompilacji obrazu?

Uwaga

Konstruktor obrazów maszyny wirtualnej nie usuwa automatycznie artefaktów kompilacji. Zdecydowanie zalecamy, aby zawsze używać kodu do usuwania artefaktów kompilacji.

  • W przypadku systemu Windows: narzędzie VM Image Builder wdraża pliki w katalogu C:\buildArtifacts . Ponieważ katalog jest utrwalone, należy go usunąć, uruchamiając skrypt. Na przykład:

    # Clean up buildArtifacts directory
    Remove-Item -Path "C:\buildArtifacts\*" -Force -Recurse
    
    # Delete the buildArtifacts directory
    Remove-Item -Path "C:\buildArtifacts" -Force
    
  • W przypadku systemu Linux: artefakty kompilacji są umieszczane w katalogu /tmp . Jednak w wielu systemach operacyjnych Linux zawartość katalogu /tmp jest usuwana po ponownym uruchomieniu. Zalecamy użycie kodu w celu usunięcia zawartości, a nie polegania na systemie operacyjnym w celu usunięcia zawartości. Na przykład:

    sudo rm -R "/tmp/AppsAndImageBuilderLinux"
    

Łączna długość kompilacji obrazu

Nie można jeszcze zmienić całkowitej długości w zadaniu potoku DevOps. Używa wartości domyślnej 240 minut. Jeśli chcesz zwiększyć kompilacjęTimeoutInMinutes, możesz użyć zadania interfejsu wiersza polecenia platformy Azure w potoku wydania. Skonfiguruj zadanie, aby skopiować szablon i przesłać go. Przykładowe rozwiązanie można znaleźć w temacie Use environment variables and parameters with VM Image Builder (Używanie zmiennych środowiskowych i parametrów za pomocą konstruktora obrazów maszyny wirtualnej) lub use Azure PowerShell (Korzystanie z programu Azure PowerShell).

Konto magazynu

Wybierz konto magazynu utworzone w wymaganiach wstępnych. Jeśli nie widzisz jej na liście, konstruktor obrazów maszyny wirtualnej nie ma do niego uprawnień.

Po uruchomieniu kompilacji narzędzie VM Image Builder tworzy kontener o nazwie imagebuilder-vststask, w którym są przechowywane artefakty kompilacji z repozytorium.

Uwaga

Musisz ręcznie usunąć konto magazynu lub kontener po każdej kompilacji.

Rozłóż

Obsługiwane są następujące trzy typy dystrybucji.

Obraz zarządzany

  • Identyfikator zasobu:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/images/<imageName>
    
  • Lokalizacje

Galeria obliczeniowa musi już istnieć.

  • Identyfikator zasobu:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>
    
  • Regiony: lista regionów rozdzielonych przecinkami. Na przykład ,westuseastus , centralus.

Wirtualny dysk twardy

Nie można przekazać żadnych wartości do tego. Konstruktor obrazów maszyny wirtualnej emituje wirtualny dysk twardy VHD do tymczasowej grupy zasobów konstruktora obrazów maszyny wirtualnej, IT_<DestinationResourceGroup>_<TemplateName>, w kontenerze vhds . Po uruchomieniu kompilacji wydania program VM Image Builder emituje dzienniki. Po zakończeniu tworzenia obrazów maszyny wirtualnej emituje on adres URL wirtualnego dysku twardego.

Ustawienia opcjonalne

Możesz zastąpić ustawienie rozmiaru maszyny wirtualnej z domyślnego rozmiaru Standard_D1_v2. Możesz to zrobić, aby skrócić całkowity czas dostosowywania. Możesz też utworzyć obrazy, które zależą od niektórych rozmiarów maszyn wirtualnych, takich jak procesor GPU (jednostka przetwarzania grafiki), HPC (obliczenia o wysokiej wydajności) itd.

Jak działa zadanie

Podczas tworzenia wydania zadanie tworzy kontener na koncie magazynu o nazwie imagebuilder-vststask. Spakuje (kompresuje) i przekazuje artefakty kompilacji i tworzy token sygnatury dostępu współdzielonego dla pliku zip.

Zadanie używa właściwości przekazanych do zadania w celu utworzenia artefaktu szablonu konstruktora obrazów maszyny wirtualnej. Zadanie wykonuje następujące czynności:

  • Pobiera plik zip artefaktu kompilacji i wszystkie inne skojarzone skrypty. Pliki są zapisywane na koncie magazynu w tymczasowej grupie IT_<DestinationResourceGroup>_<TemplateName>zasobów programu Image Builder maszyny wirtualnej.

  • Tworzy szablon poprzedzony t_ i 10-cyfrową liczbą całkowitą monotoniczną. Szablon jest zapisywany w wybranej grupie zasobów i istnieje przez cały czas trwania kompilacji w grupie zasobów.

Przykładowe wyjście:

start reading task parameters...
found build at:  /home/vsts/work/r1/a/_ImageBuilding/webapp
end reading parameters
getting storage account details for aibstordot1556933914
created archive /home/vsts/work/_temp/temp_web_package_21475337782320203.zip
Source for image:  { type: 'SharedImageVersion',
  imageVersionId: '/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>/versions/<imgVersionNumber>' }
template name:  t_1556938436xxx
starting put template...

Po uruchomieniu kompilacji obrazu stan uruchomienia jest zgłaszany w dziennikach wydania:

starting run template...

Po zakończeniu kompilacji obrazu dane wyjściowe są podobne do następującego tekstu:

2019-05-06T12:49:52.0558229Z starting run template...
2019-05-06T13:36:33.8863094Z run template:  Succeeded
2019-05-06T13:36:33.8867768Z getting runOutput for  SharedImage_distribute
2019-05-06T13:36:34.6652541Z ==============================================================================
2019-05-06T13:36:34.6652925Z ## task output variables ##
2019-05-06T13:36:34.6658728Z $(imageUri) =  /subscriptions/<subscriptionID>/resourceGroups/aibwinsig/providers/Microsoft.Compute/galleries/my22stSIG/images/winWAppimages/versions/0.23760.13763
2019-05-06T13:36:34.6659989Z ==============================================================================
2019-05-06T13:36:34.6663500Z deleting template t_1557146959485...
2019-05-06T13:36:34.6673713Z deleting storage blob imagebuilder-vststask\webapp/18-1/webapp_1557146958741.zip
2019-05-06T13:36:34.9786039Z blob imagebuilder-vststask\webapp/18-1/webapp_1557146958741.zip is deleted
2019-05-06T13:38:37.4884068Z delete template:  Succeeded

Szablon obrazu i IT_<DestinationResourceGroup>_<TemplateName> zostaną usunięte.

Możesz użyć zmiennej $(imageUri) Azure DevOps Services (dawniej Visual Studio Team Services lub VSTS) i użyć jej w następnym zadaniu lub po prostu użyć wartości i skompilować maszynę wirtualną.

Zmienne metodyki DevOps danych wyjściowych

Oto wydawca, oferta, jednostka SKU i wersja źródłowego obrazu witryny Marketplace:

  • $(pirPublisher)
  • $(pirOffer)
  • $(pirSku)
  • $(pirVersion)

Oto identyfikator URI obrazu, który jest identyfikatorem zasobu obrazu rozproszonego:

  • $(imageUri)

Często zadawane pytania

Czy mogę użyć istniejącego szablonu obrazu, który został już utworzony poza usługą DevOps?

Obecnie nie jest to możliwe.

Czy mogę określić nazwę szablonu obrazu?

L.p. Używana jest unikatowa nazwa szablonu, a następnie usuwana.

Zadanie konstruktora obrazów maszyny wirtualnej nie powiodło się. Jak mogę rozwiązać problem?

Jeśli wystąpi błąd kompilacji, zadanie DevOps nie usunie przejściowej grupy zasobów. Możesz uzyskać dostęp do przejściowej grupy zasobów zawierającej dziennik dostosowywania kompilacji.

W dzienniku DevOps zadania konstruktora obrazów maszyny wirtualnej zostanie wyświetlony błąd, a komunikat będzie zawierać lokalizację customization.log . Na przykład:

Screenshot of an example DevOps task error that describes the failure and provides the location of the customization.log file.

Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z usługą Vm Image Builder.

Po zbadaniu błędu możesz usunąć tymczasową grupę zasobów. Najpierw usuń artefakt zasobu szablonu konstruktora obrazów maszyny wirtualnej. Artefakt jest poprzedzony t_ i można go znaleźć w dzienniku kompilacji zadań DevOps:

...
Source for image:  { type: 'SharedImageVersion',
  imageVersionId: '/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>/versions/<imgVersionNumber>' }
...
template name:  t_1556938436xxx
...

Artefakt zasobu szablonu konstruktora obrazów maszyny wirtualnej znajduje się w grupie zasobów, która została początkowo określona w zadaniu. Po zakończeniu rozwiązywania problemów usuń artefakt. Jeśli usuwasz je przy użyciu witryny Azure Portal, w grupie zasobów wybierz pozycję Pokaż ukryte typy , aby wyświetlić artefakt.

Następne kroki

Aby uzyskać więcej informacji, zobacz Omówienie narzędzia Image Builder maszyny wirtualnej.