Sdílet prostřednictvím


Vytváření vlastních imagí virtuálních počítačů pomocí GitHub Actions a Azure

Začněte pracovat s GitHub Actions vytvořením pracovního postupu pro vytvoření image virtuálního počítače.

Pomocí GitHub Actions můžete urychlit proces CI/CD vytvořením vlastních imagí virtuálních počítačů s artefakty z pracovních postupů. Image můžete vytvářet a distribuovat do galerie sdílených imagí.

Tyto image pak můžete použít k vytvoření virtuálních počítačů a škálovacích sad virtuálních počítačů.

Akce image virtuálního počítače sestavení používá službu Azure Image Builder.

Požadavky

Přehled souboru pracovního postupu

Pracovní postup je definován souborem YAML (.yml) v /.github/workflows/ cestě v úložišti. Tato definice obsahuje různé kroky a parametry, které tvoří pracovní postup.

Soubor má tři části:

Oddíl Úlohy
Authentication 1. Přidejte identitu spravovanou uživatelem.
2. Nastavte instanční objekt nebo Připojení Open ID.
3. Vytvořte tajný kód GitHubu.
Sestavit 1. Nastavte prostředí.
2. Sestavte aplikaci.
Obrázek 1. Vytvořte image virtuálního počítače.
2. Vytvořte virtuální počítač.

Vytvoření identity spravované uživatelem

K distribuci imagí budete potřebovat identitu spravovanou uživatelem pro Azure Image Builder (AIB). Spravovaná identita přiřazená uživatelem Azure se použije během sestavení image ke čtení a zápisu imagí do galerie sdílených imagí.

  1. Vytvořte identitu spravovanou uživatelem pomocí Azure CLI nebo webu Azure Portal. Poznamenejte si název vaší spravované identity.

  2. Přizpůsobte si tento kód JSON. Zástupné symboly nahraďte {subscriptionID} {rgName}ID předplatného a názvem skupiny prostředků.

    {
    "properties": {
        "roleName": "Image Creation Role",
        "IsCustom": true,
        "description": "Azure Image Builder access to create resources for the image build",
        "assignableScopes": [
          "/subscriptions/{subscriptionID}/resourceGroups/{rgName}"
        ],
        "permissions": [
            {
                "actions": [
                    "Microsoft.Compute/galleries/read",
                    "Microsoft.Compute/galleries/images/read",
                    "Microsoft.Compute/galleries/images/versions/read",
                    "Microsoft.Compute/galleries/images/versions/write",
                    "Microsoft.Compute/images/write",
                    "Microsoft.Compute/images/read",
                    "Microsoft.Compute/images/delete"
                ],
                "notActions": [],
                "dataActions": [],
                "notDataActions": []
            }
        ]
        } 
    } 
    
  3. Tento kód JSON slouží k vytvoření nové vlastní role s JSON.

  4. Na webu Azure Portal otevřete Galerii výpočetních prostředků Azure a přejděte do řízení přístupu (IAM).

  5. Vyberte Přidat přiřazení role a přiřaďte roli vytvoření image k identitě spravované uživatelem.

Generování přihlašovacích údajů pro nasazení

Pomocí příkazu az ad sp create-for-rbac v Azure CLI vytvořte instanční objekt. Spusťte tento příkaz pomocí Azure Cloud Shellu na webu Azure Portal nebo výběrem tlačítka Vyzkoušet .

az ad sp create-for-rbac --name "myML" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
                            --json-auth

--json-auth Parametr je k dispozici ve verzích >Azure CLI = 2.51.0. Verze před tímto použitím --sdk-auth s upozorněním na vyřazení.

V předchozím příkladu nahraďte zástupné symboly ID vašeho předplatného, názvem skupiny prostředků a názvem aplikace. Výstupem je objekt JSON s přihlašovacími údaji pro přiřazení role, které poskytují přístup k vaší aplikaci App Service podobně jako v následujícím příkladu. Zkopírujte tento objekt JSON pro pozdější použití.

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    (...)
  }

