Alıştırma - Şablonları kullanarak birden çok yapılandırma oluşturma

Tamamlandı

Önceki alıştırmalarda, Space Game web sitesini oluşturan bir işlem hattı uyguladınız. Her derleme eylemini gerçekleştiren ve her eylemi ilgili işlem hattı göreviyle eşleyen bir betikle başladınız. İşlem hattının çıkışı, derlenmiş web uygulamasını içeren bir .zip dosyasıdır.

Bu alıştırmada, proje dosyasında tanımlanan herhangi bir yapılandırmayı oluşturabilecek derleme görevlerini tanımlamak için bir şablon kullanacaksınız. Şablonlar mantığınızı bir kez tanımlamanıza ve ardından birkaç kez yeniden kullanmanıza olanak sağlar. Şablonlar, birden çok YAML dosyasının içeriğini tek bir işlem hattında birleştirir.

Bahşiş

Modüldeki bu adım isteğe bağlıdır. Şu anda şablonlar hakkında bilgi edinmek istemiyorsanız, sonraki adım olan Azure DevOps ortamınızı temizleme adımına geçin. Şablonlar hakkında daha fazla bilgi için bkz . Şablon türleri ve kullanımı.

Mara ve Amita ile kontrol ederek başlayalım.

Tanıtım

Mara, sonuçlarını paylaşmak için heyecanla Amita'yı takip eder ve derleme işlem hattını gösterir.

Bu kadar çabuk çalışman beni çok etkiledi! Aslında, ben de tam seni görmeye geliyordum çünkü derlemenin hazır olduğunu söyleyen bir e-posta aldım. Teşekkürler! İşlem hattının yalnızca Yayın yapılandırmasını oluşturduğunu görüyorum. Uygulama kilitlenirse ek bilgileri yakalayabilmemiz için Hata ayıklama derlemelerini de kullanırız. Bunu ekleyebilir miyiz?

Kesinlikle. Bunu ayarlarken Hata ayıklama derlemelerini kullanmayı unuttum. Birlikte oturup eklemeye ne dersin?

Derleme adımlarını tanımlayan YAML dosyasını gösterdiniz ama nasıl değiştirileceğinden emin değilim.

Sorun değil. Ben yazarken izleyebilirsin. Birlikte düşünebiliriz.

Her iki derleme yapılandırmasını da nasıl tanımlayabilirsiniz?

Space Game web projesinin Yayın yapılandırmasını derleyen ve yayımlayan aşağıdaki görevleri göz önünde bulundurun. (Bu kodu azure-pipelines.yml dosyanıza eklemeyin .)

- task: DotNetCoreCLI@2
  displayName: 'Build the project - Release'
  inputs:
    command: 'build'
    arguments: '--no-restore --configuration Release'
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2
  displayName: 'Publish the project - Release'
  inputs:
    command: 'publish'
    projects: '**/*.csproj'
    publishWebProjects: false
    arguments: '--no-build --configuration Release --output $(Build.ArtifactStagingDirectory)/Release'
    zipAfterPublish: true

Hata ayıklama yapılandırmasını oluşturmak için bu iki görevi yineleyebilirsiniz, ancak yerine değerini ile DebugdeğiştirebilirsinizRelease.

Bunu yaptığınızda aradığınız sonuç elde edebilirsiniz ancak derlemeniz daha karmaşık hale geldiğinde veya gereksinimleriniz değiştiğinde ne olur? Her derleme görevinin her iki varyasyonu da el ile bulmanız ve değiştirmeniz gerekir. Ek derleme gereksinimlerini ekledikten sonra, bu gereksinimleri karşılamak için biri Hata Ayıklama yapılandırması ve diğeri Yayın için olmak üzere iki görev oluşturmanız gerekir.

Şablon kullanmak daha iyi bir çözümdür.

Şablon nedir?

Şablon, ortak derleme görevlerini bir kez tanımlamanıza ve bu görevleri birden çok kez yeniden kullanmanıza olanak tanır.

Derleme adımı olarak üst işlem hattından bir şablon çağıracaksınız. Parametreleri üst işlem hattından bir şablona geçirebilirsiniz.

Mara, uygulamayı şablon olarak derlemek ve yayımlamak için görevler tanımlayabilir ve ardından bu şablonu ihtiyaç duyduğu her yapılandırmaya uygulayabilir.

Şablonu tanımlama

Şablonun ortak derleme görevlerini bir kez tanımlamanıza ve bu görevleri birden çok kez yeniden kullanmanıza olanak tanıyan bir şablon olduğunu unutmayın. Bir şablonu üst şablonundan derleme adımı olarak çağırır ve parametreleri üst işlem hattından bir şablona geçirirsiniz.

