Alıştırma - GitHub Actions ile ARM şablonlarınızı CI/CD çalışmalarınızın bir parçası olarak dağıtma

Tamamlandı

Burada GitHub Actions iş akışından bir Azure Resource Manager (ARM) şablonu dağıtacaksınız.

Önemli

Bu alıştırmayı Microsoft Learn ortamının dışında gerçekleştirirsiniz. Bu alıştırma için kendi Azure aboneliğinizin olması gerekir ve sizden ücret alınabilir. Bunun nedeni, korumalı alan aboneliğinde desteklenmeyen bir hizmet sorumlusu oluşturmanız gerekmesidir.  Mevcut bir Azure aboneliğiniz yoksa başlamadan önce bir ücretsiz hesap oluşturun.

GitHub hesabınızı ve deponuzu oluşturma

Öncelikle GitHub hesabınız yoksa lütfen GitHub hesap oluşturma sayfasına giderek bir hesap oluşturun. (Ücretsizdir.)

GitHub hesap oluşturma sayfasının gösterildiği ekran görüntüsü.

Hesabınızı oluşturduktan sonra oturum açıp yeni bir depo oluşturun. Kod olarak altyapı (IaC) modelinize ait şablonu burada tutacaksınız. Depo oluşturmak için şu adımları izleyin:

  1. GitHub sitesindeki herhangi bir sayfanın sağ üst köşesinde bulunan + açılan menüsünden New repository (Yeni depo) öğesini seçin. Alternatif olarak, varsa yeşil renkli Depo oluştur düğmesini seçin.

    GitHub deposu oluşturmaya yönelik seçeneklerin gösterildiği ekran görüntüsü.

  2. Deponuz için kısa ve unutmayacağınız bir ad girin. Örneğin, Deploy-ARM-Template kullanın. İsteğe bağlı olarak, deponuz için bir açıklama girin. Örnek: GitHub Actions ile ilk ARM şablonumu dağıtıyorum.

  3. Depo için bir görünürlük ayarı seçin. Genel depolara internet üzerindeki herkes erişim sağlayabilir. Özel depolara yalnızca siz ve açıkça erişim izni verdiğiniz kişiler erişebilir. (Bu alıştırma için herhangi birini seçebilirsiniz.)

  4. Initialize this repository with a README (Bu depoyu BENİOKU dosyasıyla başlat) öğesini seçin.

  5. Create repository (Depo oluştur) öğesine tıklayın.

    Yeni depo ayrıntılarının oluşturulmasını gösteren ekran görüntüsü.

Deponuzu oluşturduğunuz ve BENİOKU dosyasıyla başlattınız. Artık depoya bir şablon ve şablon parametre dosyası gönderebilirsiniz.

Not

BENİOKU dosyasını projenizi ayrıntılı olarak anlatmak veya projenizi yüklemeye ya da kullanmaya yönelik belgeler eklemek için kullanabilirsiniz. BENİOKU dosyanızın içeri otomatik olarak deponuzun giriş sayfasında gösterilir.