Vytvoření tajných kódů GitHubu

  1. Na GitHubu přejděte do svého úložiště.

  2. V navigační nabídce přejděte na Nastavení.

  3. Vyberte Akce tajných kódů zabezpečení > a proměnných>.

    Screenshot of adding a secret

  4. Vyberte Nový tajný klíč úložiště.

  5. Celý výstup JSON z příkazu Azure CLI vložte do pole hodnoty tajného kódu. Dejte tajnému názvu AZURE_CREDENTIALS.

  6. Vyberte Add secret (Přidat tajný kód).

Použití akce přihlášení k Azure

Pomocí tajného kódu GitHubu s akcí Přihlášení k Azure se ověřte v Azure.

V tomto pracovním postupu se ověříte pomocí akce přihlášení Azure s podrobnostmi instančního objektu uloženými v secrets.AZURE_CREDENTIALS. Pak spustíte akci Azure CLI. Další informace o odkazování na tajné kódy GitHubu v souboru pracovního postupu najdete v tématu Použití šifrovaných tajných kódů v pracovním postupu v Dokumentaci GitHubu.

on: [push]

name: Create Custom VM Image

jobs:
  build-image:
    runs-on: ubuntu-latest
    steps:
      - name: Log in with Azure
        uses: azure/login@v1
        with:
          creds: '${{ secrets.AZURE_CREDENTIALS }}'

Konfigurace Javy

Nastavte prostředí Java pomocí akce sady Java Setup SDK. V tomto příkladu nastavíte prostředí, sestavíte ho pomocí Mavenu a pak vypíšete artefakt.

Artefakty GitHubu představují způsob, jak sdílet soubory v pracovním postupu mezi úlohami. Vytvoříte artefakt pro uložení souboru JAR a pak ho přidáte do image virtuálního počítače.

on: [push]

name: Create Custom VM Image

