Aracılığıyla paylaş


Öğretici: Azure DevOps ile çok aşamalı işlem hattı oluşturma

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

CI/CD işleminizi geliştirme döngünüzün farklı bölümlerini temsil eden aşamalara bölmek için bir Azure DevOps çok aşamalı işlem hattı kullanın. Çok aşamalı işlem hattı, dağıtım sürecinize daha fazla görünürlük sağlar ve onayları ve denetimleri tümleştirmeyi kolaylaştırır.

Bu makalede iki App Service örneği oluşturacak ve üç aşamalı bir YAML işlem hattı oluşturacaksınız:

Gerçek dünya senaryosunda DevOps işleminize bağlı olarak üretime dağıtım için başka bir aşamanız olabilir.

Bu alıştırmadaki örnek kod, yüksek puanlar göstermek için puan tablosu içeren bir rol yapma alanı oyununa yönelik bir .NET web uygulamasına yöneliktir. Linux için Azure Web App'in hem geliştirme hem de hazırlama örneklerine dağıtacaksınız.

Önkoşullar

ürün Gereksinimler
Azure DevOps - Azure DevOps kuruluşu ve projesi. Ücretsiz bir tane oluşturun.
- İzinler:
    - Projedeki tüm işlem hatlarına erişim vermek için:Proje Yöneticileri grubunun üyesi olmanız gerekir.
    - Hizmet bağlantıları oluşturmak için:hizmet bağlantıları için Yönetici veya Oluşturucu rolüne sahip olmanız gerekir.
- Microsoft tarafından barındırılan ajanlarda pipeline'ları çalıştırma yeteneği. Paralel bir satın alabilir veya ücretsiz katman isteyebilirsiniz.
GitHub (İngilizce) - GitHub hesabı.

Projeyi kopyala ve geliştir

GitHub'da aşağıdaki örnek depoyu forkla.

https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy

App Service örneklerini oluşturma

İşlem hattınızı dağıtabilmeniz için önce dağıtım için bir App Service örneği oluşturmanız gerekir. Örneği oluşturmak için Azure CLI kullanacaksınız.

  1. Azure Portal’ında oturum açın.

  2. Menüden Cloud Shell ve Bash deneyimi'ni seçin.

  3. Web uygulamanızın etki alanı adını benzersiz hale getiren rastgele bir sayı oluşturun. Benzersiz bir değere sahip olmanın avantajı, App Service örneğinizin bu öğreticiyi tamamlayan diğer öğrencilerle bir ad çakışması olmamasıdır.

    webappsuffix=$RANDOM    
    
  4. Bir komut istemi açın ve komutu kullanarak az group create tüm App Service örneklerinizi içeren tailspin-space-game-rg adlı bir kaynak grubu oluşturun. location Değeri en yakın bölgenizi kullanacak şekilde güncelleştirin.

    az group create --location eastus --name tailspin-space-game-rg
    
  5. App Service planı oluşturmak için komut istemini kullanın.

    az appservice plan create \
      --name tailspin-space-game-asp \
      --resource-group tailspin-space-game-rg \
      --sku B1 \
      --is-linux
    
  6. Komut isteminde, komutuyla az webapp create her örnek (Geliştirme ve Hazırlama) için birer tane olan iki App Service örneği oluşturun.

    az webapp create \
      --name tailspin-space-game-web-dev-$webappsuffix \
      --resource-group tailspin-space-game-rg \
      --plan tailspin-space-game-asp \
      --runtime "DOTNET|8.0"
    
    az webapp create \
      --name tailspin-space-game-web-staging-$webappsuffix \
      --resource-group tailspin-space-game-rg \
      --plan tailspin-space-game-asp \
      --runtime "DOTNET|8.0"
    
  7. Komut istemiyle, az webapp list komutunu çalıştırarak çalıştıklarını doğrulamak için her iki App Service örneğini de listeleyin.

    az webapp list \
      --resource-group tailspin-space-game-rg \
      --query "[].{hostName: defaultHostName, state: state}" \
      --output table
    
  8. Sonraki bölümde değişken olarak kullanmak için App Service örneklerinin adlarını kopyalayın.

Azure DevOps projenizi ve değişkenlerinizi oluşturma

Azure DevOps projenizi ve derleme işlem hattınızı ayarlayın. Ayrıca geliştirme ve hazırlama örnekleriniz için değişkenler de ekleyeceksiniz.

Derleme işlem hattınız:

  • Dalda kod değişikliği olduğunda çalışan bir tetikleyici içerir
  • İki değişken buildConfiguration tanımlar ve releaseBranchName
  • Web uygulamasını oluşturan Build adlı bir aşama içerir
  • Daha sonraki bir aşamada kullanacağınız bir yapıtı yayımlar

