İngilizce dilinde oku

Aracılığıyla paylaş


GitHub Actions ve Azure ile özel sanal makine görüntüleri oluşturma

Sanal makine görüntüsü oluşturmak için bir iş akışı oluşturarak GitHub Actions'ı kullanmaya başlayın.

GitHub Actions ile iş akışlarınızdaki yapıtlarla özel sanal makine görüntüleri oluşturarak CI/CD işleminizi hızlandırabilirsiniz. Hem görüntü oluşturabilir hem de bunları bir Paylaşılan Görüntü Galerisi dağıtabilirsiniz.

Ardından bu görüntüleri kullanarak sanal makineler ve sanal makine ölçek kümeleri oluşturabilirsiniz.

Sanal makine görüntüsü oluşturma eylemi, Azure Image Builder hizmetini kullanır.

Önkoşullar

İş akışı dosyasına genel bakış

İş akışı, deponuzdaki yoldaki /.github/workflows/ bir YAML (.yml) dosyası tarafından tanımlanır. Bu tanım, iş akışını oluşturan çeşitli adımları ve parametreleri içerir.

Dosyanın üç bölümü vardır:

Bölüm Görevler
Kimlik Doğrulaması 1. Kullanıcı tarafından yönetilen bir kimlik ekleyin.
2. Hizmet sorumlusu veya Açık Kimlik Bağlan ayarlayın.
3. GitHub gizli dizisi oluşturun.
Yapı 1. Ortamı ayarlayın.
2. Uygulamayı oluşturun.
Görsel 1. VM Görüntüsü oluşturun.
2. Bir sanal makine oluşturun.

Kullanıcı tarafından yönetilen kimlik oluşturma

Görüntüleri dağıtmak için Azure Görüntü Oluşturucusu(AIB) için kullanıcı tarafından yönetilen bir kimliğe ihtiyacınız olacaktır. Azure kullanıcı tarafından atanan yönetilen kimliğiniz, görüntü derlemesi sırasında görüntüleri okumak ve bir Paylaşılan Görüntü Galerisi yazmak için kullanılır.

  1. Azure CLI veya Azure portalı ile kullanıcı tarafından yönetilen bir kimlik oluşturun. Yönetilen kimliğinizin adını yazın.

  2. Bu JSON kodunu özelleştirin. ve {rgName}yer {subscriptionID} tutucularını abonelik kimliğiniz ve kaynak grubu adınızla değiştirin.

    {
    "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. JSON ile yeni bir özel rol oluşturmak için bu JSON kodunu kullanın.

  4. Azure portalında Azure İşlem Galerinizi açın ve Erişim denetimi (IAM) bölümüne gidin.

  5. Rol ataması ekle'yi seçin ve Görüntü Oluşturma Rolünü kullanıcı tarafından yönetilen kimliğinize atayın.

Dağıtım kimlik bilgileri oluşturma

Azure CLI'da az ad sp create-for-rbac komutuyla bir hizmet sorumlusu oluşturun. Azure portalında veya Deneyin düğmesini seçerek bu komutu Azure Cloud Shell ile çalıştırın.

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

parametresi --json-auth Azure CLI sürümlerinde >= 2.51.0 kullanılabilir. Bu --sdk-auth kullanımdan önceki sürümler kullanımdan kaldırma uyarısıyla kullanılır.

Yukarıdaki örnekte yer tutucuları abonelik kimliğiniz, kaynak grubu adınız ve uygulama adınızla değiştirin. Çıktı, Aşağıdakine benzer şekilde App Service uygulamanıza erişim sağlayan rol ataması kimlik bilgilerine sahip bir JSON nesnesidir. Bu JSON nesnesini daha sonra için kopyalayın.

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

GitHub gizli dizileri oluşturma

  1. GitHub'da deponuza gidin.

  2. Gezinti menüsünde Ayarlar gidin.

  3. Güvenlik > Gizli Dizileri ve değişkenler Eylemler'i> seçin.

    Screenshot of adding a secret

  4. Yeni depo gizli dizisi'ni seçin.

  5. Azure CLI komutundaki JSON çıkışının tamamını gizli dizinin değer alanına yapıştırın. Gizli diziye adını AZURE_CREDENTIALSverin.

  6. Add secret (Gizli dizi ekle) öğesini seçin.

Azure oturum açma eylemini kullanma

Azure'da kimlik doğrulaması yapmak için GitHub gizli dizinizi Azure Oturum Açma eylemiyle kullanın.

Bu iş akışında, içinde depolanan secrets.AZURE_CREDENTIALShizmet sorumlusu ayrıntılarıyla Azure oturum açma eylemini kullanarak kimlik doğrulaması yaparsınız. Ardından bir Azure CLI eylemi çalıştırırsınız. Bir iş akışı dosyasında GitHub gizli dizilerine başvurma hakkında daha fazla bilgi için bkz . GitHub Docs'ta bir iş akışında şifrelenmiş gizli dizileri kullanma.

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 }}'