Şimdi proje dosyasında tanımlanan tüm yapılandırmaları oluşturabilen bir şablon oluşturacaksınız.

  1. Visual Studio Code tümleşik konsolundan projenizin kökünde bir şablon dizini oluşturun.

    mkdir templates
    

    Uygulamada, şablon dosyasını herhangi bir konuma yerleştirebilirsiniz. Bunları şablonlar dizinine yerleştirmeniz gerekmez.

  2. Visual Studio Code'da Dosya Yeni Dosya'yı >seçin. Ardından, boş dosyayı projenizin templates dizinine build.yml olarak kaydetmek için Dosya > Kaydet'i seçin. ~/mslearn-tailspin-spacegame-web/templates örnek olabilir.

    Önemli

    Daha önce olduğu gibi, Windows'ta Kayıt türü listesinde YAML'yi seçin.

  3. Visual Studio Code'da bu kodu build.yml'ye ekleyin:

    parameters:
      buildConfiguration: 'Release'
    
    steps:
    - task: DotNetCoreCLI@2
      displayName: 'Build the project - ${{ parameters.buildConfiguration }}'
      inputs:
        command: 'build'
        arguments: '--no-restore --configuration ${{ parameters.buildConfiguration }}'
        projects: '**/*.csproj'
    
    - task: DotNetCoreCLI@2
      displayName: 'Publish the project - ${{ parameters.buildConfiguration }}'
      inputs:
        command: 'publish'
        projects: '**/*.csproj'
        publishWebProjects: false
        arguments: '--no-build --configuration ${{ parameters.buildConfiguration }} --output $(Build.ArtifactStagingDirectory)/${{ parameters.buildConfiguration }}'
        zipAfterPublish: true
    

    Bu görevler, uygulamayı derlemek ve yayımlamak için daha önce tanımladığınız görevlere benzer. Ancak bir şablonda giriş parametreleriyle normal değişkenlerle çalışmaktan farklı bir şekilde çalışırsınız. burada iki fark vardır:

    • Şablon dosyasında girdileri tanımlamak için yerine variables bölümünü kullanınparameters.
    • Şablon dosyasında, parametrenin değerini okumak için yerine $() söz dizimini kullanın${{ }}. Bir parametrenin değerini okuduğunuzda, bölümü adına eklersiniz parameters . Örneğin, ${{ parameters.buildConfiguration }}.

İşlem hattından şablonu çağırma

Şimdi işlem hattından oluşturduğunuz şablonu çağıracaksınız. Hata ayıklama yapılandırması için bunu bir kez yapacak ve ardından Yayın yapılandırması için işlemi yineleyeceksiniz.

  1. Visual Studio Code'da azure-pipelines.yml dosyasını burada gördüğünüz gibi değiştirin:

    trigger:
    - '*'
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
      buildConfiguration: 'Release'
      wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot'
      dotnetSdkVersion: '6.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'
    
    - template: templates/build.yml
      parameters:
        buildConfiguration: 'Debug'
    
    - template: templates/build.yml
      parameters:
        buildConfiguration: 'Release'
    
    - task: PublishBuildArtifacts@1
      displayName: 'Publish Artifact: drop'
      condition: succeeded()
    
    trigger:
    - '*'
    
    pool:
      name: 'Default' #replace if needed with name of your agent pool
    
    variables:
      buildConfiguration: 'Release'
      wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot'
      dotnetSdkVersion: '6.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'
    
    - template: templates/build.yml
      parameters:
        buildConfiguration: 'Debug'
    
    - template: templates/build.yml
      parameters:
        buildConfiguration: 'Release'
    
    - task: PublishBuildArtifacts@1
      displayName: 'Publish Artifact: drop'
      condition: succeeded()
    

    Bu dosya, derleme ve yayımlama görevlerini aynı görevleri yerine getiren şablona yapılan çağrılarla değiştirmesi dışında özgün dosyaya benzer.

    Şablonun her yapılandırma için bir kez çağrıldığını göreceksiniz. Yapılandırma adını şablona geçirmek için her template görev bağımsız değişkenini parameters kullanır.

İşlem hattını çalıştırma

Şimdi değişikliklerinizi GitHub'a göndererek işlem hattının çalıştırılmasını göreceksiniz.

  1. Tümleşik terminalden dizine azure-pipelines.yml ve templates/build.yml ekleyin, değişiklikleri işleyin ve değişiklikleri GitHub'a gönderin.

    git add azure-pipelines.yml templates/build.yml
    git commit -m "Support build configurations"
    git push origin build-pipeline
    
  2. Azure Pipelines'ta, daha önce yaptığınız gibi adımların her biri aracılığıyla derlemeyi izleyin.

    İşlem hattı çalıştırılırken işlemin şablondaki görevleri genişletdiğini göreceksiniz. Projeyi derleyen ve yayımlayan görevler, her derleme yapılandırması için bir kez, iki kez çalıştırılır.

    Screenshot of Azure Pipelines showing the expanded template tasks. Included are build and publish tasks for both the Debug and Release configurations.

  3. Derleme tamamlandığında özet sayfasına dönün ve daha önce yaptığınız gibi yayımlanan yapıtı seçin. Bırakma klasörünü genişletin.

    İşlem hattının hem Hata Ayıklama yapılandırması hem de Yayın yapılandırması için bir .zip dosyası ürettiğini göreceksiniz.

    Screenshot of Azure Pipelines showing the packaged application for both Debug and Release configurations.

Dalı main ile birleştirme

Bu noktada, Mara'nın şu anda ihtiyaç duyduğu her şeyi başaran çalışan bir derleme işlem hattına sahipsiniz.

Uygulamada, dalınızı dalla birleştirilen bir çekme isteği gönderirsinizbuild-pipeline.main

Şimdilik bu adımı atlayacağız. Sonraki modülde, çekme isteklerini gönderme, gözden geçirme ve birleştirme dahil olmak üzere GitHub'da ekibinizle işbirliği yapmanın bazı yollarını öğreneceksiniz.