Derleme aşamasını ekleme

  1. Azure DevOps kuruluşunuzda oturum açın ve projenize gidin.

  2. İşlem Hatları'na gidin ve ardından yeni işlem hattı veya İlk işlem hattınızı oluşturuyorsanız işlem hattı oluştur'u seçin.

  3. İlk olarak kaynak kodunuzun konumu olarak GitHub'ı seçerek sihirbazın adımlarını uygulayın.

  4. Oturum açmak için GitHub'a yönlendirilebilirsiniz. Öyleyse GitHub kimlik bilgilerinizi girin.

  5. Depo listesini gördüğünüzde deponuzu seçin.

  6. Azure Pipelines uygulamasını yüklemek için GitHub'a yönlendirilebilirsiniz. Öyleyse Onayla ve yükle'yi seçin.

  1. Yapılandır sekmesi görüntülendiğinde, Başlangıç işlem hattı'nı seçin.

  2. azure-pipelines.yml içeriğini bu kodla değiştirin.

    trigger:
    - '*'
    
    variables:
      buildConfiguration: 'Release'
      releaseBranchName: 'release'
    
    stages:
    - stage: 'Build'
      displayName: 'Build the web application'
      jobs: 
      - job: 'Build'
        displayName: 'Build job'
        pool:
          vmImage: 'ubuntu-22.04'
          demands:
          - npm
    
        variables:
          wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot'
          dotnetSdkVersion: '8.x'
    
        steps:
        - task: UseDotNet@2
          displayName: 'Use .NET SDK $(dotnetSdkVersion)'
          inputs:
            version: '$(dotnetSdkVersion)'
    
        - task: Npm@1
          displayName: 'Run npm install'
          inputs:
            verbose: false
    
        - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)'
          displayName: 'Compile Sass assets'
    
        - task: gulp@1
          displayName: 'Run gulp tasks'
    
        - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt'
          displayName: 'Write build info'
          workingDirectory: $(wwwrootDir)
    
        - task: DotNetCoreCLI@2
          displayName: 'Restore project dependencies'
          inputs:
            command: 'restore'
            projects: '**/*.csproj'
    
        - task: DotNetCoreCLI@2
          displayName: 'Build the project - $(buildConfiguration)'
          inputs:
            command: 'build'
            arguments: '--no-restore --configuration $(buildConfiguration)'
            projects: '**/*.csproj'
    
        - task: DotNetCoreCLI@2
          displayName: 'Publish the project - $(buildConfiguration)'
          inputs:
            command: 'publish'
            projects: '**/*.csproj'
            publishWebProjects: false
            arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)'
            zipAfterPublish: true
    
        - publish: '$(Build.ArtifactStagingDirectory)'
          artifact: drop
    
  3. Hazır olduğunuzda Kaydet ve çalıştır'ı seçin.

Örnek değişkenleri ekleme

  1. Azure DevOps'ta İşlem Hatları>Kitaplığı'na gidin.

  2. + Değişken grubunu seçin.

  3. Özellikler altında, değişken grubu adı için Release ekleyin.

  4. Geliştirme ve test ana bilgisayar adlarınıza referans almak için iki değişken oluşturun. değerini 1234 örneğiniz için doğru değerle değiştirin.

    Değişken adı Örnek değer
    WebAppNameDev tailspin-space-game-web-dev-1234
    WebAppNameStaging tailspin-space-game-web-staging-1234
  5. Değişkenlerinizi kaydetmek için Kaydet'i seçin.

Geliştirme aşamasını ekleme

