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

Şablonunuz azd CI/CD işlem hattı tanım dosyası içermiyorsa, uygulamanızın derlemesini ve dağıtımını otomatikleştirmek için bir tane oluşturabilirsiniz. İyi yapılandırılmış işlem hattı tanımı genellikle dört ana bölüm içerir:

  • Tetikleyici: Kodun belirli dallara gönderilmesi, çekme istekleri veya manuel tetikleyiciler gibi işlem hattının çalışması gereken olayları belirtir. Tetikleyicileri tanımlamak, işlem hattınızın geliştirme etkinliklerine yanıt olarak otomatik olarak çalışmasını sağlayarak sürekli tümleştirmeyi ve dağıtımı etkinleştirir.

  • İzinler: İşlem hattının kaynaklarla güvenli bir şekilde etkileşim kurması için gereken erişimi belirtir. Örneğin, depo içeriğini okumak veya kimlik belirteçleri istemek için izinler verin. Güvenli ve başarılı dağıtımlar için doğru izinler gereklidir.

  • İşletim Sistemi veya Havuz: Belirli bir sanal makine görüntüsü (örneğin, ubuntu-latest) veya aracı havuzu gibi işlem hattı işlerinin ortamını ayarlar. Doğru ortamın seçilmesi, uygulamanızın derleme ve dağıtım gereksinimleriyle uyumluluğu sağlar.

  • Adımlar: kodu kullanıma alma, bağımlılıkları yükleme, oluşturma, altyapı sağlama ve Azure'a dağıtma gibi işlem hattının gerçekleştirdiği görevleri listeler. Her adım, uçtan uca dağıtım işlemini otomatikleştirmek için açıkça tanımlanmalıdır.

Aşağıdaki örneklerde GitHub Actions ve Azure Pipelines için işlem hattı 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 ayarları yapılandırın:

  • Verme id-token: write ve contents: read erişim kapsamları.
  • Önceden yüklenmiş bir Docker görüntüsü kullanmadığınız sürece azd.

İşlem hattı tanımınız için başlangıç noktası olarak bu şablonu kullanın:

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