Java'yı yapılandırma

Java Kurulum SDK'sı eylemiyle Java ortamını ayarlayın. Bu örnekte ortamı ayarlayıp Maven ile derleyip bir yapıt çıkaracaksınız.

GitHub yapıtları , iş akışındaki dosyaları işler arasında paylaşmanın bir yoludur. JAR dosyasını tutmak için bir yapıt oluşturacak ve ardından sanal makine görüntüsüne ekleyeceksiniz.

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

Görüntünüzü oluşturma

Özel bir sanal makine görüntüsü oluşturmak için Azure Sanal Makine Görüntüsü Oluştur eylemini kullanın.

ve yer tutucularını {subscriptionID}{rgName}{Identity} abonelik kimliğiniz, kaynak grubu adınız ve yönetilen kimlik adınızla değiştirin. ve {imageName} değerlerini {galleryName} görüntü galerisi adınızla ve görüntü adınız ile değiştirin.

Not

Uygulama Pişirilmiş Görüntü Oluştur eylemi bir izin hatasıyla başarısız olursa, kullanıcı tarafından yönetilen kimliğinize Görüntü Oluşturma Rolü atadığınızdan emin olun.

    - 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'

Sanal Makine eylem bağımsız değişkenleri

Girdi Zorunlu Veri Akışı Açıklaması
resource-group-name Yes Derleme işlemi sırasında yapıtları depolamak ve kaydetmek için kullanılan kaynak grubu.
image-builder-template-name Hayır Kullanılan görüntü oluşturucu şablon kaynağının adı.
location Yes Azure Image Builder'ın çalıştırılacağı konum. Desteklenen konumlara bakın.
build-timeout-in-minutes Hayır Derlemenin iptal edilme zamanı. Varsayılan değer 240'tır.
vm-size İsteğe bağlı Varsayılan olarak Standard_D1_v2 kullanılır. Bkz. sanal makine boyutları.
managed-identity Yes Daha önce oluşturduğunuz kullanıcı tarafından yönetilen kimlik. Kimliğiniz farklı bir kaynak grubundaysa tam tanımlayıcıyı kullanın. Adı aynı kaynak grubundaysa kullanın.
source-os Yes Temel görüntünün işletim sistemi türü (Linux veya Windows)
source-image-type Yes Özel görüntü oluşturmak için kullanılacak temel görüntü türü.
source-image Yes Temel görüntünün kaynak tanımlayıcısı. Kaynak görüntü, konumun giriş değerinde ayarlanan aynı Azure bölgesinde bulunmalıdır.
customizer-source Hayır Özelleştirme için temel görüntüye eklenmesi gereken tüm yapıtları tutabileceğiniz dizin. Varsayılan olarak, değer şu şekildedir: ${{ GITHUB.WORKSPACE }}/workflow-artifacts.
customizer-destination Hayır Bu, özelleştirilmiş görüntüde yapıtların kopyalandığı dizindir.
customizer-windows-update Hayır Yalnızca Windows için. Boole değeri. ise true, görüntü oluşturucu özelleştirmelerin sonunda Windows update'i çalıştırır.
dist-location Hayır SharedImageGallery için bu değeridir dist-type.
dist-image-tags Hayır Bunlar, oluşturulan özel görüntüye eklenen kullanıcı tanımlı etiketlerdir (örnek: version:beta).

Sanal makinenizi oluşturma

Son adım olarak, görüntünüzden bir sanal makine oluşturun.

  1. için {rgName}yer tutucularını kaynak grubu adınızla değiştirin.

  2. Sanal makine parolası () ile bir GitHub gizli dizisiVM_PWD ekleyin. Parolayı bir daha göremeyeceğiniz için not edin. Kullanıcı adı: 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 }}"              

YAML'i tamamlama

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

Sonraki adımlar