jobs:
  build-image:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java: [ '17' ]

    steps:
    - name: Checkout
      uses: actions/checkout@v3    

    - name: Login via Az module
      uses: azure/login@v1
      with:
        creds: ${{secrets.AZURE_CREDENTIALS}}

    - name: Set up JDK ${{matrix.java}}
      uses: actions/setup-java@v2
      with:
        java-version: ${{matrix.java}}
        distribution: 'adopt'
        cache: maven
    - name: Build with Maven Wrapper
      run: ./mvnw -B package
        
    - name: Build Java
      run: mvn --batch-mode --update-snapshots verify

    - run: mkdir staging && cp target/*.jar staging
    - uses: actions/upload-artifact@v2
      with:
        name: Package
        path: staging

Sestavení image

Pomocí akce Sestavit image virtuálního počítače Azure vytvořte vlastní image virtuálního počítače.

Zástupné symboly nahraďte {subscriptionID}{rgName}ID {Identity} předplatného, názvem skupiny prostředků a názvem spravované identity. Nahraďte hodnoty {galleryName} galerie obrázků a {imageName} názvem vaší image.

Poznámka:

Pokud akce Vytvořit baked image aplikace selže s chybou oprávnění, ověřte, že jste k identitě spravované uživatelem přiřadili roli vytvoření image.

    - name: Create App Baked Image
      id: imageBuilder
      uses: azure/build-vm-image@v0
      with:
        location: 'eastus2'
        resource-group-name: '{rgName}'
        managed-identity: '{Identity}' # Managed identity
        source-os-type: 'windows'
        source-image-type: 'platformImage'
        source-image: MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest #unique identifier of source image
        dist-type: 'SharedImageGallery'
        dist-resource-id: '/subscriptions/{subscriptionID}/resourceGroups/{rgName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}/versions/0.1.${{ GITHUB.RUN_ID }}' #Replace with the resource id of your shared image  gallery's image definition
        dist-location: 'eastus2'

Argumenty akce virtuálního počítače

Vstup Požadováno Popis
resource-group-name Ano Skupina prostředků používaná pro ukládání a ukládání artefaktů během procesu sestavení.
image-builder-template-name No Název použitého prostředku šablony tvůrce obrázků.
location Ano Umístění, kde bude Azure Image Builder běžet. Podívejte se na podporovaná umístění.
build-timeout-in-minutes No Čas zrušení sestavení Výchozí hodnota je 240.
vm-size Volitelné Ve výchozím nastavení Standard_D1_v2 se použije. Viz velikosti virtuálních počítačů.
managed-identity Ano Identita spravovaná uživatelem, kterou jste vytvořili dříve. Úplný identifikátor použijte, pokud je vaše identita v jiné skupině prostředků. Název použijte, pokud je ve stejné skupině prostředků.
source-os Ano Typ operačního systému základní image (Linux nebo Windows)
source-image-type Ano Základní typ image, který se použije k vytvoření vlastní image.
source-image Ano Identifikátor prostředku pro základní image. Zdrojová image by měla být ve stejné oblasti Azure nastavená ve vstupní hodnotě umístění.
customizer-source No Adresář, kde můžete zachovat všechny artefakty, které je potřeba přidat do základní image pro přizpůsobení. Ve výchozím nastavení je tato hodnota ${{ GITHUB.WORKSPACE }}/workflow-artifacts.
customizer-destination No Toto je adresář v přizpůsobené imagi, do které se kopírují artefakty.
customizer-windows-update No Pouze pro Windows. Logická hodnota. Pokud truetvůrce imagí spustí aktualizaci Windows na konci přizpůsobení.
dist-location No Pro SharedImageGallery, to je dist-type.
dist-image-tags No Jedná se o uživatelem definované značky, které se přidají do vlastní image vytvořené (příklad: version:beta).

Vytvoření virtuálního počítače

Jako poslední krok vytvořte z image virtuální počítač.

  1. Zástupné symboly nahraďte {rgName}názvem vaší skupiny prostředků.

  2. Přidejte tajný kód GitHubu pomocí hesla virtuálního počítače (VM_PWD). Nezapomeňte si heslo zapsat, protože ho znovu neuvidíte. Uživatelské jméno je myuser.

    - name: CREATE VM
      uses: azure/CLI@v1
      with:
        azcliversion: 2.0.72
        inlineScript: |
        az vm create --resource-group ghactions-vMimage  --name "app-vm-${{ GITHUB.RUN_NUMBER }}"  --admin-username myuser --admin-password "${{ secrets.VM_PWD }}" --location  eastus2 \
            --image "${{ steps.imageBuilder.outputs.custom-image-uri }}"              

Dokončení YAML

  on: [push]

  name: Create Custom VM Image

  jobs:
    build-image:
      runs-on: ubuntu-latest    
      steps:
      - name: Checkout
        uses: actions/checkout@v2    

      - name: Login via Az module
        uses: azure/login@v1
        with:
          creds: ${{secrets.AZURE_CREDENTIALS}}

      - name: Setup Java 1.8.x
        uses: actions/setup-java@v1
        with:
          java-version: '1.8.x'
          
      - name: Build Java
        run: mvn --batch-mode --update-snapshots verify

      - run: mkdir staging && cp target/*.jar staging
      - uses: actions/upload-artifact@v2
        with:
          name: Package
          path: staging

      - name: Create App Baked Image
        id: imageBuilder
        uses: azure/build-vm-image@v0
        with:
          location: 'eastus2'
          resource-group-name: '{rgName}'
          managed-identity: '{Identity}' # Managed identity
          source-os-type: 'windows'
          source-image-type: 'platformImage'
          source-image: MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest #unique identifier of source image
          dist-type: 'SharedImageGallery'
          dist-resource-id: '/subscriptions/{subscriptionID}/resourceGroups/{rgName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}/versions/0.1.${{ GITHUB.RUN_ID }}' #Replace with the resource id of your shared image  gallery's image definition
          dist-location: 'eastus2'

      - name: CREATE VM
        uses: azure/CLI@v1
        with:
          azcliversion: 2.0.72
          inlineScript: |
          az vm create --resource-group ghactions-vMimage  --name "app-vm-${{ GITHUB.RUN_NUMBER }}"  --admin-username myuser --admin-password "${{ secrets.VM_PWD }}" --location  eastus2 \
              --image "${{ steps.imageBuilder.outputs.custom-image-uri }}"              

Další kroky