Ardından derlemenizi Geliştirme aşamasına yükseltmek için işlem hattınızı güncelleştireceksiniz.

  1. Azure Pipelines'da İşlem Hatları>İşlem Hatları bölümüne gidin.

  2. İşlem hattınızı düzenlemek için bağlam menüsünde Düzenle'yi seçin.

    Düzenle menü öğesini seçmenin ekran görüntüsü.

  3. azure-pipelines.yml Geliştirme aşaması içerecek şekilde güncelleştirin. Geliştirme aşamasında işlem hattınız şunları yapacaktır:

    • Bir koşul nedeniyle Derleme aşaması başarılı olduğunda çalıştırma
    • Bir yapıtı şu kaynaktan indirme: drop
    • Azure Resource Manager hizmet bağlantısıyla Azure Uygulaması Hizmeti'ne dağıtma
    trigger:
    - '*'
    
    variables:
      buildConfiguration: 'Release'
      releaseBranchName: 'release'
    
    stages:
    - stage: 'Build'
      displayName: 'Build the web application'
      jobs: 
      - job: 'Build'
        displayName: 'Build job'
        pool:
          vmImage: 'ubuntu-22.04'
          demands:
          - npm
    
        variables:
          wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot'
          dotnetSdkVersion: '8.x'
    
        steps:
        - task: UseDotNet@2
          displayName: 'Use .NET SDK $(dotnetSdkVersion)'
          inputs:
            version: '$(dotnetSdkVersion)'
    
        - task: Npm@1
          displayName: 'Run npm install'
          inputs:
            verbose: false
    
        - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)'
          displayName: 'Compile Sass assets'
    
        - task: gulp@1
          displayName: 'Run gulp tasks'
    
        - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt'
          displayName: 'Write build info'
          workingDirectory: $(wwwrootDir)
    
        - task: DotNetCoreCLI@2
          displayName: 'Restore project dependencies'
          inputs:
            command: 'restore'
            projects: '**/*.csproj'
    
        - task: DotNetCoreCLI@2
          displayName: 'Build the project - $(buildConfiguration)'
          inputs:
            command: 'build'
            arguments: '--no-restore --configuration $(buildConfiguration)'
            projects: '**/*.csproj'
    
        - task: DotNetCoreCLI@2
          displayName: 'Publish the project - $(buildConfiguration)'
          inputs:
            command: 'publish'
            projects: '**/*.csproj'
            publishWebProjects: false
            arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)'
            zipAfterPublish: true
    
        - publish: '$(Build.ArtifactStagingDirectory)'
          artifact: drop
    
    - stage: 'Dev'
      displayName: 'Deploy to the dev environment'
      dependsOn: Build
      condition:  succeeded()
      jobs:
      - deployment: Deploy
        pool:
          vmImage: 'ubuntu-22.04'
        environment: dev
        variables:
        - group: Release
        strategy:
          runOnce:
            deploy:
              steps:
              - download: current
                artifact: drop
              - task: AzureWebApp@1
                displayName: 'Azure App Service Deploy: dev website'
                inputs:
                  azureSubscription: 'your-subscription'
                  appType: 'webAppLinux'
                  appName: '$(WebAppNameDev)'
                  package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
    
  4. AzureWebApp@1 Aboneliğinizi kullanmak için görevi değiştirin.

    1. Görev için Ayarlar'ı seçin.

      YAML düzenleyici görevinde ayarlar seçeneğinin ekran görüntüsü.

    2. your-subscription Azure Aboneliği değerini kendi aboneliğinizi kullanacak şekilde güncelleştirin. Bu işlemin bir parçası olarak erişimi yetkilendirmeniz gerekebilir. YAML düzenleyicisinde kaynağınızı yetkilendirmeyle ilgili bir sorunla karşılaşırsanız alternatif bir yaklaşım hizmet bağlantısı oluşturmaktır.

      Azure aboneliği menü öğesinin ekran görüntüsü.

    3. Uygulama türünü Linux üzerinde Web App olarak ayarlayın.

    4. Görevi güncelleştirmek için Ekle'yi seçin.

  5. İşlem hattınızı kaydedin ve çalıştırın.

Hazırlama aşamasını ekleme

Son olarak Geliştirme evresini Hazırlık'a yükselteceksiniz. Geliştirme ortamından farklı olarak, hazırlama ortamında daha fazla denetim sahibi olmak istiyorsanız, el ile onay ekleyeceksiniz.

Hazırlık ortamı oluşturma

  1. Azure Pipelines'da Ortamlar'ı seçin.

  2. Yeni ortam'ı seçin.

  3. Staging adıyla ve Kaynak ayarı Yok olarak ayarlanmış yeni bir ortam oluşturun.

  4. Hazırlama ortamı sayfasında Onaylar ve denetimler'i seçin.

    Onaylar ve denetimler menü seçeneğinin ekran görüntüsü.

  5. Onaylar'ı seçin.

  6. Onaylayanlar'da Kullanıcılar ve gruplar ekle'yi seçin, ve ardından hesabınızı seçin.

  7. Onaylayanlara yönelik yönergeler bölümünde Hazırlamaya hazır olduğunda Bu değişikliği onayla yazın.

  8. Kaydet'i seçin.

İşlem hattına yeni aşama ekleme