Depoya ARM şablonu dosyası gönderme

  1. GitHub’da deponun ana sayfasına gidin.

  2. Dosya listesinin üstündeki Dosya ekle açılır listesinden Yeni dosya oluştur’u seçin.

    Depoya şablon ekleme seçeneklerinin gösterildiği ekran görüntüsü.

  3. Dosya adı alanına şablonun adını ve uzantısını girin. Alıştırmamızda azuredeploy.json adını kullanın. Aşağıdaki şablonu kopyalayıp yeni GitHub dosyanıza yapıştırın:

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "VnetName": {
                "type": "string",
                "defaultValue": "VNet-001",
                "metadata": {
                    "description": "Virtual Network Name"
                }
            },
            "CostCenterIO": {
                "type": "string",
                "defaultValue": "12345",
                "metadata": {
                    "description": "Cost Center IO number for cross billing"
                }
            },
            "OwnerName": {
                "type": "string",
                "defaultValue": "John Smith",
                "metadata": {
                    "description": "Name of the stakeholder responsible for this resource"
                }
            }
        },
        "variables": {},
        "resources": [
            {
                "apiVersion": "2018-10-01",
                "type": "Microsoft.Network/virtualNetworks",
                "name": "[parameters('VnetName')]",
                "location": "[resourceGroup().location]",
                "tags": {
                    "CostCenter": "[parameters('CostCenterIO')]",
                    "Owner": "[parameters('OwnerName')]"
                },
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "10.0.0.0/16"
                        ]
                    },
                    "enableVmProtection": false,
                    "enableDdosProtection": false,
                    "subnets": [
                        {
                            "name": "subnet001",
                            "properties": {
                                "addressPrefix": "10.0.0.0/24"
                            }
                        },
                        {
                            "name": "subnet002",
                            "properties": {
                                "addressPrefix": "10.0.1.0/24"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  4. Commit new file (Yeni dosya gönder) bölümüne bir açıklama ekleyip Commit new file (Yeni dosya gönder) öğesini seçerek dosyayı deponuza kaydedin.

    Depoya yeni bir şablon kaydetmenin gösterildiği ekran görüntüsü.

GitHub Actions ile Azure aboneliğiniz arasındaki kimlik doğrulamasını yapılandırın

GitHub Actions ile Azure’a kaynak dağıtmak için bir Azure hizmet sorumlusu oluşturmanız ve şablonlarınızda tanımlanan kaynakları oluşturma izni vermeniz gerekir. Bu adımı aboneliğinizde oturum açtıktan sonra Azure portalın Azure Cloud Shell bölümünden tamamlayacaksınız.

Hizmet sorumlusunu oluşturma

Azure kaynaklarını dağıtmaya yarayan GitHub Actions iş akışı sorumlusu için, doğru yerleşik katkıda bulunan gerekir.

Aşağıdaki Azure CLI betiği, Azure kaynak grubunda katkıda bulunan izinlerine sahip bir Azure hizmet sorumlusu oluşturma adımlarını göstermektedir. Bu kaynak grubu, iş akışının ARM şablonunuzda tanımlanan kaynakları dağıtacağı yerdir.

projectName="GitHubActionExercise"
location="eastus"
resourceGroupName="${projectName}-rg"
appName="http://${projectName}"

# Create the resource group
az group create --name $resourceGroupName --location $location

# Store the resource group ID in a variable
scope=$(az group list --query "[?contains(name, '$resourceGroupName')].id" -o tsv)

# Create the service principal with contributor rights to the resource group we just created
az ad sp create-for-rbac --name $appName --role Contributor --scopes $scope --sdk-auth

Portalda aboneliğinizde oturum açtığınızda, kabuğu açmak için sayfanın alt kısmındaki Cloud Shell’i seçin.

Cloud Shell’in açılmasını gösteren animasyon.

Yukarıdaki kodu kabuk ortamında kullanarak hizmet sorumlusunu oluşturun. Aşağıdaki sonuçları alırsınız. GitHub'da gizli diziyi yapılandırırken kullanmak üzere sonuçların JSON bölümünü (aşağıdaki ekran görüntüsünde kırmızı kutuyla gösterilen içerik) kopyalayın.

Azure’da hizmet sorumlusu oluşturmaya yönelik sonuçların gösterildiği ekran görüntüsü.

JSON çıkışını kopyalayıp GitHub deponuza GitHub gizli dizisi olarak kaydedin. Bunu yapmak için GitHub deponuzda Ayarlar sekmesini ve ardından sol taraftaki menüden Gizli Dizi öğesini seçin.

Aşağıdaki değerleri girin ve sonra Gizli dizi ekle’yi seçin:

  • Name: AZURE_CREDENTIALS yazın.
  • Değer: Daha önce kopyaladığınız JSON çıkışını yapıştırın.

Gizli diziye yeni hizmet sorumlusu gizli dizi bilgileri eklemeyi GitHub görüntüsü.

İş akışında kimlik doğrulaması gerçekleştirmek için bu bilgilere ihtiyaç duyacaksınız.

İş akışı oluşturma

İş akışı dosyasının deponuzun .github/workflows klasöründe bulunması gerekir. İş akışı dosyası .yml veya .yaml uzantısına sahip olabilir.

İş akışı dosyası oluşturabilir ve sonra dosyayı depoya gönderebilir veya yükleyebilirsiniz. Alternatif olarak, GitHub arabiriminde oluşturmak için aşağıdaki yordamı kullanabilirsiniz:

  1. GitHub deponuzda üst taraftaki menüden Actions öğesini ve ardından Set up a workflow yourself (Kendiniz bir iş akışı ayarlayın) öğesini seçin.

    İş akışı ayarlamaya yönelik seçeneklerin gösterildiği ekran görüntüsü.

  2. main.yml yerine farklı bir ad kullanmak istiyorsanız iş akışı dosyasını yeniden adlandırabilirsiniz. Örneğin: deployARMTemplate.yml.

  3. yml dosyasının içeriğini aşağıdakiler kodla değiştirin.

    Not

    GitHub Marketplace sayfasında ARM şablonu dağıtmak için kullanabileceğiniz özel eylemler vardır. Bu modülde Deploy Azure Resource Manager (ARM) Template (Azure Resource Manager (ARM) Şablonu Dağıtma) adlı market sağlayıcısı kullanılmıştır.

    name: Deploy ARM Template
    
    on:
      push:
        branches:
          - master
    env:
      AZURE_SUBSCRIPTION_ID: << Subscription Id >>   # set this to your Azure Subscription Id
      AZURE_RESOURCE_GROUP: GitHubActionExercise-rg   # set this to your target resource group
    
    jobs:
      deploy-virtual-network-template:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout source code
            uses: actions/checkout@master
    
          - name: Login to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Deploy ARM Template
            uses: azure/arm-deploy@v1
            with:
              scope: resourcegroup
              subscriptionId: ${{ env.AZURE_SUBSCRIPTION_ID }}
              resourceGroupName: ${{ env.AZURE_RESOURCE_GROUP }}
              template: ./path-to/azuredeploy.json
    

    İş akışı dosyası üç bölümden oluşur:

    • name: Bu, iş akışının adıdır.
    • on: Bu, iş akışını tetikleyen GitHub olaylarının adıdır. İş akışı, ana dalda en az bir dosyayı değiştiren bir gönderme olayı olduğunda tetiklenir.
    • jobs: Bir iş akışı çalıştırması bir veya daha fazla işten oluşur. Yalnızca bir iş deploy-virtual-network-template olarak adlandırılır. Bu işin üç adımı vardır:
      1. Kaynak kodunu kullanıma alma.
      2. Azure'da oturum açın.
      3. ARM şablonunu dağıtma.

    Önemli

    creds: ${{ secrets.AZURE_CREDENTIALS }} ifadesindeki gizli dizi adının, deponuzun ayarlarına kaydettiğiniz gizli dizinin adıyla eşleştiğini doğrulayın. Deploy ARM Template adımındaki ARM şablonu adının (template: $GITHUB_WORKSPACE/azuredeploy.json) daha önce depoya kaydettiğiniz şablonla eşleştiğini doğrulayın.

    Not

    Dağıtım kimlik bilgilerini yapılandırdığınızda, önceki Azure CLI kodunu kullandıysanız kaynak grubu adının GitHubActionExercise-rg olması gerekir. Oluşturulan kaynak grubu adı, proje adının rg eklenmiş halidir.

  4. Start commit (İşlemeye başla) öğesini seçin. Gerekirse bir yorum ve açıklama ekleyin.

  5. Commit directly to the master branch (Doğrudan ana dala işle) seçeneğinin belirlendiğinden emin olun ve sonra Commit new file (Yeni dosya işle) (veya Commit changes (Değişiklikleri işle)) seçeneğini belirleyin.

    Ana dala bir iş akışı işlemeyi gösteren ekran görüntüsü.

    İş akışınızdaki tetikleyici, ana dala yapılan işleme/gönderme işlemleri olduğundan iş akışı dosyası oluşturulduktan ve deponun ana dalına gönderildikten sonra iş akışı otomatik olarak başlayacaktır.

    on:
      push:
        branches:
          - master
    
  6. Deponuza gidin ve iş akışınızın durumunu denetleyin.

    İş akışı durumunun gösterildiği ekran görüntüsü.

Dağıtımınızı denetleme

İş akışı tamamlandıktan sonra dağıtım durumunu denetlemek için Azure portala gidin.

Soldaki bölmede Resource groups > GitHubActionExercise-rg seçeneğini belirleyin. Dağıtımlar bölmesinde, dağıtımınızın başarılı olduğunu doğrulayın.

Dağıtım durumunun gösterildiği ekran görüntüsü.