İşlem hattı yapılandırma ve güncelleştirmeleri gönderme

Bu makalede, GitHub Actions veya Azure DevOps gibi bir CI/CD işlem hattı aracılığıyla şablon değişikliklerini göndermek için Azure Geliştirici CLI'sını (azd) kullanmayı öğreneceksiniz. Bu örnekte React Web App'i Node.js API'siyle ve Azure'da MongoDB şablonuyla kullanacaksınız, ancak bu makalede öğrendiğiniz ilkeleri Azure Geliştirici CLI şablonlarından herhangi birine uygulayabilirsiniz.

Not

Komut azd pipeline config hala beta sürümündedir. Özellik sürüm oluşturma ve sürüm stratejisi sayfasında alfa ve beta özellik desteği hakkında daha fazla bilgi edinin.

Önkoşullar

azd şablonlar , CI/CD kurulumu için gereken adlı azure-dev.ymlvarsayılan bir GitHub Actions ve/veya Azure DevOps işlem hattı yapılandırma dosyası içerebilir veya içermeyebilir. Bu yapılandırma dosyası Azure kaynaklarınızı sağlar ve kodunuzu ana dala dağıtır. bulabilirsiniz azure-dev.yml:

  • GitHub Actions için: dizininde .github/workflows .
  • Azure DevOps için: dizininde .azdo/pipelines .

Yapılandırma dosyasını olduğu gibi kullanabilir veya gereksinimlerinize uyacak şekilde değiştirebilirsiniz.

Not

çağırmadan azd pipeline configönce şablonunuzun işlem hattı tanımına (azure-dev.yaml) sahip olduğundan emin olun. azd bu dosyayı otomatik olarak oluşturmaz. Aşağıdaki azd için işlem hattı tanımı oluşturma bölümüne bakın.

azd pipeline config Komutunu kullanarak aşağıdaki görevleri işleyen bir CI/CD işlem hattı yapılandırın:

  • Azure aboneliğinde uygulama için bir hizmet sorumlusu oluşturur ve yapılandırılır. Azd'in Owner hizmet sorumlusuna rol oluşturmasına ve atamasına izin vermek için kullanıcınızın Azure aboneliğinde rolü veya Contributor + User Access Administrator rolleri olmalıdır.
  • GitHub veya Azure DevOps deposu oluşturup yapılandırmak ve proje kodunuzu buna işlemek için bir iş akışında size yol gösterir. Ayrıca mevcut bir depo kullanmayı da seçebilirsiniz.
  • Azure ile deponuz arasında güvenli bir bağlantı oluşturur.
  • İş akışı dosyasını iade ettiğinizde GitHub eylemini çalıştırır.

Bu işlem üzerinde daha ayrıntılı denetim için veya kullanıcınız gerekli rollere sahip değilse, işlem hattını el ile yapılandırabilirsiniz.

Devam etmek için tercih ettiğiniz işlem hattı sağlayıcısını seçin:

GitHub'ı Azure'a dağıtma yetkisi verme

İş akışını yapılandırmak için, gitHub eyleminden hizmet sorumlusunu sizin adınıza Azure'a dağıtma yetkisi vermeniz gerekir. azd hizmet sorumlusunu ve bunun için bir federasyon kimlik bilgilerini oluşturur.

  1. Azure hizmet sorumlusunu oluşturmak ve işlem hattını yapılandırmak için aşağıdaki komutu çalıştırın:

    azd pipeline config
    

    Bu komut isteğe bağlı olarak bir GitHub deposu oluşturur ve kodu yeni depoya iletir.

    Not

    Varsayılan olarak, azd pipeline config federasyon kimlik bilgileri olarak adlandırılan OpenID Connect (OIDC) kullanır. OIDC'yi kullanmak istemiyorsanız azd pipeline config --auth-type client-credentials komutunu çalıştırın.

    Terraform için OIDC/federasyon kimlik bilgileri desteklenmez .

    içinde OIDC desteği azdhakkında daha fazla bilgi edinin.

  2. İstenen GitHub bilgilerini sağlayın.

  3. Yeni bir GitHub Actions çalıştırması başlatmak için yerel değişikliklerinizi işlemeniz ve göndermeniz istendiğinde belirtin y.

  4. Terminal penceresinde komutun azd pipeline config sonuçlarını görüntüleyin. komutu, azd pipeline config projeniz için GitHub depo adının çıkışını alır.

  5. Tarayıcınızı kullanarak projenizin GitHub deposunu açın.

  6. İş akışının çalıştığını görmek için Eylemler'i seçin.

    Çalışan GitHub iş akışının ekran görüntüsü.