İşlem hattına el ile onay içeren yeni bir aşama Staging ekleyeceksiniz.

  1. İşlem hattı dosyanızı düzenleyin ve Staging bölümünü ekleyin.

    trigger:
    - '*'
    
    variables:
      buildConfiguration: 'Release'
      releaseBranchName: 'release'
    
    stages:
    - stage: 'Build'
      displayName: 'Build the web application'
      jobs: 
      - job: 'Build'
        displayName: 'Build job'
        pool:
          vmImage: 'ubuntu-22.04'
          demands:
          - npm
    
        variables:
          wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot'
          dotnetSdkVersion: '8.x'
    
        steps:
        - task: UseDotNet@2
          displayName: 'Use .NET SDK $(dotnetSdkVersion)'
          inputs:
            version: '$(dotnetSdkVersion)'
    
        - task: Npm@1
          displayName: 'Run npm install'
          inputs:
            verbose: false
    
        - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)'
          displayName: 'Compile Sass assets'
    
        - task: gulp@1
          displayName: 'Run gulp tasks'
    
        - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt'
          displayName: 'Write build info'
          workingDirectory: $(wwwrootDir)
    
        - task: DotNetCoreCLI@2
          displayName: 'Restore project dependencies'
          inputs:
            command: 'restore'
            projects: '**/*.csproj'
    
        - task: DotNetCoreCLI@2
          displayName: 'Build the project - $(buildConfiguration)'
          inputs:
            command: 'build'
            arguments: '--no-restore --configuration $(buildConfiguration)'
            projects: '**/*.csproj'
    
        - task: DotNetCoreCLI@2
          displayName: 'Publish the project - $(buildConfiguration)'
          inputs:
            command: 'publish'
            projects: '**/*.csproj'
            publishWebProjects: false
            arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)'
            zipAfterPublish: true
    
        - publish: '$(Build.ArtifactStagingDirectory)'
          artifact: drop
    
    - stage: 'Dev'
      displayName: 'Deploy to the dev environment'
      dependsOn: Build
      condition:  succeeded()
      jobs:
      - deployment: Deploy
        pool:
          vmImage: 'ubuntu-22.04'
        environment: dev
        variables:
        - group: Release
        strategy:
          runOnce:
            deploy:
              steps:
              - download: current
                artifact: drop
              - task: AzureWebApp@1
                displayName: 'Azure App Service Deploy: dev website'
                inputs:
                  azureSubscription: 'your-subscription'
                  appType: 'webAppLinux'
                  appName: '$(WebAppNameDev)'
                  package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
    
    - stage: 'Staging'
      displayName: 'Deploy to the staging environment'
      dependsOn: Dev
      jobs:
      - deployment: Deploy
        pool:
          vmImage: 'ubuntu-22.04'
        environment: staging
        variables:
        - group: 'Release'
        strategy:
          runOnce:
            deploy:
              steps:
              - download: current
                artifact: drop
              - task: AzureWebApp@1
                displayName: 'Azure App Service Deploy: staging website'
                inputs:
                  azureSubscription: 'your-subscription'
                  appType: 'webAppLinux'
                  appName: '$(WebAppNameStaging)'
                  package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
    
  2. AzureWebApp@1 Hazırlama aşamasındaki görevi aboneliğinizi kullanacak şekilde değiştirin.

    1. Görev için Ayarlar'ı seçin.

      YAML düzenleyici görevinde ayarlar seçeneğinin ekran görüntüsü.

    2. your-subscription Azure Aboneliği değerini kendi aboneliğinizi kullanacak şekilde güncelleştirin. Bu işlemin bir parçası olarak erişimi yetkilendirmeniz gerekebilir.

      Azure aboneliği menü öğesinin ekran görüntüsü.

    3. Uygulama türünü Linux üzerinde Web App olarak ayarlayın.

    4. Görevi güncelleştirmek için Ekle'yi seçin.

  3. İşlem hattı çalışmasına gidin. Derleme işlemi çalışırken izleyin. ulaştığında Stagingişlem hattı el ile yayın onayını bekler. Ayrıca onay bekleyen bir işlem hattına sahip olduğunuzu belirten bir e-posta alırsınız.

    İşlem hattı onayı için beklemenin ekran görüntüsü.

  4. Onayı gözden geçirin ve işlem hattının çalışmasına izin verin.

    El ile doğrulama denetiminin ekran görüntüsü.

Kaynakları temizleme

Bu uygulamayı kullanmaya devam etmeyecekseniz aşağıdaki adımları izleyerek Azure portalda kaynak grubunu ve Azure DevOps'taki projeyi silin:

Kaynak grubunuzu temizlemek için:

  1. Azure portalına gidin ve oturum açın.

  2. Menü çubuğunda Cloud Shell'i seçin. İstendiğinde Bash deneyimini seçin.

    Cloud Shell menü öğesini seçmeyi gösteren Azure portalının ekran görüntüsü.

  3. Kullandığınız kaynak grubunu silmek için aşağıdaki tailspin-space-game-rg komutunu çalıştırın.

    az group delete --name tailspin-space-game-rg
    

Azure DevOps projenizi, derleme işlem hattı da dahil olmak üzere, silmek için bkz. Projeyi silme.