Kod değişikliği yapma ve gönderme

  1. Projenin /src/web/src/layout dizininde dosyasını açın header.tsx.

  2. satırını <Text variant="xLarge">ToDo</Text>bulun.

  3. Değişmez değeri ToDo olarak myTododeğiştirin.

  4. Dosyayı kaydedin.

  5. Değişikliğinizi işleyin. Değişikliğin işlenmesi, güncelleştirmeyi dağıtmak için GitHub Eylem işlem hattını başlatır.

    Test dosyasında değişiklik yapmak ve işlemek için gereken adımların ekran görüntüsü.

  6. Tarayıcınızı kullanarak projenizin GitHub deposunu açarak her ikisini de görebilirsiniz:

    • İşlemeniz
    • GitHub Actions tarafından ayarlanan işleme.

    GitHub'daki taahhüt edilen değişikliğinizin ekran görüntüsü.

  7. Test güncelleştirmesinin iş akışına yansıtılmış olduğunu görmek için Eylemler'i seçin.

    Test güncelleştirmesinin ardından çalıştırılan GitHub iş akışının ekran görüntüsü.

  8. Güncelleştirmeyi incelemek için web ön uç URL'sini ziyaret edin.

azd GitHub eylemi olarak

GitHub eylemi olarak ekleyin.azd Bu eylem yüklenir azd. Bunu kullanmak için aşağıdakileri öğesine .github\workflows\azure-dev.ymlekleyebilirsiniz:

on: [push]

jobs:
   build:
      runs-on: ubuntu-latest
      steps:
         - name: Install azd
         uses: Azure/setup-azd@v0.1.0

Kaynakları temizleme

Bu makalede oluşturulan Azure kaynaklarına artık ihtiyacınız kalmadığında aşağıdaki komutu çalıştırın:

azd down

Gelişmiş özellikler

Komutu, aşağıdaki bölümlerde açıklandığı gibi belirli şablon senaryoları veya gereksinimleri için genişletebilirsiniz azd pipeline config .

Ek gizli diziler veya değişkenler

Varsayılan olarak, azd işlem hattı için değişkenleri ve gizli dizileri ayarlar. Örneğin, azd pipeline config komutu her yürütürken işlem hattı değişkenleri olarak ve region değerlerini oluşturursubscription idenvironment name. İşlem hattı tanımı daha sonra şu değişkenlere başvurur:

env:
   AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
   AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
   AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
   AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
   AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}

İşlem hattı çalıştırıldığında, azd değişkenlere ve gizli dizilere eşlenen ortamdan değerleri alır. Şablona bağlı olarak, ortam değişkenlerini kullanarak denetleyebileceğiniz ayarlar olabilir. Örneğin, adlı KEY_VAULT_NAME bir ortam değişkeni, şablon altyapısındaki bir Key Vault kaynağının adını tanımlamak için ayarlanabilir. Bu gibi durumlarda, değişkenlerin ve gizli dizilerin listesi, şablonu kullanılarak azure.yamltanımlanabilir. Örneğin, aşağıdaki azure.yaml yapılandırmayı göz önünde bulundurun:

pipeline:
  variables:
    - KEY_VAULT_NAME
    - STORAGE_NAME
  secrets:
    - CONNECTION_STRING

Bu yapılandırmayla, azd değişkenlerden veya gizli dizilerden herhangi birinin ortamda boş olmayan bir değere sahip olup olmadığını denetler. azd ardından yapılandırmadaki anahtarın adını değişkenin veya gizli dizinin adı olarak ve değerin ortamından dize olmayan değeri kullanarak işlem hattı için bir değişken veya gizli dizi oluşturur.

İşlem azure-dev.yaml hattı tanımı daha sonra değişkenlere veya gizli dizilere başvurabilir:

- name: Provision Infrastructure
   run: azd provision --no-prompt
   env:
      KEY_VAULT_NAME: ${{ variables.KEY_VAULT_NAME }}
      STORAGE_NAME: ${{ variables.STORAGE_NAME }}
      CONNECTION_STRING: ${{ secrets.CONNECTION_STRING }}

Not

azd'in işlem hattı değerlerini sıfırlaması için içindeki azure.yaml gizli dizilerin veya değişkenlerin listesini güncelleştirdikten sonra çalıştırmanız azd pipeline config gerekir.

Altyapı parametreleri

Aşağıdaki bicep örneğini göz önünde bulundurun:

@secure()
param BlobStorageConnection string

Parametrenin BlobStorageConnection varsayılan değer kümesi yoktur, bu nedenle azd kullanıcıdan bir değer girmesini ister. Ancak, CI/CD sırasında etkileşimli bir istem yoktur. azd komutunu çalıştırdığınızda azd pipeline configparametresinin değerini istemesi, değeri işlem hattına kaydetmesi ve işlem hattı çalıştırıldığında değeri yeniden getirmesi gerekir.

azd adlı AZD_INITIAL_ENVIRONMENT_CONFIG bir işlem hattı gizli dizisini kullanarak işlem hattındaki tüm gerekli parametrelerin değerini otomatik olarak kaydeder ve ayarlar. Yalnızca işlem hattınızda bu gizli diziye başvurmanız gerekir:

- name: Provision Infrastructure
   run: azd provision --no-prompt
   env:
      AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}

İşlem hattı çalıştırıldığında, azd parametrelerin değerlerini gizli diziden alır ve etkileşimli istem gereksinimini ortadan kaldırır.

Not

Yeni bir parametre eklerseniz yeniden çalıştırmanız azd pipeline config gerekir.

İşlem hattı tanımı oluşturma

Şablonunuzun azd ci/CD işlem hattı tanım dosyası yoksa kendiniz oluşturabilirsiniz. CI/CD işlem hattı tanımı genellikle 4 ana bölüme sahiptir:

  • tetiklemek
  • izinler
  • işletim sistemi veya havuz
  • çalıştırılacak adımlar

Aşağıdaki örneklerde GitHub Actions ve Azure Pipelines için bir tanım dosyasının ve ilgili yapılandırmaların nasıl oluşturulacağı gösterilmektedir.

GitHub Actions'da çalıştırmak azd için aşağıdaki yapılandırmalar gerekir:

Kendi işlem hattı tanımınız için başlangıç noktası olarak aşağıdaki şablonu kullanabilirsiniz:

on:
  workflow_dispatch:
  push:
    # Run when commits are pushed to mainline branch (main or master)
    # Set this to the mainline branch you are using
    branches:
      - main
      - master

# Set this permission if you are using a Federated Credential.
permissions:
  id-token: write
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest
    # azd build-in variables.
    # This variables are always set by `azd pipeline config`
    # You can set them as global env (apply to all steps) or you can add them to individual steps' environment
    env:
      AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
      AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
      AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
      AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
      AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
      ## Define the additional variables or secrets that are required globally (provision and deploy)
      # ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
      # ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}      
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      # using the install-azd action
      - name: Install azd
        uses: Azure/setup-azd@v1.0.0

      # # If you want to use azd-daily build, or install it from a PR, you can remove previous step and
      # # use the next one:
      # - name: Install azd - daily or from PR
      #  # Update this scrip based on the OS - pool of your pipeline. This example is for a linux pipeline installing daily build
      #  run: curl -fsSL https://aka.ms/install-azd.sh | bash -s -- --version daily
      #  shell: pwsh

      # azd set up Federated Credential by default. You can remove this step if you are using Client Credentials
      - name: Log in with Azure (Federated Credentials)
        if: ${{ env.AZURE_CLIENT_ID != '' }}
        run: |
          azd auth login `
            --client-id "$Env:AZURE_CLIENT_ID" `
            --federated-credential-provider "github" `
            --tenant-id "$Env:AZURE_TENANT_ID"
        shell: pwsh

      ## If you set up your pipeline with Client Credentials, remove previous step and uncomment this one
      # - name: Log in with Azure (Client Credentials)
      #   if: ${{ env.AZURE_CREDENTIALS != '' }}
      #   run: |
      #     $info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable;
      #     Write-Host "::add-mask::$($info.clientSecret)"

      #     azd auth login `
      #       --client-id "$($info.clientId)" `
      #       --client-secret "$($info.clientSecret)" `
      #       --tenant-id "$($info.tenantId)"
      #   shell: pwsh
      #   env:
      #     AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }}

      - name: Provision Infrastructure
        run: azd provision --no-prompt
        env:
         #  # uncomment this if you are using infrastructure parameters
         #  AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
         ## Define the additional variables or secrets that are required only for provision 
         #  ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
         #  ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}

      - name: Deploy Application
        run: azd deploy --no-prompt
        env:
         ## Define the additional variables or secrets that are required only for deploy
         #  ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
         #  ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}